文章

05 学习词嵌入(Learning Word Embeddings)

05 学习词嵌入(Learning Word Embeddings)

这一节在讲什么

  这一节开始讲:

词嵌入到底怎么学出来?

  课程先从一个“预测下一个词”的神经语言模型讲起,因为这个思路最容易理解。

基本想法:用语言模型逼出好词向量

  例子:

\[\text{I want a glass of orange \_\_\_}\]

  希望模型预测出最后的词:

\[\text{juice}\]

  如果要把这个任务做好,模型就会被迫学会:

  • orange 和哪些词常一起出现
  • 哪些词在语义上相近
  • 哪些上下文模式意味着哪类词

  而这些信息会沉淀到词向量里。

模型怎么搭

第一步:把上下文词变成嵌入向量

  对每个上下文词的 one-hot 向量 $O_j$,取出其嵌入:

\[e_j = EO_j\]

第二步:把多个词向量拼起来

  如果历史窗口长度是 4,那么输入就是 4 个词向量拼接:

\[[e_{w_1}; e_{w_2}; e_{w_3}; e_{w_4}]\]

  如果每个词向量是 300 维,那么总输入维度就是:

\[4 \times 300 = 1200\]

第三步:送入神经网络和 softmax

  模型输出对整个词表中所有词的概率分布,预测下一个词是什么。

为什么固定窗口很常见

  课程里提到,常见做法是固定看前 4 个词。

  原因是这样输入维度固定,句子再长也好处理。

  也就是说模型学的是:

\[P(w_t \mid w_{t-4}, w_{t-3}, w_{t-2}, w_{t-1})\]

为什么这个过程会学出“相似词相似向量”

  还是回到例子:

  • orange juice
  • apple juice

  为了让模型都能预测对 juice, 最自然的做法之一就是让:

  • orange
  • apple
  • grape
  • pear

  这些词拥有相似的嵌入向量。

  因为这样网络更容易共享统计规律。

课程还讲了别的上下文设计

  如果你的目标只是学词嵌入,而不是一定要做语言模型, 上下文不一定非得是“前 4 个词”。

  也可以是:

  • 左右各若干词
  • 只看前一个词
  • 只看附近某个随机词

  这些不同设计后来都启发了更简单的词向量学习方法。

这一节的核心认识

  词嵌入不是靠人为手工定义出来的, 而是作为神经网络中的参数,在解决预测任务时顺便学出来的。

  也就是说:

词嵌入是中间表示,不是终极目标。

这一节最该记住的公式

嵌入查表

\[e_j = EO_j\]

固定窗口语言模型示意

\[P(w_t \mid w_{t-4}, w_{t-3}, w_{t-2}, w_{t-1})\]

这一节最该记住的要点

要点 1:训练“预测词”的任务可以顺带学出词嵌入

  这是最核心的思想。

要点 2:嵌入是模型参数的一部分

  它通过反向传播一起更新。

要点 3:固定窗口让输入维度固定,训练更方便

  这是早期神经语言模型常见设计。

要点 4:如果目标只是学词向量,上下文设计可以更自由

  这为后面的 Word2Vec 做了铺垫。

这一节一句话总结

  学习词嵌入的一种经典方法,就是把它放进“根据上下文预测目标词”的神经网络里一起训练;只要这个预测任务设计得合理,模型就会自己把相似词拉到相近的向量位置。

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