---
title: "連續詞袋模型（Continuous Bag of Words）"
slug: continuous-bag-of-words
language: zh-TW
source: https://aiterms.tw/learning/what-is-continuous-bag-of-words
updated_at: 2026-07-30
tags: [自然語言處理, 詞向量, Word2Vec, 神經網路, 語言模型]
ipas_term: false
type: deep-dive
---

# 連續詞袋模型 是什麼？

> Word2Vec 中根據上下文詞預測目標詞的神經網路架構，是 CBOW 的完整名稱。

連續詞袋模型（CBOW, Continuous Bag of Words）是 Tomas Mikolov 等人於 2013 年在 Word2Vec 論文中提出的兩種主要架構之一。與其對偶的 Skip-gram 相反，CBOW 的方向是根據前後上下文預測中心詞，這在直覺上更符合自然語言的閱讀方式。

## 核心架構與訓練過程
CBOW 的神經網路架構異常簡單，只有三層：

1. **輸入層**：包含上下文詞（通常是目標詞前後各 c 個詞，窗口大小 2c+1）的獨熱編碼向量，維度均為 |V|（詞表大小）。

2. **隱層**：單層隱層，寬度為 d（嵌入維度，如 100、300）。輸入層到隱層的權重矩陣 W（|V| × d）就是我們要學習的詞向量。所有上下文詞的獨熱向量與 W 相乘後取平均，得到隱層激活值。

3. **輸出層**：將隱層激活投影回詞表大小 |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 一脈相承。

## 常見問題

### CBOW 為什麼對上下文詞取平均而不是連接？

如果連接所有上下文詞向量（如左 5 個 + 右 5 個 = 10 個詞向量連接），隱層寬度會擴展到 10 × d，其中 d 是每個詞向量的維度。若 d=300，隱層就變成 3000 維，參數量爆炸。取平均（只有 d 維）的設計保持隱層寬度恆定，大幅減少參數量和計算成本，是 CBOW 高效的關鍵。這個設計也有語義上的合理性：上下文中各詞對目標詞的貢獻可視為「民主化」的平等投票，平均聚合這個想法。

### 負採樣是什麼？為什麼要用它而不是完整的 Softmax？

完整的 Softmax 要求計算目標詞相對於詞表中所有詞的機率，複雜度是 O(|V|)（詞表大小）。若詞表有 100 萬個詞，每次梯度更新都要計算 100 萬個輸出，極為昂貴。負採樣巧妙地把問題轉化為二元分類：模型學會區分真實的 (上下文, 目標詞) 對與隨機組合的假對。每次訓練只涉及 1 個正樣本 + k 個負樣本（k 通常 5–20），複雜度降至 O(k)，訓練速度快數十倍。這是一個優雅的近似：理論上負採樣略低於精確 Softmax，但實務性能幾乎相同，是值得的 trade-off。

### CBOW 的詞向量和 Skip-gram 的詞向量有區別嗎？

有小幅區別，但足以在應用中觀察到。CBOW 訓練的詞向量對高頻詞優化更充分，對低頻詞的表示相對較弱。Skip-gram 因為每個詞都被多次用作預測目標，反覆接收梯度，所以對各頻率詞都有較均勻的優化。在詞類比任務（如「Paris - France」類比）上，Skip-gram 通常準確度 1–3% 更高。然而在文本分類等下游應用中，兩者的實際性能差異往往不超過 1%。選擇上更多考慮計算預算而非精度差異。

---

深度解說頁：https://aiterms.tw/learning/what-is-continuous-bag-of-words
快查頁：https://aiterms.tw/terms/continuous-bag-of-words
最後更新：2026/07/30