1. 引言
CBOW(Continuous Bag of Words)是 Word2Vec 中最经典的模型之一,其核心思想是利用上下文词预测中心词。在学习和实现 CBOW 的过程中,"输入层向量的形式"是一个极易产生概念混淆的问题,尤其体现在以下几个表述之间:
- 输入是 one-hot 向量
- 输入是 embedding 向量
- 输入是词 ID
这些说法各自成立,但处于不同抽象层级 。本文将从理论模型 → 数学形式 → 工程实现的演进顺序,系统梳理 CBOW 输入层向量的真实含义。
2. CBOW 模型的基本设定
设定如下符号:
- 词表大小:(V)(V)(V)
- embedding 维度:(D)(D)(D)
- 词表:(V=w1,w2,...,wV)(\mathcal{V} = {w_1, w_2, \dots, w_V})(V=w1,w2,...,wV)
- 上下文窗口大小:(C)(C)(C)
CBOW 的训练目标可以形式化为:
p(wt∣wt−C,...,wt−1,wt+1,...,wt+C) p(w_t \mid w_{t-C}, \dots, w_{t-1}, w_{t+1}, \dots, w_{t+C}) p(wt∣wt−C,...,wt−1,wt+1,...,wt+C)
即:
用上下文词集合预测中心词 (wt)(w_t)(wt)。
3. 理论视角:CBOW 输入层的向量形式
3.1 one-hot 向量作为理论输入表示
在理论建模和数学推导中 ,CBOW 输入层的每一个上下文词 (wi)(w_i)(wi) 都被表示为一个 one-hot 向量:
xi∈RV \mathbf{x}_i \in \mathbb{R}^{V} xi∈RV
其定义为:
- 第 (i)(i)(i) 个分量为 1
- 其余分量为 0
one-hot 向量的理论意义
- 唯一标识一个词
- 不携带任何语义或统计信息
- 便于用统一的线性代数形式描述模型
📌 在理论上,CBOW 的输入层确实是 one-hot 向量。
3.2 one-hot 向量与输入权重矩阵
CBOW 在输入层到隐层之间引入一个权重矩阵:
W∈RV×D W \in \mathbb{R}^{V \times D} W∈RV×D
该矩阵即 embedding 矩阵。
对于任意上下文词 (wi)(w_i)(wi),其隐层向量为:
vi=xi⊤W \mathbf{v}_i = \mathbf{x}_i^\top W vi=xi⊤W
由于 (xi)(\mathbf{x}_i)(xi) 是 one-hot 向量,上式等价于:
v∗i=W∗i \mathbf{v}*i = W*{i} v∗i=W∗i
即:
从 embedding 矩阵中取出第 (i)(i)(i) 行作为该词的向量表示
这一步是理解 CBOW 输入层的关键。
3.3 上下文输入的聚合形式
对于 (C)(C)(C) 个上下文词,CBOW 将它们的 embedding 向量进行聚合(通常为平均):
h=1C∑j=1Cxcj⊤W \mathbf{h} = \frac{1}{C} \sum_{j=1}^{C} \mathbf{x}_{c_j}^\top W h=C1j=1∑Cxcj⊤W
可以看到:
- one-hot 向量只在"索引 embedding"时出现
- 真正参与计算的是 embedding 向量
4. 工程视角:CBOW 输入层的向量形式
4.1 工程中是否真的使用 one-hot?
答案是:不会。
原因包括:
- one-hot 向量维度高((V)(V)(V) 级别)
- 极度稀疏,计算和存储效率低
- 与 embedding 查表在数学上完全等价
因此,在工程实践中,one-hot 被彻底"抽象掉"。
4.2 工程中的真实输入形式:词 ID
在实际工程中,CBOW 输入层接收的是:
context_ids=[i1,i2,...,iC] \text{context\_ids} = [i_1, i_2, \dots, i_C] context_ids=[i1,i2,...,iC]
其中:
- (ik∈1,2,...,V)(i_k \in {1, 2, \dots, V})(ik∈1,2,...,V)
- 每个整数是词在词表中的索引
📌 词 ID 是 one-hot 向量的工程等价形式。
4.3 Embedding 层的工程实现
以 PyTorch 为例:
python
embedding = nn.Embedding(vocab_size, embedding_dim)
context_vecs = embedding(context_ids)
其本质是:
- 内部维护一个可训练矩阵 (E∈RV×D)(E \in \mathbb{R}^{V \times D})(E∈RV×D)
- 根据词 ID 直接取行
数学等价于:
xi⊤W \mathbf{x}_{i}^\top W xi⊤W
但不显式构造 (xi)(\mathbf{x}_i)(xi)。
4.4 工程中的输入层"向量"到底指什么?
在工程语境下,"CBOW 输入层向量"通常有两种含义:
-
狭义:
- 指输入到模型中的数据
- 形式为:词 ID(整数)
-
广义:
- 指 embedding 层输出的向量
- 形式为:(D) 维稠密实数向量
这两种说法都成立,但抽象层级不同。
5. 理论与工程的统一理解
5.1 三种表示形式的对应关系
| 抽象层级 | 表示形式 | 维度 | 是否显式存在 |
|---|---|---|---|
| 理论建模 | one-hot 向量 | (V)(V)(V) | 是 |
| 工程输入 | 词 ID | 1 | 是 |
| 实际计算 | embedding 向量 | (D)(D)(D) | 是 |
5.2 等价关系总结
词 ID;⟺;one-hot 索引;⟺;embedding 查表 \text{词 ID} ;\Longleftrightarrow; \text{one-hot 索引} ;\Longleftrightarrow; \text{embedding 查表} 词 ID;⟺;one-hot 索引;⟺;embedding 查表
它们描述的是同一件事情的不同视角。
6. 常见误区澄清
-
❌ CBOW 输入的是 embedding
✔ 更准确:embedding 是输入层到隐层的输出
-
❌ one-hot 向量参与了大量计算
✔ one-hot 仅用于理论建模和索引解释
-
❌ 工程实现偏离了理论模型
✔ 工程实现是理论模型的高效等价实现
7. 总结
在 CBOW 模型中:
- 理论层面:输入层使用 one-hot 向量,便于数学建模与推导
- 工程层面:输入层使用词 ID,通过 Embedding 层完成查表
- 计算层面:真正参与上下文建模的是低维、稠密、可训练的 embedding 向量
理解 CBOW 输入层向量形式的关键,不在于"哪种说法对",而在于明确所处的抽象层级。