1. 模型原理
用神经网络来训练语言模型的思想最早由百度 IDL (深度学习研究院)的徐伟提出[1],NNLM(Nerual Network Language Model)是这方面的一个经典模型,具体内容可参考 Bengio 2003年发表在JMLR上的论文[2]
模型训练数据是一组词序列
-
f(wt,wt−1,...,wt−n+2,wt−n+1)=p(wt|w1t−1)
其中
f(wt,wt−1,...,wt−n+2,wt−n+1)>0 ∑|V|i=1f(i,wt−1,...,wt−n+2,wt−n+1)=1
下图展示了模型的总体架构:
该模型可分为特征映射和计算条件概率分布两部分:
特征映射:通过映射矩阵
C∈R|V|×m 将输入的每个词映射为一个特征向量,C(i)∈Rm 表示词典中第 i 个词对应的特征向量,其中m 表示特征向量的维度。该过程将通过特征映射得到的C(wt−n+1),...,C(wt−1) 合并成一个(n−1)m 维的向量:(C(wt−n+1),...,C(wt−1)) -
计算条件概率分布:通过一个函数
g (g 是前馈或递归神经网络)将输入的词向量序列(C(wt−n+1),...,C(wt−1)) 转化为一个概率分布y∈R|V| ,y 中第 i 位表示词序列中第 t 个词是Vi 的概率,即:-
f(i,wt−1,...,wt−n+2,wt−n+1)=g(i,C(wt−n+1),...,C(wt−1))
-
下面重点介绍神经网络的结构,网络输出层采用的是softmax函数,如下式所示:
-
p(wt|wt−1,...,wt−n+2,wt−n+1)=eywt∑ieyi
其中
需要注意的是:一般的神经网络模型不需要对输入进行训练,而该模型中的输入
2. 训练过程
模型的训练目标是最大化以下似然函数:
-
L=1T∑tlogf(wt,wt−1,...,wt−n+2,wt−n+1;θ)+R(θ) ,其中θ 为模型的所有参数,R(θ) 为正则化项
使用梯度下降算法更新参数的过程如下:
-
θ←θ+ϵ∂logp(wt|wt−1,...,wt−n+2,wt−n+1)∂θ ,其中ϵ 为步长。
3. 参考资料
[1] Can Artificial Neural Networks Learn Language Models?
[2] A Neural Probabilistic Language Model
http://blog.sina.com.cn/s/blog_66a6172c0102v1zb.html