連續詞袋模型 是什麼?
Continuous Bag of Words:連續詞袋模型 的完整解釋
Word2Vec 中根據上下文詞預測目標詞的神經網路架構,是 CBOW 的完整名稱。
連續詞袋模型(CBOW, Continuous Bag of Words)是 Tomas Mikolov 等人於 2013 年在 Word2Vec 論文中提出的兩種主要架構之一。與其對偶的 Skip-gram 相反,CBOW 的方向是根據前後上下文預測中心詞,這在直覺上更符合自然語言的閱讀方式。
核心架構與訓練過程
CBOW 的神經網路架構異常簡單,只有三層:
輸入層:包含上下文詞(通常是目標詞前後各 c 個詞,窗口大小 2c+1)的獨熱編碼向量,維度均為 |V|(詞表大小)。
隱層:單層隱層,寬度為 d(嵌入維度,如 100、300)。輸入層到隱層的權重矩陣 W(|V| × d)就是我們要學習的詞向量。所有上下文詞的獨熱向量與 W 相乘後取平均,得到隱層激活值。
輸出層:將隱層激活投影回詞表大小 |V|,通過 Softmax 生成各詞的條件機率 P(target_word | context)。損失函數是交叉熵(目標詞的機率應最大化)。
簡單數學表達:
- 隱層 h = (1/2c) Σ W x_context (上下文向量平均)
- 輸出 y = Softmax(W' h + b)
- 損失 = -log P(target | context)
為什麼取平均而不是連接?
CBOW 對上下文詞的處理是取平均而非連接(concatenation)。這個設計看似簡陋,卻有深層原因:若連接所有上下文詞向量,隱層寬度會隨上下文窗口大小 2c 倍增;取平均則使隱層固定寬度,參數量與窗口大小無關。這種「位置不變性」設計使得 CBOW 能處理任意長度的上下文(儘管通常固定窗口),且大幅減少參數量,加速訓練。
訓練技巧與優化
負採樣(Negative Sampling)
Compute Softmax 的計算成本是 O(|V|)(詞表大小),對百萬量級詞表極為昂貴。Mikolov 提出「負採樣」技巧:不是優化整個詞表的 Softmax,而是將問題轉化為二元分類。
- 正樣本:真實的 (context, target) 詞對
- 負樣本:隨機採樣的 k 個「假」詞對(上下文仍是真實的,但目標詞隨機選取)
CBOW 模型學會區分真實詞對和隨機詞對。負採樣大幅降低每步計算複雜度從 O(|V|) 到 O(k)(k 通常 5–20),使大規模訓練成為可能。
分層 Softmax(Hierarchical Softmax)
另一個優化方式是用霍夫曼樹而非負採樣。詞表被組織成一棵二叉樹,每個詞對應樹上的一條路徑。預測詞的機率分解為沿路徑的多個二元分類機率乘積。這樣計算複雜度變為 O(log |V|),但實務中負採樣通常更快。
上下文窗口與動態窗口
CBOW 的標準做法是固定窗口大小(如左右各 5 詞)。但詞距對語義的重要性不同:相鄰詞(如「快速奔跑」)比距離遠的詞提供更多語義信息。改進做法是「動態窗口」:隨機選擇窗口大小(如 1–5),使模型對各距離的詞都有適應。這能輕微提升性能。
CBOW vs. Skip-gram:何時選擇 CBOW?
CBOW 的主要優勢:
- 訓練速度快(同樣迭代次數,CBOW 比 Skip-gram 快 2–3 倍),因為每個訓練樣本只涉及一個目標詞。
- 在高頻詞上性能好,因為高頻詞有更多訓練樣本。
- 所需記憶體少。
Skip-gram 的優勢:
- 在低頻詞和詞類比任務上表現更好,因為每個詞被用作目標詞多次,獲得更多梯度信號。
- 對詞義的捕捉更精細。
選擇啟發式:若語料非常大(數十億詞以上)且時間緊張,先嚐試 CBOW;若精度要求高或語料相對小,優先 Skip-gram。
CBOW 的語義性質
CBOW 學到的詞向量同樣具有類比能力。經驗表明,CBOW 向量空間也滿足「king - man + woman ≈ queen」式的向量運算,儘管性能略遜 Skip-gram。這說明詞向量的語義結構不僅來自選擇目標詞的方向(Skip-gram),也來自預測目標詞的方向(CBOW)。
與現代 NLP 的關聯
CBOW 的核心思想(使用上下文預測詞)在 BERT、RoBERTa 等現代模型中得到延續和深化。BERT 的遮罩語言建模(Masked Language Modeling, MLM)可視為 CBOW 的高級版本:遮罩句子中的某些詞,利用完整的上下文(不只相鄰詞,而是整句)預測被遮罩詞。BERT 使用 Transformer 替代簡單的平均池化,擁有更強大的上下文編碼能力,但底層思想與 CBOW 一脈相承。