Word2Vec 之 Skip-Gram 词向量解释
1 课程概览
本课讲解 Word2Vec 的第二种训练模式——Skip-Gram(跳字/跳词模式),其核心思想是"基于中间预测两端"。通过矩阵运算详细推导 Skip-Gram 的预测过程、损失计算和反向传播,最终使用隐藏层权重矩阵作为词向量。
2 核心概念与定义
- Skip-Gram(跳字/跳词模式):Word2Vec 的训练模式之一,基于当前词(中间)预测上下文词(两端)。
- 损失函数(Loss Function):衡量预测值与真实值之间差异的函数,Skip-Gram 有两个预测值(前一词和后一词),对应两个损失。
3 模型与算法详解
Skip-Gram 核心思想
基于中间预测两端。
已知当前词,预测其前一个词和后一个词。
Skip-Gram 处理流程
- 输入层:当前词的 one-hot 向量(如 "look" → [0, 1, 0, 0])
- 隐藏层:与权重矩阵 $W_1$(3×5)相乘,得到隐藏层输出(3×1)
- 输出层:与两个权重矩阵 $W_2$(5×3)相乘,得到两个预测值:
- 上方预测值:当前词的前一个词
- 下方预测值:当前词的后一个词
- 损失计算:两个预测值与真实值计算损失
- 反向传播:更新参数矩阵
- 词向量提取:使用隐藏层权重矩阵 $W_1$ 作为最终词向量
CBOW vs Skip-Gram 流程对比
| 步骤 | CBOW | Skip-Gram |
|---|---|---|
| 输入 | 上下文词(两端) | 当前词(中间) |
| 预测 | 当前词(中间) | 上下文词(两端) |
| 预测值数量 | 1 个 | 2 个(前一词 + 后一词) |
| 损失值数量 | 1 个 | 2 个 |
损失计算方式
Skip-Gram 有两个损失值,有两种处理思路:
- 求和:$\text{Loss} = \text{Loss}_1 + \text{Loss}_2$
- 求平均:$\text{Loss} = \frac{\text{Loss}_1 + \text{Loss}_2}{2}$
反向传播过程
- 有损失后,先更新输出层参数矩阵 $W_2$
- 再反向传播更新隐藏层参数矩阵 $W_1$
- 最终使用 $W_1$(隐藏层权重矩阵)作为词向量
4 数学原理与推导
Skip-Gram 矩阵运算推导
步骤 1:输入层 → 隐藏层
当前词的 one-hot 向量 $x$($1 \times 3$)与隐藏层权重矩阵 $W_1$($3 \times 5$)相乘:
$$h = x \cdot W_1 \quad (1 \times 5)$$
步骤 2:隐藏层 → 输出层(两个预测)
隐藏层输出 $h$($1 \times 5$)与两个输出权重矩阵 $W_{2a}$、$W_{2b}$($5 \times 3$)相乘:
$$\hat{y}{\text{prev}} = h \cdot W{2a} \quad (1 \times 3) \quad \text{(预测前一词)}$$
$$\hat{y}{\text{next}} = h \cdot W{2b} \quad (1 \times 3) \quad \text{(预测后一词)}$$
步骤 3:损失计算
$$\text{Loss} = \text{Loss}(\hat{y}{\text{prev}}, y{\text{prev}}) + \text{Loss}(\hat{y}{\text{next}}, y{\text{next}})$$
步骤 4:反向传播更新参数
$$W_1 \leftarrow W_1 - \alpha \frac{\partial \text{Loss}}{\partial W_1}$$
$$W_2 \leftarrow W_2 - \alpha \frac{\partial \text{Loss}}{\partial W_2}$$
步骤 5:词向量提取
$$\text{WordVector}(w_i) = W_1[i, :]$$
示例推导
以 "I look set" 为例,预测 "look" 的前后词:
输入:look → one-hot [0, 1, 0]
W1 (3×5): 隐藏层权重矩阵
h = [0, 1, 0] · W1 = W1[1, :] (取第2行)
W2a (5×3): 预测前一词 → "I"
W2b (5×3): 预测后一词 → "set"
5 代码示例
本课为原理介绍,具体代码实现使用 FastText 工具包(后续课程演示)。
6 重难点与易错提醒
- ❗重点:Skip-Gram 基于中间预测两端,有两个预测值(前一词 + 后一词),对应两个损失。
- ⚠️易错:Skip-Gram 的输入是当前词(中间),不是上下文词;CBOW 的输入是上下文词(两端)。
- 💡深入理解:两个损失可以求和或求平均,底层实现不影响最终结果。
- 💡深入理解:最终词向量仍使用隐藏层权重矩阵 $W_1$,与 CBOW 一致。
- ❗重点:编程只有第一次是难的,学会 CBOW 后 Skip-Gram 原理相同,只是预测方向相反。
7 课堂问答精选
Q1:Skip-Gram 和 CBOW 的核心区别是什么?
A:CBOW 基于两端(上下文)预测中间(当前词),输入是多个上下文词;Skip-Gram 基于中间(当前词)预测两端(上下文),输入是当前词,输出两个预测值(前一词和后一词)。
Q2:Skip-Gram 有几个损失值?如何处理?
A:Skip-Gram 有两个损失值(前一词预测损失 + 后一词预测损失)。处理方式有两种:①求和 $\text{Loss} = \text{Loss}_1 + \text{Loss}_2$;②求平均 $\text{Loss} = (\text{Loss}_1 + \text{Loss}_2) / 2$。
Q3:Skip-Gram 最终的词向量从哪里提取?
A:从隐藏层权重矩阵 $W_1$ 中提取,与 CBOW 一致。矩阵的每一行对应一个词的词向量。
8 本课小结
- Skip-Gram:基于中间预测两端,输入当前词,预测前一词和后一词。
- 矩阵运算:输入层 → 隐藏层($W_1$)→ 输出层($W_{2a}$ + $W_{2b}$)。
- 两个损失值可求和或求平均。
- 反向传播:先更新 $W_2$,再更新 $W_1$。
- 最终词向量:隐藏层权重矩阵 $W_1$ 的每一行。
9 延伸思考
- Skip-Gram 相比 CBOW 有什么优势?适用于什么场景?
- 训练数据量对 Skip-Gram 和 CBOW 的影响有何不同?