One - One Code All

Blog Content

神经网络语言模型(NNLM)

自然语言处理   2014-02-07 23:02:33

神经网络语言模型,是个比较大的话题,先占个坑。


1. 模型原理

用神经网络来训练语言模型的思想最早由百度 IDL (深度学习研究院)的徐伟提出[1],NNLM(Nerual Network Language Model)是这方面的一个经典模型,具体内容可参考 Bengio 2003年发表在JMLR上的论文[2]

模型训练数据是一组词序列w1…wT,wt∈V。其中 V 是所有单词的集合(即词典),Vi表示字典中的第 i 个单词。NNLM的目标是训练如下模型:

    f(wt,wt−1,...,wt−n+2,wt−n+1)=p(wt|w1t−1)

其中wt表示词序列中第 t 个单词,w1t−1表示从第1个词到第t个词组成的子序列。模型需要满足的约束条件是:

    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

其中 y=b+Wx+Utanh(d+Hx),模型的参数 θ=(b,d,W,U,H,C)。x=(C(wt−n+1),...,C(wt−1)) 是神经网络的输入。W∈R|V|×(n−1)m是可选参数,如果输入层与输出层没有直接相连(如图中绿色虚线所示),则可令W=0。H∈Rh×(n−1)m是输入层到隐含层的权重矩阵,其中h表示隐含层神经元的数目。U∈R|V|×h是隐含层到输出层的权重矩阵。d∈Rh 和 b∈R|V|分别是隐含层和输出层的偏置参数。

需要注意的是:一般的神经网络模型不需要对输入进行训练,而该模型中的输入x=(C(wt−n+1),...,C(wt−1))是词向量,也是需要训练的参数。由此可见模型的权重参数与词向量是同时进行训练,模型训练完成后同时得到网络的权重参数和词向量。

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)∂θ,其中 ϵ为步长。


上一篇:sklearn加载自主数据
下一篇:Gensim Word2vec 使用指南

The minute you think of giving up, think of the reason why you held on so long.