这篇文章是我的笔记分享,内容主要来自吴恩达老师的深度学习课程。^[AI中国官网-全球领先的线上AI教育、实践平台 (deeplearningai.net)]
前面我们讲了word embedding。但是如何才能学习得到呢?
实践证明,建立语言模型是学习word embedding的好方法^[Neural Probabilistic Language Models | SpringerLink]。
下面我们就建立语言模型来尝试一下如何进行句子预测填充。
$$
I \quad want \quad a\quad glass\quad of\quad orange\quad \underline{\quad\quad\quad\quad\quad}. \\quad \
4343 \quad 9665 \quad 1 \quad 3852 \quad 6163 \quad 5257\quad\quad\quad\quad\quad\quad\quad\quad
$$
进行句子预测。我们现在把已经有的这个句子每个单词都标上了序号。
$$
\begin{array}{llllll}
\text { I } & o{4343} & \longrightarrow & E & \longrightarrow & e{4343} \
\text { want } & o{9665} & \longrightarrow & E &\longrightarrow & e{9665} \
\text { a } & o{1} & \longrightarrow & E& \longrightarrow & e{1} \
\text { glass } & o{3852} & \longrightarrow & E& \longrightarrow & e{3852} \
\text { of } & o{6163} & \longrightarrow & E& \longrightarrow & e{6163}\
\text { orange } & o{6257} & \longrightarrow & E & \longrightarrow & e{6257}\
\end{array}
$$
我们由one-hot向量$o$学习得到word embedding矩阵$E$,再通过word embedding矩阵和one-hot向量相乘。得到对应单词的word embedding向量$e$。
我们将得到的embedding向量放入到神经网络语言模型当中。再经过一个softmax层。然后这个softmax层会在你的单词表中找到一个最为可信的答案作为输出。
现在分析一下其中的维度。
- $[o]_{10000\times 1}$
- $[E]_{300\times 10000}$
- $[e]_{300\times 1}$
-
$[h]_{6*300 \times 1}$
h是经过神经网络拼接处理的,就是要预测句子的第七个单词,把句子的前六个单词拼接起来放入神经网络进行处理。
就是在实际操作的过程中,由于质子的程度不同,所以并不是每次把前面的所有内容都拼接起来。而是选择一个大小窗口来进行滑动预测。
比如设置只考虑前面4个单词。那么到了神经网络计算的这一步,H就会变为长度1200。而不是1800。
就这样使用神经网络对其进行训练。在算法的激励下,你的网络会不断进行数据调整。最终Orange、Apple、Durian、Strawberry、Watermelon短单词都会学到相近的特征值。
这就是学习获得word embedding矩阵$E$的方法之一。
这说明这个例子中我们使用的窗口是选取前4个单词。也有其他选取上下文的方式,比如空缺周围的几个单词、空缺之后的几个单词。
适应的是一种skip-gram的模型思想,之后我们会再做详细介绍。