06 Word2Vec
这一节在讲什么
这一节讲 Word2Vec,重点是其中的 Skip-Gram 思想。
它比上一节的完整神经语言模型更简单,也更高效。
Skip-Gram 的核心想法
不是“给很多上下文词,预测中间词”,
而是反过来:
给一个中心词,去预测它附近可能出现的词。
例如句子:
\[\text{I want a glass of orange juice to go along with my cereal.}\] 如果选 orange 作为上下文中心词,那么在它附近窗口内,
可能抽到这些目标词:
juiceglassmy
这些都能拿来组成训练样本。
它到底在学什么监督任务
给定上下文词 $c$,预测目标词 $t$。
比如:
- 上下文词:
orange - 目标词:
juice
模型学习:
\[P(t \mid c)\]模型公式
先把上下文词 one-hot 向量 $O_c$ 映射为嵌入向量:
\[e_c = EO_c\]然后用 softmax 计算目标词概率:
\[P(t \mid c) = \frac{\exp(\theta_t^T e_c)}{\sum_{j=1}^{V} \exp(\theta_j^T e_c)}\]其中:
- $e_c$ 是上下文词嵌入
- $\theta_t$ 是目标词对应的 softmax 参数
- $V$ 是词表大小
损失函数
课程里仍然用标准 softmax 交叉熵:
\[L(\hat y, y) = -\sum_{i=1}^{V} y_i \log \hat y_i\]其中:
- $y$ 是目标词 one-hot 标签
- $\hat y$ 是预测分布
为什么这个方法会学出好词向量
因为如果:
orange常和juice、glass、fruit等词出现在附近apple也常和类似的词共现
那模型为了提高预测效果,往往会把 orange 和 apple 学成相似向量。
这个方法的主要问题
最大问题是 softmax 太贵。
因为每算一次:
\[P(t \mid c)\]都要在分母里对整个词表求和:
\[\sum_{j=1}^{V} \exp(\theta_j^T e_c)\]如果词表很大,比如 10 万、100 万,训练就很慢。
课程提到的两个加速方向
1. Hierarchical Softmax
把“大词表分类”变成树上的一串二分类,
计算复杂度更像:
而不是:
\[O(V)\]2. Negative Sampling
下一节重点讲,它更常用,也更容易理解。
Word2Vec 里还有 CBOW
课程也顺带提到另一个版本:CBOW(Continuous Bag of Words)。
区别是:
Skip-Gram:中心词预测周围词CBOW:周围词预测中心词
经验上:
- CBOW 在小数据上也不错
- Skip-Gram 在大语料上常更强
训练样本怎么采才合理
课程还提到一点很重要:
如果你直接按语料频率采上下文词,
像 the、of、a 这种高频词会占据太多训练资源。
所以真实 Word2Vec 不会简单均匀采样,而会调采样分布,避免太多精力浪费在停用词上。
这一节最该记住的公式
上下文词嵌入
\[e_c = EO_c\]Skip-Gram softmax
\[P(t \mid c) = \frac{\exp(\theta_t^T e_c)}{\sum_{j=1}^{V} \exp(\theta_j^T e_c)}\]softmax 损失
\[L(\hat y, y) = -\sum_{i=1}^{V} y_i \log \hat y_i\]这一节最该记住的要点
要点 1:Skip-Gram 是“中心词预测邻近词”
这是 Word2Vec 最核心的直觉。
要点 2:它比完整神经语言模型更简单
所以训练更高效。
要点 3:softmax 分母对整个词表求和,是它的瓶颈
这直接引出了下一节的负采样。
要点 4:Word2Vec 不止一个版本
Skip-Gram 和 CBOW 都很经典。
这一节一句话总结
Word2Vec 的 Skip-Gram 把“给一个词预测周围词”作为训练目标,用更简单的结构学习词向量,但它的 softmax 仍然昂贵,因此需要进一步的近似方法来提速。