Word2Vec 大語料訓練時,哪種策略最能學好罕見詞?
企業團隊在使用 Word2Vec 模型訓練客服文本語料時,若訓練資料量龐大且希望模型能更有效捕捉罕見詞的語意關聯,下列哪一種訓練策略最為適合?
一個企業的客服團隊要用 Word2Vec 訓練語言模型,資料量很大。他們特別希望模型能學好「罕見詞」(不常出現的詞)的語意,知道它跟哪些詞意思接近。
問你:下列哪一種訓練策略最適合這個需求?
一句話總結
大語料 + 想學好罕見詞,用 Skip-gram。原因是:Skip-gram 用「一個中心詞去預測多個周圍詞」,每次罕見詞出現,模型都能從它身上榨出很多訓練信號,讓罕見詞的向量收斂得更好。
先感受問題:罕見詞訓練不到,語意就跑掉
假設「順心客服平台」要訓練一個 Word2Vec 模型,語料是 500 萬則客服對話。
語料裡有高頻詞,也有罕見詞:
罕見詞:「誘導性消費」出現 200 次
罕見詞:「跨境稅費爭議」出現 50 次
問題來了:「誘導性消費」這個詞只出現 200 次。
如果每次它出現,模型只從中學到「它跟周圍哪一個詞有關」(CBOW 的做法:用周圍詞預測中心詞,中心詞是「誘導性消費」,但只更新一次),學習信號很少。
但如果換成 Skip-gram:「誘導性消費」出現一次,就要預測前後 5 個詞,產生 10 個訓練對,模型從這 10 個配對裡學 10 次「誘導性消費跟什麼有關」。
同樣是 200 次出現,Skip-gram 產生 2000 個訓練信號,CBOW 只有 200 個。罕見詞的向量品質差很多。
CBOW 為什麼在罕見詞上吃虧
CBOW 是「用周圍詞的平均,預測中心詞」。這個設計讓它有五個在罕見詞上的弱點:
- 每次出現只更新一次:罕見詞是中心詞時,只被更新一次,學習機會少。
- 周圍詞平均稀釋信號:CBOW 把周圍詞的向量平均再預測,個別詞的信號被平均值稀釋,罕見詞出現時,它的信號很可能被高頻周圍詞淹沒。
- 對罕見詞的判斷能力弱:訓練時罕見詞出現少,CBOW 沒機會學出好的罕見詞向量,測試時就猜不準。
- 適合高頻詞,不適合罕見詞:CBOW 透過多詞平均做預測,對高頻詞準確度高,但罕見詞出現時沒有辦法累積足夠的訓練梯度。
- 大語料優勢發揮不出來:語料量越大,高頻詞訓練越充分,但罕見詞的相對比例沒有增加,差距反而更大。
Skip-gram 怎麼讓罕見詞學得更好
回到「順心客服平台」。換成 Skip-gram 架構後:
「誘導性消費」出現一次(視窗大小 5):
預測配對 2:(誘導性消費, 投訴)
預測配對 3:(誘導性消費, 費用)
預測配對 4:(誘導性消費, 明細)
預測配對 5:(誘導性消費, 帳單)
(前後各 5 個,共最多 10 個配對)
每個配對都會觸發一次梯度更新,「誘導性消費」的向量被更新了 10 次,學到它跟「投訴」「費用」「帳單」語意接近。
200 次出現 × 10 個配對 = 2000 次更新,模型確實學到了「誘導性消費」的語意地位。
Skip-gram 的核心優勢:每個詞出現一次,就能榨出窗口大小 × 2 倍的訓練信號,罕見詞也能累積足夠梯度。
這就是選項 C 講的:採用 Skip-gram 模型,利用中心詞預測周圍詞語,能更有效學習低頻詞關聯。
技術版:Skip-gram vs CBOW 的訓練目標與梯度分析
中級考試大概率會考程式碼跟公式,所以這部分你還是要學。但如果現在學起來很痛苦,可以先跳過,等讀完其他題目回頭再來。
Word2Vec 的兩種架構目標:
CBOW:
輸入:周圍詞 context = [w_{t-k}, ..., w_{t-1}, w_{t+1}, ..., w_{t+k}]
目標:預測中心詞 w_t
訓練對:1 個(context → 1 個中心詞)
Skip-gram:
輸入:中心詞 w_t
目標:預測周圍詞 w_{t-k}, ..., w_{t+k}
訓練對:2k 個(1 個中心詞 → 2k 個周圍詞)
- CBOW:「根據前後文猜中間那個詞」。老師給你填空題,一個空格只學一次。
- Skip-gram:「給你一個詞,猜它的前後文有哪些詞」。一個詞要回答多道題,每答一題就學一次。
- 罕見詞影響:罕見詞出現少,CBOW 學習機會少;Skip-gram 每次出現都能學很多次。
| 故事 | 程式碼(gensim) |
|---|---|
| 用 Skip-gram 訓練(sg=1) | Word2Vec(sentences, sg=1, window=5) |
| 用 CBOW 訓練(sg=0) | Word2Vec(sentences, sg=0, window=5) |
| 設定視窗大小 | window=5(前後各 5 個詞) |
| 最小詞頻(過濾超罕見詞) | min_count=2 |
- sg(skip-gram flag)
- gensim 裡 sg=1 是 Skip-gram,sg=0 是 CBOW。
- window
- 視窗大小,決定「周圍」的範圍。window=5 代表前後各 5 個詞。越大則每次訓練信號越多,但訓練也越慢。
- min_count
- 最低出現次數。出現次數低於這個值的詞會被過濾掉,因為太罕見的詞向量無法訓練得有意義。
- negative
- 負採樣數量(Negative Sampling)。每個訓練對除了正例,還會隨機抽幾個負例來對比,加快訓練速度。
Skip-gram 的訓練目標是最大化:
L = Σ_t Σ_{-k≤j≤k, j≠0} log P( w_{t+j} | w_t )
其中:
P( w_O | w_I ) = exp(v_wO · v_wI) / Σ_w exp(v_w · v_wI)
v_wI:中心詞的向量
v_wO:周圍詞的向量
k:視窗大小
罕見詞每次出現,這個加總對罕見詞的向量 v_wI 做 2k 次梯度更新,遠多於 CBOW 的 1 次。
蓋住架構圖,說出 Skip-gram 對罕見詞的優勢:
- Skip-gram 用中心詞預測周圍詞
- 每出現一次,產生 2k 個訓練配對
- 罕見詞向量被更新 2k 倍次,學習更充分
- CBOW 每次只更新 1 次,罕見詞學習不足
為什麼其他選項是錯的
A採用 Skip-gram 模型,但以隨機初始化權重加快高頻詞的訓練收斂
用 Skip-gram,但對高頻詞給予特殊的隨機初始化權重,讓它們更快收斂。
選對了 Skip-gram,但目標搞錯了。題目問的是要讓「罕見詞學得更好」,選項 A 卻在想辦法加快「高頻詞的收斂」。高頻詞本來就出現夠多、訓練充分,不需要特別照顧。而且「隨機初始化加快高頻詞收斂」這個說法技術上也不成立,隨機初始化是標準做法,不是針對高頻詞的特殊策略。
知道 Skip-gram 對罕見詞好,但沒仔細看後半段描述的人。「加快高頻詞收斂」和「提升罕見詞學習」是反方向的優化目標,選項 A 方向就走反了。
B採用 CBOW 模型並結合 TF-IDF 權重以強化低頻詞表示
用 CBOW,但加上 TF-IDF 的權重,讓低頻詞在 CBOW 的平均過程中比重更高,補救 CBOW 的罕見詞問題。
這個想法有創意,但 TF-IDF 是靜態的文件層級權重,Word2Vec 的訓練是動態調整詞向量,兩個系統的目標不一樣,簡單地把 TF-IDF 權重加進 CBOW 的訓練並不是標準做法,也沒有被研究證實能有效改善罕見詞的語意學習。更根本的問題是:CBOW 結構本身就讓罕見詞訓練機會少,光靠加權重不能解決這個結構性問題。
知道 TF-IDF 對低頻詞有強化效果(IDF 分數高),就覺得加進來能補救 CBOW 缺點的人。Word2Vec 和 TF-IDF 是不同範疇的工具,隨意組合不代表效果相加。
D採用 CBOW 模型,利用周圍詞預測中心詞,能提升罕見詞的語意穩定度
CBOW 用周圍詞的平均向量預測中心詞,因為周圍詞多,訊號更穩定,所以罕見詞的向量也更穩定。
邏輯反了。CBOW 的「穩定」是高頻詞的優勢:高頻詞出現很多次,每次周圍詞組合不同,平均後向量確實更穩定。但罕見詞出現太少,CBOW 的平均根本沒有足夠樣本,穩定性無從談起。而且「語意穩定度」這個說法在罕見詞場景是個誤導:若罕見詞只出現 50 次,CBOW 只更新 50 次,比 Skip-gram 少 10 倍,怎麼穩定?
記住「CBOW 比 Skip-gram 快、更穩定」這個印象,就以為它對所有情況都更好的人。正確的記憶方式:CBOW 快且對高頻詞好,Skip-gram 慢但對罕見詞和語意類比任務更好。針對罕見詞就要用 Skip-gram。
同個考點下次怎麼變形
如果訓練資料很少,Skip-gram 還是最好的選擇嗎?
Skip-gram 訓練慢,資料少時更慢,是否反而不適合?
資料少時,Skip-gram 的優勢更明顯。因為資料少,每個詞出現的機會更有限,Skip-gram 能從每次出現榨出更多訓練信號就更關鍵。CBOW 在資料少時反而更容易欠擬合,因為它學習信號本來就少。但如果資料量少到連罕見詞都幾乎沒出現(例如每個詞只出現一兩次),兩種架構都束手無策,這時應考慮預訓練詞向量(如 fastText)。
什麼情況下 CBOW 比 Skip-gram 更適合?
既然 Skip-gram 對罕見詞好,是不是所有情況都選 Skip-gram 就好?
不是。CBOW 的優勢:訓練速度快(約快 5~10 倍)、對高頻詞的語意表示更平滑穩定、在超大語料且主要關心高頻詞的情境下表現好。例如要訓練 100 億詞的通用語料、主要做句子分類(高頻詞主導),CBOW 更有效率。Skip-gram 適合:罕見詞多、語意類比任務(king - man + woman = queen)、語料不是很大的情況。
fastText 和 Word2Vec 相比,對罕見詞有什麼額外優勢?
fastText 也是詞向量模型,跟 Word2Vec 的罕見詞處理有什麼不同?
fastText 的核心優勢:把詞拆成字元 n-gram(子詞)。例如「理賠糾紛」可以被拆成「理賠」「賠糾」「糾紛」等子詞組合。即使「理賠糾紛」從來沒出現過,fastText 也能用「理賠」和「糾紛」的向量組合推算出它的語意。Word2Vec 遇到訓練時沒見過的詞就完全不認識(out-of-vocabulary),fastText 對罕見詞和未見詞的處理都比 Word2Vec 更強。
醫療文本訓練詞向量,為什麼罕見詞問題特別嚴重?
醫療文本跟客服文本不一樣的地方,跟罕見詞有什麼關係?
醫療術語的分佈極度長尾:常見病(高血壓、糖尿病)對應的詞大量出現,罕見疾病(如少見的基因突變型別名稱)可能全語料只出現幾次。偏偏罕見疾病的術語往往是診斷的關鍵。這種場景用 Skip-gram 比 CBOW 好,但更推薦用已在 PubMed 等醫學語料上預訓練好的模型(如 BioBERT、PubMedBERT),它們在學術論文大語料上見過這些罕見術語,直接微調比從頭訓練好得多。
怎麼評估罕見詞的向量是否訓練得好?
詞向量訓練完,怎麼知道罕見詞的部分是否真的學好了?
三種評估方法:1. 近鄰詞測試:對罕見詞做最近鄰查詢,看找到的詞是否語意相關(如「誘導性消費」的近鄰應該包含「欺詐」「強迫購買」);2. 類比任務:測試「罕見詞 A : B = C : ?」這種類比任務的準確率;3. 下游任務:把詞向量用在文本分類,看涉及罕見詞的樣本分類準確率有沒有提升。三種方法各有側重,實務上最重要的是下游任務表現。
想再往下看,這 5 個
- 詞向量(Word2Vec)Google 提出的詞向量訓練方法,有 Skip-gram 和 CBOW 兩種架構,Skip-gram 對罕見詞效果更佳。
- 嵌入表示(Embedding)把離散詞語映射成連續稠密向量的技術,Word2Vec 是最經典的詞嵌入方法,語意相近的詞向量距離也近。
- 次詞單元化(Subword Tokenization)把詞切分成更小單位(字元 n-gram 或 BPE),讓模型能處理訓練時未見的罕見詞(OOV),是 fastText 優於 Word2Vec 的核心原理。
- 詞袋模型(Bag of Words)忽略詞序只計頻率的文字表示法,是 Word2Vec 出現前的主流方法;兩者的比較有助於理解詞向量的優勢。
- 語料庫(Corpus)用於訓練語言模型的大規模文本集合,語料規模和品質直接決定詞向量的語意涵蓋範圍和罕見詞的訓練品質。