Word2Vec 和 GloVe 的根本差異是什麼?
在詞向量(Word Embedding)訓練方法中,GloVe(Global Vectors for Word Representation)與 Word2Vec 的主要差異為何?
在 NLP(自然語言處理)裡,要讓電腦「理解」文字,第一步是把每個詞變成一組數字向量,讓意思相近的詞距離也相近。這個技術叫做「詞向量」(Word Embedding)。
Word2Vec 和 GloVe 是兩個最經典的詞向量訓練方法。
問你:這兩個方法的根本差異在哪裡?
一句話總結
兩者的根本差異在於學習策略:Word2Vec 靠「預測」(給上下文猜目標詞,或給目標詞猜上下文)訓練神經網路;GloVe 靠「統計整個語料的詞共現次數」,用矩陣分解的方式學出詞向量。一個是預測式,一個是統計式。
先感受問題:怎麼讓機器知道「貓」和「狗」比較像,不像「火車」
假設「字典科技」公司要建立一個繁體中文詞向量模型,語料是 5 億句新聞文章。他們要決定用 Word2Vec 還是 GloVe。
先想想人類怎麼學詞義:看到「貓」這個字,你知道它和「狗」「兔子」接近,和「火車」遠,因為這些詞常常出現在類似的句子裡:
「我家養了一隻狗,非常活潑。」
「火車今天晚點了兩小時。」
「貓」和「狗」出現的語境很像,「火車」出現的語境完全不同。機器如果能學到這個規律,就能把「貓」和「狗」放在向量空間裡比較近的位置,「火車」放在遠處。
Word2Vec 和 GloVe 都在做這件事,但學習的方法不同:一個是考試(預測),一個是統計(計數)。
在 Word2Vec 和 GloVe 之前,詞向量怎麼做
在這兩個方法出現之前,最常見的做法是「One-hot 編碼」:字典裡有 10 萬個詞,就用 10 萬維的向量表示每個詞,那個詞的位置填 1,其他全是 0。
這個做法的五個問題:
- 維度爆炸:10 萬個詞就要 10 萬維向量,存不下、算不動。
- 沒有語意:「貓」和「狗」的 One-hot 向量距離跟「貓」和「火車」一樣遠,完全不捕捉語意。
- 無法泛化:沒看過的詞就不存在,新詞加入要全部重來。
- 稀疏低效:10 萬個位置裡只有 1 個是 1,其他 99,999 個都是 0,極度浪費。
- 無法做類比推理:「國王 - 男人 + 女人 = 女王」這種推理用 One-hot 做不到。
Word2Vec(2013)和 GloVe(2014)先後解決了這些問題,用低維稠密向量捕捉語意。但兩者的做法完全不同。
Word2Vec 怎麼學,GloVe 怎麼學
Word2Vec:預測式訓練
Word2Vec 有兩種模式,但核心都是「出題考試」。以 CBOW(Continuous Bag of Words)為例:
模型用上下文「我、家、養、了、一、隻、非、常、粘、人」預測:[?] = 貓
答對加分,答錯調整,重複億次
字典科技的 5 億句語料,每句話滑窗取樣,模型反覆被「考試」,最終學出每個詞的向量。這個過程是神經網路的反向傳播,一句句看、一次次調整。
GloVe:統計式訓練
GloVe 不考試,而是先把所有語料的共現次數都統計完,建成一個「詞共現矩陣」(Co-occurrence Matrix):
「貓」和「食物」同一句出現:80,000 次
「貓」和「火車」同一句出現:300 次
然後用矩陣分解技術,把這個大矩陣壓縮成低維向量。「貓」和「養」共現次數高,向量就被拉得近;「貓」和「火車」幾乎不共現,向量就遠。
GloVe 「一次看全局」(Global),而 Word2Vec 是「逐句學習」(Local)。
這就是選項 C 講的:Word2Vec 為基於預測的模型,而 GloVe 為基於共現統計的模型。
技術版:GloVe 損失函數與 Word2Vec 兩種架構
中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。
Word2Vec 的兩種架構:
- CBOW(Continuous Bag of Words):給上下文詞,預測中心詞。速度快,適合高頻詞。
- Skip-gram:給中心詞,預測上下文詞。對低頻詞效果更好。
GloVe 的損失函數:
J = Σ f(X_ij) × (wᵢᵀ × w̃ⱼ + bᵢ + b̃ⱼ - log(X_ij))²
- Word2Vec:對每個句子出一道填空題,讓神經網路答,答完調整向量,重複幾億次
- GloVe:先把所有語料的「誰和誰同一句出現幾次」全部統計好,然後找一組向量能最好地解釋這些統計數字
| 故事 | 公式符號 |
|---|---|
| 詞 i 和詞 j 共同出現的次數 | X_ij |
| 詞 i 的向量 | wᵢ |
| 詞 j 的「上下文向量」 | w̃ⱼ |
| 詞 i 的偏置項 | bᵢ |
| 「共現次數很大時少算一點」的權重函數 | f(X_ij) |
- X_ij
- 詞 i 和詞 j 在整個語料庫同一個視窗內共同出現的總次數。GloVe 的核心輸入。
- wᵢᵀ × w̃ⱼ
- 兩個詞的向量點積。GloVe 希望這個點積接近 log(X_ij),也就是共現次數的對數。
- f(X_ij)
- 權重函數,讓極高頻共現(如「的」和任何詞)不要過度主導訓練。超過某個閾值後權重不再增加。
- log(X_ij)
- 共現次數取對數,把「10,000 次」和「100 次」的差壓縮到合理範圍,避免高頻詞主導。
GloVe 的訓練目標:找一組向量 wᵢ 和 w̃ⱼ,讓它們的點積最接近 log(X_ij)。
念法:「對所有詞對 (i, j),加總(權重函數 × (向量點積 + 偏置 − 共現對數)的平方),讓這個總損失最小。」
用 Gensim 載入預訓練 GloVe 的示範:
from gensim.models import KeyedVectors
# 載入預訓練的 GloVe(需先轉換格式)
glove = KeyedVectors.load_word2vec_format("glove.6B.100d.txt", no_header=True)
# 找最相似的詞
print(glove.most_similar("cat", topn=5))
# [('cats', 0.89), ('dog', 0.85), ('kitten', 0.82), ...]
# Word2Vec 用法幾乎一樣
from gensim.models import Word2Vec
# model = Word2Vec(sentences, vector_size=100, window=5, min_count=1)
蓋住公式,說出兩者的根本差異:
- Word2Vec:逐句出填空題,神經網路預測答案,反向傳播調整向量
- GloVe:先統計全語料的詞共現矩陣,再用矩陣分解找到最好的向量表示
- 前者是「局部預測」,後者是「全局統計」
為什麼其他選項是錯的
AWord2Vec 以詞頻重訓練詞向量,而 GloVe 以隨機初始化向量進行學習
說 Word2Vec 用詞出現的頻率作為向量訓練的依據,GloVe 從隨機初始的向量開始學習。
兩者都是從隨機初始化向量開始的(這是神經網路的標準做法)。Word2Vec 不是靠詞頻訓練,而是靠預測上下文詞的任務調整向量。GloVe 也不是「隨機學習」,它是靠共現統計數據驅動的優化。選項 A 把兩者的描述都弄反了,且都不準確。
聽說過「詞頻」這個概念(像 TF-IDF),以為詞向量也是靠詞頻訓練的考生。詞頻統計是 TF-IDF 的做法,不是 Word2Vec。
BWord2Vec 以全局統計矩陣為基礎,而 GloVe 採用神經網路進行上下文預測
說 Word2Vec 靠全局統計,GloVe 靠神經網路預測上下文。
這是把 C 選項(正確答案)的描述完全顛倒。事實上,全局統計矩陣是 GloVe 的做法,神經網路預測上下文是 Word2Vec 的做法。選項 B 是「正確答案但左右顛倒」的經典誘餌。
記得「兩個方法的差異」但記混了誰是誰的考生。考試前背的時候「GloVe 是全局統計」這個記憶不夠牢,看到選項 B 和 C 時搞不清楚方向。這是最常見的選錯情境,要特別注意:GloVe 名字裡就有「Global」,代表全局統計。
DWord2Vec 僅能用於靜態文本語料,而 GloVe 可應用於即時語料更新
說 Word2Vec 只能用在事先準備好的靜態資料,GloVe 可以隨時加入新語料更新。
這個說法完全相反。事實上,GloVe 需要先統計完整個語料的共現矩陣才能訓練,比 Word2Vec 更依賴靜態語料。Word2Vec 可以用 online learning 方式逐漸加入新句子。兩者在現代實務上都是靜態的,不支援真正的即時更新。
直覺上覺得「全局統計(GloVe)應該更完整、更適合更新」的考生。實際上全局統計反而需要重新跑整個語料,更新成本比 Word2Vec 高。
同個考點下次怎麼變形
Word2Vec 和 GloVe 都是「靜態詞向量」,這個「靜態」是什麼意思?
訓練完之後,每個詞只有一個固定向量,不管放在哪個句子都一樣?
正確。「蘋果」不管在「吃蘋果」還是「蘋果發表 iPhone」,Word2Vec 和 GloVe 都給同一個向量。這就是它們的最大限制,無法處理一詞多義。BERT 解決了這個問題:同一個詞在不同句子裡,BERT 給出不同的向量(動態詞向量,Contextual Embedding)。
如果語料很小(只有 1 萬句),Word2Vec 和 GloVe 哪個效果更差?
GloVe 靠全局統計,需要足夠的數據才能建出有意義的共現矩陣。語料小時應該更吃虧?
通常是 GloVe 更差。GloVe 的共現矩陣在語料少時非常稀疏(大多數詞對共現次數為 0),矩陣分解找不到好的向量。Word2Vec 的逐句訓練在小語料上還能運作(雖然也不準),相比之下比較有彈性。小語料場景更建議直接用預訓練好的 BERT 微調。
FastText 跟 Word2Vec 有什麼不同?
FastText 是 Facebook 出的,聽起來是 Word2Vec 的進化版?
FastText 是 Word2Vec 的改進,核心差異是:Word2Vec 把每個詞視為最小單位,FastText 把每個詞拆成「字符 n-gram」(例如「apple」拆成 ap、app、ppl、ple、le)。優點是能處理沒見過的新詞(Out-of-Vocabulary),因為新詞的字符組合可能在訓練集裡出現過。對形態豐富的語言(德文、芬蘭文)特別有效。
詞向量的「類比推理」(king - man + woman = queen)背後是什麼數學?
國王減去男人加上女人等於女王,聽起來很神奇,但這是數學還是巧合?
是向量加減法。訓練好的詞向量把「性別」這個概念編碼成空間裡的一個方向:「king」和「queen」的差向量,大致等於「man」和「woman」的差向量。這個幾何性質是從大量語料中自然浮現的,不是人工設計的。類比推理展示了詞向量捕捉到了語義關係,而不只是表面字形。
怎麼評估詞向量的品質好不好?
「貓」和「狗」的向量距離近,這樣算好嗎?
有兩類評估方式。內在評估(Intrinsic Evaluation):詞相似度任務(WordSim-353、SimLex-999),比對人工評分和向量餘弦相似度的相關性;類比任務(Analogy Task),測試「國王:王后 = 男人:?」的準確率。外在評估(Extrinsic Evaluation):把詞向量放進下游任務(命名實體識別、情感分析),看準確率有沒有提升。外在評估更實用,但內在評估更快速。
想再往下看,這 5 個
- 詞向量(Word2Vec)核心考點:以神經網路預測上下文詞語的方式學習詞向量,是基於預測的靜態詞向量代表方法。
- 嵌入表示(Embedding)把離散詞語對應到連續向量空間的技術,是 Word2Vec 與 GloVe 的共同輸出形式,也是 NLP 的基礎建設。
- 餘弦相似度(Cosine Similarity)評估兩個詞向量語意相似程度的常用度量,可用來驗證 Word2Vec 或 GloVe 訓練品質是否良好。
- 矩陣分解(Matrix Factorization)GloVe 的核心方法:對詞共現計數矩陣做分解,融合全局統計資訊,與 Word2Vec 局部窗口預測形成對比。
- 雙向編碼器表示(BERT)動態詞向量的上位概念:同一個詞依上下文產生不同向量,解決 Word2Vec/GloVe 靜態一詞一義的限制。