文章

06 Word2Vec

06 Word2Vec

这一节在讲什么

  这一节讲 Word2Vec,重点是其中的 Skip-Gram 思想。

  它比上一节的完整神经语言模型更简单,也更高效。

Skip-Gram 的核心想法

  不是“给很多上下文词,预测中间词”,
而是反过来:

给一个中心词,去预测它附近可能出现的词。

  例如句子:

\[\text{I want a glass of orange juice to go along with my cereal.}\]

  如果选 orange 作为上下文中心词,那么在它附近窗口内,
可能抽到这些目标词:

  • juice
  • glass
  • my

  这些都能拿来组成训练样本。

它到底在学什么监督任务

  给定上下文词 $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 常和 juiceglassfruit 等词出现在附近
  • apple 也常和类似的词共现

  那模型为了提高预测效果,往往会把 orangeapple 学成相似向量。

这个方法的主要问题

  最大问题是 softmax 太贵。

  因为每算一次:

\[P(t \mid c)\]

  都要在分母里对整个词表求和:

\[\sum_{j=1}^{V} \exp(\theta_j^T e_c)\]

  如果词表很大,比如 10 万、100 万,训练就很慢。

课程提到的两个加速方向

1. Hierarchical Softmax

  把“大词表分类”变成树上的一串二分类,
计算复杂度更像:

\[O(\log V)\]

  而不是:

\[O(V)\]

2. Negative Sampling

  下一节重点讲,它更常用,也更容易理解。

Word2Vec 里还有 CBOW

  课程也顺带提到另一个版本:CBOW(Continuous Bag of Words)。

  区别是:

  • Skip-Gram:中心词预测周围词
  • CBOW:周围词预测中心词

  经验上:

  • CBOW 在小数据上也不错
  • Skip-Gram 在大语料上常更强

训练样本怎么采才合理

  课程还提到一点很重要:

  如果你直接按语料频率采上下文词,
theofa 这种高频词会占据太多训练资源。

  所以真实 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 仍然昂贵,因此需要进一步的近似方法来提速。

本文由作者按照 CC BY 4.0 进行授权