原论文: http://jmlr.org/papers/volume3/bengio03a/bengio03a.pdf
其他资料:https://blog.csdn.net/sxhlovehmm/article/details/41252125
NNLM(Neural Probabilistic Language Model),使用神经网络来对语言模型进行建模。
语言模型的公式如下:
P^(w1T)=t=1∏TP^(wt∣www1t−1)
其中wt是第t个词,wwwij=(wi,wi+1,...,wj)。
也就是用前几个词去预测后一个词。一般,上面的模型用起来太困难,所以使用n元语言模型:
P^(w1T∣www1t−1)≈P^(wt∣wwwt−n+1t−1)
也就是认为,当前词出现的概率仅与前n−1个词有关。
NNLM的结构:

前向传播:
xxx=(C(wt−1),C(wt−2),C(wt−3),...,C(wt−n+1))
yyy=bbb+WWWxxx+UUUtanh(ddd+HHHxxx)
P^=softmax(yyy)
基于SGD的训练方法:
θ←θ+ϵ∂θ∂logP^
其中,θ=(bbb,ddd,WWW,UUU,HHH,C)
重点:
两个基本步骤:
-
C:一个将单词表V中的某元素i转换为向量C(i)∈Rm的映射。它就是现在被称为的词向量或词嵌入。形式上讲,它是一个∣V∣×m的参数矩阵。上式中,xxx就是输入序列中的词的词向量构成的向量,或者说,它是一个∣V∣×m矩阵。
- g(.):一个将输入单词的词向量转换为概率的映射。在上式中,g(xxx)=softmax(yyy(xxx))。此外,g(.)也可以是FFN、RNN等可学习的模型。
补充:
训练目标:最大化如下的损失函数:
L=T1t∑logf(wt,wt−1,...,wt−n+1;θ)+R(θ)
其中,R(θ)是正则项,原论文使用的是weight decay,但未用于bias上。f 即 P^
其他内容,如训练算法、针对CPU的并行化方案等,参见原论文。