原论文: http://jmlr.org/papers/volume3/bengio03a/bengio03a.pdf
其他资料:https://blog.csdn.net/sxhlovehmm/article/details/41252125

NNLM(Neural Probabilistic Language Model),使用神经网络来对语言模型进行建模。
语言模型的公式如下:
P^(w1T)=t=1TP^(wtw1t1)\hat P (w_1^T) = \prod^T_{t=1} \hat P (w_t | \pmb w_1^{t-1})
其中wtw_t是第tt个词,wij=(wi,wi+1,...,wj)\pmb w_i^j = (w_i, w_{i+1}, ..., w_{j})
也就是用前几个词去预测后一个词。一般,上面的模型用起来太困难,所以使用n元语言模型
P^(w1Tw1t1)P^(wtwtn+1t1)\hat P (w_1^T | \pmb w_1^{t-1}) \approx \hat P (w_t | \pmb w_{t-n+1}^{t-1})
也就是认为,当前词出现的概率仅与前n1n-1个词有关。

NNLM的结构:

NNLM学习笔记

前向传播:
x=(C(wt1),C(wt2),C(wt3),...,C(wtn+1))\pmb x = (C(w_{t-1}), C(w_{t-2}), C(w_{t-3}), ..., C(w_{t-n+1}))
y=b+Wx+Utanh(d+Hx)\pmb y = \pmb b + \pmb{W} \pmb{x} + \pmb{U} tanh(\pmb{d}+\pmb{H}\pmb{x})
P^=softmax(y)\hat{P} = softmax(\pmb{y})
基于SGD的训练方法:
θθ+ϵlogP^θ\theta \leftarrow \theta + \epsilon\frac{\partial log \hat{P}}{\partial \theta}
其中,θ=(b,d,W,U,H,C)\theta = (\pmb b, \pmb d, \pmb W, \pmb U, \pmb H, C)

重点:

两个基本步骤:

  1. CC:一个将单词表VV中的某元素ii转换为向量C(i)RmC(i) \in \mathbb{R}^m的映射。它就是现在被称为的词向量词嵌入。形式上讲,它是一个V×m|V|\times m的参数矩阵。上式中,x\pmb x就是输入序列中的词的词向量构成的向量,或者说,它是一个V×m|V|\times m矩阵。
  2. g(.):一个将输入单词的词向量转换为概率的映射。在上式中,g(x)=softmax(y(x))g(\pmb{x}) = softmax(\pmb{y}(\pmb{x}))。此外,g(.)g(.)也可以是FFN、RNN等可学习的模型。
补充:

训练目标:最大化如下的损失函数:
L=1Ttlogf(wt,wt1,...,wtn+1;θ)+R(θ)L = \frac{1}{T} \sum_t log f(w_t, w_{t-1}, ... , w_{t-n+1}; \theta) + R(\theta)
其中,R(θ)R(\theta)是正则项,原论文使用的是weight decay,但未用于bias上。ffP^\hat P

其他内容,如训练算法针对CPU的并行化方案等,参见原论文。

相关文章: