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 juiceapple juice
为了让模型都能预测对 juice, 最自然的做法之一就是让:
orangeapplegrapepear
这些词拥有相似的嵌入向量。
因为这样网络更容易共享统计规律。
课程还讲了别的上下文设计
如果你的目标只是学词嵌入,而不是一定要做语言模型, 上下文不一定非得是“前 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 进行授权