\parinterval$ w_{i-3}$、 $ w_{i-2}$ 、$ w_{i-1}$为该语言模型的输入(绿色方框),输入为每个词的One-hot向量表示(维度大小与词表大小一致),每个One-hot向量仅一维为1,其余为0,比如:$(0,0,1,\dots,0)$ 表示词表中第三个单词。之后把One-hot向量乘以一个矩阵$\mathbf C $得到单词的分布式表示(紫色方框)。令$ w_i $为第$ i $个词的One-hot表示,$\mathbf e_i $为第$ i $个词的分布式表示,有:
\begin{eqnarray}
\mathbf e_i&=&w_i\mathbf C
\label{eq:5-60}
\end{eqnarray}
\noindent 这里的$\mathbf C $可以被理解为一个查询表,根据$ w_i $中为1的那一维,在$\mathbf C $中索引到相应的行进行输出(结果是一个行向量)。随后,把得到的$\mathbf e_0$、$\mathbf e_1$、$\mathbf e_2$三个向量级联在一起,经过两层网络,最后通过Softmax函数(橙色方框)得到输出:
\noindent 这里的$\mathbf C $可以被理解为一个查询表,根据$ w_i $中为1的那一维,在$\mathbf C $中索引到相应的行进行输出(结果是一个行向量)。通常,把$\mathbf e_i$这种单词的实数向量表示称为{\small\bfnew{词嵌入}}\index{词嵌入}(Word Embedding\index{Word Embedding}),把$\mathbf C $称为词嵌入矩阵。
\parinterval 输出$\mathbf y $是词表上的一个分布,通过单词$ w_i $可以索引到对应概率${\rm P}(w_i|w_{i-1},w_{i-2},\\w_{i-3})$。$\mathbf U $、$\mathbf H $和$\mathbf d $是模型的参数。从结构上看,FNNLM主要有三层:1)词的分布式表示层,即把输入的离散的单词变为分布式表示对应的实数向量;2)隐藏层,即将得到的词的分布式表示进行线性和非线性变换;3)输出层,根据隐藏层的输出预测单词的概率分布。这三层堆叠在一起构成了整个网络,而且也可以加入从词的分布式表示直接到输出层的连接(红色虚线箭头)。
\noindent 这里,输出$\mathbf y $是词表$V$上的一个分布,来表示${\rm P}(w_i|w_{i-1},w_{i-2},w_{i-3})$。$\mathbf U $、$\mathbf H $和$\mathbf d $是模型的参数。这样,对于给定的$w_i$可以用$\mathbf y(i)$得到其概率,其中$\mathbf y(i)$表示向量$\mathbf y$的第$i$维。