📊 詞表示方式演進(Word Representation)
從稀疏表示到密集語義向量的四代演進
NLP 核心挑戰:如何將「文字」轉換成機器能計算的「數字」。從最早的 Bag-of-Words 到當代的 BERT 上下文嵌入,每一代都大幅提升語義理解能力。
Bag-of-Words
稀疏 One-Hot
不含語義
高維稀疏向量
[0,1,0,0,1,0...]
TF-IDF
加權詞頻
考慮文件稀有度
仍為稀疏向量
TF × IDF
Word2Vec
密集語義向量
CBOW / Skip-gram
相似詞 → 近似向量
king-man≈queen-woman
靜態嵌入(固定)
BERT / GPT
上下文動態嵌入
同詞不同語境 → 不同向量
MLM / 自迴歸預訓練
Transformer Attention
動態嵌入(隨上下文變化)
◀ 當代最強表示方式
Bag-of-Words(詞袋模型)
每個詞對應一個 One-Hot 向量(僅對應位置為1)。缺點:詞彙表有10萬詞就要10萬維,且完全無法捕捉語義關係(cat ≠ kitten)。
▶ 考點:稀疏高維 / 無語義資訊
TF-IDF(詞頻-逆文件頻率)
在 BoW 基礎上加權:常見詞(the/是/的)權重低,稀有詞權重高。廣泛用於關鍵詞提取、文件相似度。仍為稀疏向量,無法捕捉語義相似性。
▶ 考點:TF-IDF = 詞頻 × 逆文件頻率
Word2Vec(密集嵌入)
將詞映射到低維密集向量(100-300維)。語義相近的詞向量距離近。支持向量運算:king - man + woman ≈ queen。靜態嵌入(每詞固定一個向量)。
▶ 考點:Word2Vec將詞轉向量 / 向量運算
BERT(上下文動態嵌入)
「bank」在「river bank」和「bank account」中有不同的向量表示(動態嵌入)。透過 Transformer Attention 感知整個句子上下文,語義理解能力大幅超越靜態嵌入。
▶ 考點:動態嵌入 / 雙向上下文
📐 TF-IDF 公式詳解
TF(詞頻)× IDF(逆文件頻率)= 詞對文件的重要性
TF (t, d) = (詞 t 在文件 d 中出現的次數) / (文件 d 的總詞數)
IDF (t, D) = log ( N / df(t) )
TF-IDF (t, d, D) = TF (t, d) × IDF (t, D)
詞語 TF(出現頻率) IDF(逆文件頻率) TF-IDF 說明
的、是 高(0.08) 低(≈0) ≈ 0 停用詞,IDF 近乎為零
機器學習 中(0.03) 中(2.1) 0.063 技術詞,有一定辨識度
量子糾纏 低(0.01) 高(5.2) 0.052 稀有詞,TF 低但 IDF 極高
iPAS 低(0.005) 極高(7.8) 0.039 特定文件關鍵詞
📌 考試考點: TF-IDF = 詞頻 × 逆文件頻率 。IDF 的作用是「懲罰」常見詞(的、是),給予稀有詞更高權重。常用於搜尋引擎關鍵詞提取、文件相似度計算。
🧠 Word2Vec:CBOW vs Skip-gram
兩種訓練策略:從上下文預測詞 vs 從詞預測上下文
CBOW(連續詞袋)
Skip-gram
向量運算(類比推理)
CBOW
貓
在
地板
上
Hidden
→ 坐
上下文詞 → 預測中心詞
Skip-gram
坐(輸入)
Hidden
→ 貓
→ 在
→ 地板
→ 上
中心詞 → 預測上下文詞
模型 訓練方式 適合場景 特點
CBOW 上下文詞 → 預測中心詞 常見詞、大語料庫 訓練速度快,常見詞表示好
Skip-gram 中心詞 → 預測上下文詞 稀有詞、小語料庫 稀有詞效果更好,訓練較慢
GloVe 全局共現矩陣分解 大規模語料統計 結合全局統計與局部上下文
📌 考試考點: Word2Vec 兩種訓練方式 — CBOW(上下文→中心詞)適合大語料常見詞;Skip-gram(中心詞→上下文)對稀有詞效果更好。GloVe 使用全局共現矩陣 ,結合全局統計信息。
🔢 GloVe — 全局向量詞嵌入
GloVe (Global Vectors):利用整個語料庫的詞共現統計
GloVe 建立共現矩陣 X :X_ij 表示詞 i 和詞 j 在一定視窗內共同出現的次數。透過因式分解共現矩陣訓練出詞向量,使得:
J = Σ_ij f (X_ij) · ( wᵢᵀ ·w̃ⱼ + bᵢ + b̃ⱼ - log (X_ij) )²
共現矩陣(Co-occurrence Matrix)
統計整個語料庫中每對詞在視窗內共現的次數。「冰」和「固體」共現多 → 關係密切。「冰」和「蒸氣」共現少但各自與「水」共現多 → 間接關聯。
▶ 考點:GloVe 使用全局共現矩陣
GloVe vs Word2Vec 差異
Word2Vec 基於局部上下文視窗(Local Context Window);GloVe 利用全局共現統計(Global Co-occurrence),通常在大語料庫上表現更穩定。兩者都產生靜態詞向量。
▶ 考點:GloVe=全局統計 / Word2Vec=局部視窗
靜態 vs 動態嵌入
Word2Vec 和 GloVe 都是靜態嵌入:每個詞固定對應一個向量,無論上下文。BERT 是動態嵌入:同一個詞在不同句子中有不同向量(解決一詞多義)。
▶ 考點:靜態嵌入無法解決一詞多義
🤖 BERT — 雙向 Encoder 預訓練
Masked Language Model(MLM)+ Next Sentence Prediction(NSP)
BERT(Bidirectional Encoder Representations from Transformers)使用 Transformer Encoder 堆疊,同時關注句子左右兩側的上下文,透過兩個預訓練任務學習深層語言表示。
[CLS]
[MASK]
在
地板
上
[SEP]
BERT Encoder × 12層
雙向 Multi-Head Self-Attention(←→ 同時看左右)
分類向量
預測原始詞
(MLM任務)
對比:GPT(Decoder Only)
Masked Self-Attention(→ 只看左側)
自迴歸:每次預測下一個 token
The → cat → sat → on → ...
適合文本生成(ChatGPT、GPT-4)
MLM(遮蔽語言模型)
隨機遮蔽 15% 的 token,讓模型根據左右兩側上下文預測被遮蔽的詞。這使 BERT 能學到雙向語義關係,完成後不再需要語言模型,只保留 Encoder 表示。
▶ 考點:MLM = 雙向預測遮蔽詞
NSP(下一句預測)
給定兩個句子 A, B,判斷 B 是否為 A 的下一句(50%是/50%否)。訓練模型理解句子間的邏輯關係,對問答(QA)和推理任務有幫助。
▶ 考點:NSP = 句子關係理解
BERT Fine-tuning 下游任務
預訓練 BERT 後,加上任務頭(Task Head)並微調:文本分類([CLS]向量)、NER(每個 token 的輸出)、問答(抽取答案位置)、語義相似度等。
▶ 考點:預訓練+微調 = Transfer Learning
📌 考試考點: BERT 雙向(←→)使用 MLM 預訓練,適合理解任務(分類/NER/QA);GPT 單向(→)自迴歸,適合生成任務。「哪個模型能理解句子語義?」→ BERT。
🏷️ NLP 下游任務:NER / 情感分析 / 機器翻譯
iPAS 高頻考題:三大 NLP 應用任務
① NER — 命名實體辨識(Named Entity Recognition)
從文本中自動識別並分類具有特定意義的實體,是資訊抽取的基礎任務。
蘋果公司的
提姆.庫克
PER(人名)
在
矽谷
LOC(地名)
宣布
iPhone 17
PROD(產品名)
正式發布
NER 輸出類型:PER (人名)、ORG (組織)、LOC (地名)、DATE (日期)、PRODUCT (產品)。常用技術:CRF(條件隨機場)、BERT-NER(token 分類)。
② 情感分析(Sentiment Analysis)
類型 輸出 模型方法 應用場景
二分類情感 正面 / 負面 BERT Fine-tuning、LSTM 產品評論分析、輿情監控
多分類情感 1-5 星評分 多標籤分類 BERT 電商平台星級預測
面向情感分析(ABSA) 特定面向的情感 Aspect-based Models 「服務好但食物差」→ 分別分析
③ 機器翻譯 BLEU Score(評估指標)
BLEU = BP × exp ( Σ_n wₙ · log (pₙ ) )
BLEU = n-gram 重疊率
計算機器翻譯輸出與參考翻譯之間 n-gram 的重疊程度。BLEU-1(詞)、BLEU-4(4連詞)。BLEU > 0.6 通常認為達到人工翻譯水準。
▶ 考點:BLEU 越高 = 翻譯品質越好
Seq2Seq + Attention
機器翻譯主流架構:Encoder 讀取原文 → Attention 機制讓 Decoder 關注輸入的不同部分 → Decoder 逐詞生成譯文。Transformer 取代了 LSTM 版本,效果更佳。
▶ 考點:Transformer = 機器翻譯 SOTA
NLP 評估指標整理
BLEU → 機器翻譯;ROUGE → 文本摘要(召回率導向);F1-Score → NER/分類;Perplexity(困惑度)→ 語言模型品質(越低越好)。
▶ 考點:不同任務的評估指標不同
📌 考試考點: NER 識別人名(PER)/地名(LOC)/組織(ORG) ;BLEU 分數評估機器翻譯品質(n-gram重疊);Perplexity 評估語言模型(越低越好)。
🎮 3D 互動視覺化:Word Embedding 向量空間
Word2Vec king - man + woman ≈ queen 類比推理 3D展示(可旋轉拖曳)
每個球體代表一個詞的向量位置。紫色箭頭表示「皇室」語義向量(king→queen),青色箭頭表示「性別」語義向量(man→woman)。兩個向量在高維空間中近似平行,體現詞向量的類比推理能力。
Word Embedding 3D Space · 拖曳旋轉
⏸ 暫停自轉
🔄 重置視角
🔀 切換向量顯示
📋 考試重點整理
TF-IDF 公式
TF(詞在文件中的頻率)× IDF(log 總文件數/含該詞文件數)。常見詞的 IDF 趨近 0,稀有詞的 IDF 高。
▶ 必背公式
Word2Vec 訓練方式
CBOW:上下文→預測中心詞(快);Skip-gram:中心詞→預測上下文(稀有詞好)。GloVe:全局共現矩陣分解。
▶ 高頻選擇題
BERT vs GPT
BERT 雙向 Encoder + MLM 預訓練,適合理解(NER/分類/QA);GPT 單向 Decoder,適合生成。
▶ 必考比較題
NER 識別類型
PER(人名)/ ORG(組織)/ LOC(地名)/ DATE(日期)/ PRODUCT(產品)。BERT-NER:token 級別序列標注任務。
▶ 應用情境題
BLEU Score
機器翻譯評估指標。計算機器輸出與參考翻譯的 n-gram 重疊率(加 Brevity Penalty 懲罰過短輸出)。0~1,越高越好。
▶ 評估指標題
靜態 vs 動態嵌入
Word2Vec/GloVe = 靜態(每詞固定向量,無法解決一詞多義);BERT = 動態(同詞不同語境 → 不同向量)。
▶ 概念理解題
💻 程式碼考點(pandas · seaborn · scikit-learn NLP)
📦 文字資料讀取與前處理(pandas)
import pandas as pd
df = pd.read_csv ('text_data.csv' )
# 文字欄位基本操作
df ['text' ] = df ['text' ].str.lower () # 轉小寫
df ['text' ] = df ['text' ].str.strip () # 去首尾空白
df ['length' ] = df ['text' ].str.len () # 計算文字長度
df .dropna (subset=['text' ]) # 移除空值
🤖 TF-IDF 向量化與情感分析(scikit-learn)
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_report
# TF-IDF 特徵提取(考點:max_features 控制詞彙量)
vectorizer = TfidfVectorizer (max_features=5000 )
X = vectorizer .fit_transform (df ['text' ])
y = df ['sentiment' ] # 正/負面標籤
# 訓練情感分類器
X_train , X_test , y_train , y_test = train_test_split (X , y , test_size=0.2 )
model = LogisticRegression ().fit (X_train , y_train )
print (accuracy_score (y_test , model .predict (X_test )))
TfidfVectorizer 文字→TF-IDF稀疏矩陣
fit_transform() 學習詞彙表並轉換
max_features 限制詞彙量防止高維
🎨 NLP 資料視覺化(seaborn)
import seaborn as sns
import matplotlib.pyplot as plt
# 情感分布
sns.countplot (data=df , x='sentiment' ) # 類別數量
# 文字長度分布
sns.histplot (data=df , x='length' , bins=50 )# 長度直方圖
# 混淆矩陣熱力圖
from sklearn.metrics import confusion_matrix
sns.heatmap (confusion_matrix (y_test , y_pred ), annot=True , fmt='d' )
plt.show ()
🧪 歷屆考題程式題型(選擇題)
Q: 使用 seaborn 繪製類別數量長條圖的函式為?
(A) sns.histplot()
(B) sns.countplot() ✓
(C) sns.scatterplot()
(D) sns.heatmap()
Q: TF-IDF 中 max_features=5000 的意義為?
(A) 最多處理 5000 筆文件
(B) 詞向量維度為 5000
(C) 只保留頻率最高的 5000 個詞 ✓
(D) 訓練迭代 5000 次
🎯 仿真考題(8 題)