[我们是这样理解语言的-3]神经网络语言模型

[我们是这样理解语言的-3]神经网络语言模型

1 简介

语言模型是自然语言处理领域的基础问题,其在词性标注、句法分析、机器翻译、信息检索等任务中起到了重要作用。简而言之,统计语言模型表示为:在词序列中,给定一个词 wt 和上下文中所有词 wt1 ,这个序列出现的概率,如下式,
P^(wT1)=t=1TP^(wt|wt11)(1)
其中, wt 是序列 wji 中第 t 词, wji=(wi,wi+1,,wj) P^(wt|wt11)  可以使用  P^(wt|wtn+1t1)  近似,这就是n-gram语言模型,详细请阅读[我们是这样理解语言的-2]统计语言模型。随着深度学习的发展,神经网络相关研究越来越深入,神经网络语言模型(Neural Network Language Model,NNLM)越来越受到学术界和工业界的关注,本文将系统介绍下 NNLM 的建模及其应用。

2 神经网络语言模型

NNLM 最早由Bengio系统化提出并进行了深入研究[Bengio, 2000, 2003]。当然分开来看,(1) distributed representation最早由Hinton提出(1985), (2)利用神经网络建模语言模型由Miikkulainen and Dyer,Xu and Rudnicky分别在1991和2000提出。

NNLM 依赖的一个核心概念就是词向量(Word Embedding)。词向量源于Hinton在Learning distributed representations of concepts提出的Distributed Representation,Bengio将其引入到语言模型建模中,提出了NNLM。那么,我们不禁要问,什么是词向量呢?

2.1 词向量

简而言之,词向量是用一个向量来表示一个词,一定程度上可以用来刻画词之间的语义距离。
a、词表中的词 i 表示为一个词向量 C(i),C(i)Rm ,其维度 m 一般取值为 30,50,60,100 等值。

b、词向量为神经网络的一类参数,可以通过训练得到,同时基于词向量可以表示词序列 wt1 的联合分布。

为了得到词向量,我们需要在给定训练数据集情况下,训练得到目标模型 f(wt,.,wtn+1)=P^(wt|wtn+1t) 。而模型需要满足的约束,即对于任意的 wt11,|V|i=1f(wi,wt1,,wtn+1)=1,f>0 ,表示 wt 与上下文 wt1,,wtn+1 所有可能的组合的概率和为1。 如此,我们可以将 f(wt,.,wtn+1) 分解成两部分:
a、词表中任意单词 wi 表示为词向量,由此构建了一个 m×|V| 的矩阵 C
b、词的概率分布可以通过矩阵 C 进行变换得到。函数 g 是组合上下文中词向量 (C(wtn+1),C(wtn),C(wt1)) 构建一个词 wt 的条件概率分布,即函数 g 的输出为一个向量,其第 i 个分量表示当前词 wt 等于词表中第 i 个词 Vi 的条件概率, P^(wt=Vi|wt11) ,函数 f 组合了 C g 得到最终的输出结果。

2.2求解目标

一般而言,神经网络语言模型的优化目标是最大化带正则化项的Log-Likelihood,其中参数集合为 θ =(C,ω),ω 为神经网络的参数。
L=1Ttlogf(wt,wt1,wtn+1;θ)+R(θ)(2)

3 Bengio NIPS’03 Model

3.1 模型结构

Bengio使用前馈神经网络(FFNN,Feed Forward Neural Network)表示 f ,其结构如下:

图 1 Bengio Yoshua提出的神经网络结构

上图中,输出层为Softmax,保证满足概率分布的约束:
P^(wt|wt1,,wtn+1)=eywtieywi(3)
其中, ywi 是每个词非正规化的 log 概率值, y 的值是通过下式计算得到,参数分别为 b,W,U,d,H
y=b+Wx+Utanh(d+Hx)(4)
W 通常设置为0,即输出层和输入层不存在直接联系,输入向量 x 为上下文环境对应的词向量的拼接组合。在模型中,令 θ=(b,U,d,H,C) ,其中, d 是输入层到隐藏层的偏置(长度为 |V| ), U 为隐藏层到输出层的参数(大小为 |V|×h ), H 为输入层到隐藏层的参数, b 为隐藏层到输出层的偏置(长度为 |h| ), C 是词向量矩阵(大小为 |V|×m ),总共的参数为 |V|(1+nm+h)+h(1+(n1)m)
模型求解方式采用随机梯度上升(SGA,Stochastic Gradient Ascent),SGA类似于SGD,仅目标函数存在min和max的区别。
θθ+ϵlogP^(wt|wt11)θ(5)

3.2发展方向

Bengio在论文的Feature Work部分提出了神经网络语言模型的可能改进方向,在后续研究者(包括他本人)的工作中多有所体现。
a、将神经网络分解成为小的子网络,比如利用词的聚类等。
b、加速SoftMax中的正则项Z的快速求导
c、仅对一部分输出进行梯度传播。
d、引入先验知识,比如语义信息(WordNet),语法信息(low-level: POS, high level:句法结构)等。
e、词向量可解释性。
f、解决一词多义问题(Polysemous)。

4 Hierarchical Neural Language Model

基于前述工作,Bengio又提出了层次结构的神经网络语言模型,用于加速模型的训练和推断过程。

4.1 模型结构

Hierarchical Neural Language Model的表达式如下:

f(wt,wt1,wt2,,wtn+1)=eg(wt,wt1,wt2,,wtn+1)veg(v,wt1,wt2,,wtn+1)(6)
其中 g(wt,wt1,wt2,,wtn+1) 可以看作能量函数。
同上文一致,令 C 为词向量矩阵(word embedding matrix), Ci 为词 i 对应的向量,上述能量函数可以表示为,
g(wt,wt1,wt2,,wtn+1)=aTtanh(c+Wx+UCTv)(7)
上式中, xT x 的转置, a,b,c,W,U 为对应的参数向量和矩阵, x 是通过拼接词 wt 的上下文中词向量得到。
h 为模型中隐藏层的单元数,我们可以计算得到整个模型的参数个数为 (n1)hd+|V|h(d+1) 。假定 h 为100,词表 |V| 的大小20,000,Context的大小 n 为5,可知第一部分为12,000,第二部分为6,000,000,计算量依然很大。

4.2 参数求解

模型求解参考了Goodman加速最大熵的语言模型训练过程中的工作,将词表中的词进行一个预处理(按类层级划分),这样可以达到不错的加速比, O(Vlog2V) 。这样在计算式(2)时,可以转换为,
P(wt|wt1,wt2,,wtn+1)=j=1L(wt)1P(bj(wt)|b1(wt),,bj1(wt),wt1,wt2,,wtn+1)(8)
其中, L(wt) 为树的深度, bj(wt) wt 属于类别 j 的指示变量。按照上述形式,计算 log(wt|wt1,wt2,,wtn+1) log(wt|wt1,wt2,,wtn+1) 的复杂度和 L(wt) 成正比(相比 V ,要小很多)。

5 Log Bi-Linear

Hinton在研究RBM时,结合神经网络语言模型提出了三种基于RBM的语言模型,FRBM(Factored RBM)、Temporal FRBM、Log-Bilinear Language Model,其中Log Bi-Linear为前两者的简化版本,本文中仅介绍Log-BiLinear Language Model。

5.1 模型结构

类似于Log-Linear模型,Log Bi-Linear模型在能量函数部分(EXP上面那个部分的相反数)加入了一个双线性项,注意这里的R是词向量构成的矩阵,C代表此之前的连接权值。
E(wn;w1:n1)=(i=1n1viRCi)RTvnbTrRTvnbTvvn(9)
其中, Ci 表示 wi wn 之间的连接关系的参数, R 表示字典中词向量的矩阵,第 i 行表示第 i 个单词的词向量, vi 表示一个和字典长度相同的指示向量,即词 i 对应词向量可以表示为 viR ;  br,bv 表示对应的偏置。从上述能量函数可以看出,它是一个双线性函数,需要注意的是这里的能量函数是RBM的幂数部分,其对应的语言模型形式为,
P(wn|w1:n1)=1Zcexp(E(wn;w1:n1))(10)
其中, Zc=wnexp(E(wn;w1:n1))
Log Bi-Linear的模型结构见下图,

图2 Log Bi-Linear模型结构

上图表示,每个词 vi 在词向量矩阵中找到对应的词向量表示,然后通过链接矩阵和当前词(图中 v3 )关联,其中关联关系是使用能量函数表示。

5.2 参数求解

套用RBM的求解框架,Log Bi-Linear可以采用Contrast Divergence Learning求解,其参数 (Ci,R) 的梯度表达式,
对于 Ci
CilogP(wn|w1:n1)=<RTviR>D<RTvivTnR>M(11)
对于 R
RlogP(wn|w1:n1)=<i=1n=1(vnvTiRCi+vivTnRCTi)+vnbTr>D<i=1n1(vnvTiRCi+vivTnRCTi+vnbTr>M(12)
这里 <.>D 表示data distribution  P^ <.> 表示model distribution  P

6 Hierarchical LBL

Hinton将Bengio的Hierarchical NNLM和Log Bi-Linear思想结合,提出了Hierarchical Log Bi-Linear Language Model。

6.1 模型结构

Hierarchical LBL是将Hierarchical NNLM和Log Bi-Linear结合起来,对应的语言模型形式,

Log Bi-Linear部分可以简要表示为,
r^=i=t1tn+1Cirwi(13)

P(wt=w|wt1:tn+1)=exp(r^Trw+bw)jexp(r^Trj+bj)(14)
其中, b 为对应的偏置项(bias), r^ 是上下文中的词向量加权,权值为当前词t和上下文中词的关系权值 C rw 为词w对应的词向量。

由以上,可以推出HLBL的模型为,
P(wn|w1:n1)=iP(di|qi,w1:n1)(15)

P(di=1|qi,w1:n1)=σ(r^Tqi+bi)(16)
其中, di w 的在层次(树)结构的编码, qi 是编码路径中第 i 个节点的向量, σ 为Logistic方程。
这里可以允许存在多种层次结构,即每个词对应多种编码, P(wn|w1:n1) 可以将词的所有编码方式求和,即
P(wn|w1:n1)=dD(w)iP(di|qi,w1:n1)(17)

其中, D(w) 为词w的编码集合,这词采用多种编码方式能够更好刻画词的不同形式和“语义”,这种思路在后续的SENNA中也有体现。

6.2 参数求解

该模型参数求解可以直接套用Log Bi-Linear和Hierarchical NNLM的方式,其中不同之处,Hinton提出了一种新的简单的构建层次结构的方法:通过递归的使用二维的高斯混合模型(GMM,Gaussian Mixture Model)进行聚类,直到每个cluster中仅包含两个词,这样所有的结果就构成一个二叉树。

7 SENNA

SENNA中不仅仅提出了word embedding的构建方法,同时还从神经网络语言模型角度系统去解决自然语言处理任务(POS,Chunking,NER,SRL)。SENNA中,每个词可以直接从Lookup Table中直接查找到对应的向量。
LTW(w)=<W>1w(18)
其中, dwrd 是词向量的维度, WRdwrd×|D| 为词向量的矩阵, <W>1w 表示取矩阵 W 的第 w 列。SENNA中,表示句子或者词序列仅将对应的词向量拼接起来得到对应的向量。
SENNA中采用HLBL中同一个词存在不同的词向量,用于刻画不同的语义和语法用途,一个词的词向量最终由各种形态下的词向量组合起来,比如,一个词可以有word stemming的向量,本身的向量(这些向量可能来自不同的Lookup table)等,需要将这些向量结合起来表示这个词。SENNA直接将这些向量拼接起来,构成了一个维度为 dTwrd=kdkwrd

7.1 模型结构

SENNA包含两种网络构建方式(1)window approach(图3)(2)sentence approach(图4)。

(1)window approach
window approach是一个前馈神经网络,包含线性层、HardTanh层。window approach的输入是包含当前词在内的窗口大小 ksz 的序列,拼接所有词的向量得到的表示向量,维度 dwrd×ksz

图3 window approach

f1θ=<LTw([w]T1)>dwint=<W>1[w]tdwin/2<W>1[w]t<W>1[w]tdwin/2(19)
从图3可知, f1θ 输入下一层或者几层线性层,记为 flθ
flθ=Wlfl1θ+bl(20)
其中, WlRnlhu×nl1h,blRnlhu 为待训练参数, nlhu 为第 l 层隐藏单元数。

SENNA中包含了一个特殊的层,HardTanh层,它的输入是前一个线性层。HardTanh层是一个非线性层,形式如下,
[flθ]=HardTanh([fl1θ]i)(21)
其中,
HardTanh(x)=1x1ifx 1if1x1ifx>1(22)
SENNA的输出层为输入序列对应的得分,大小具体任务有关。

(2) sentence approach
window approach能够完成绝大部分自然语言处理任务,但是在SRL上表现不佳。因此,SENNA提出了sentence approach用于适应SRL。sentence approach采用的卷积网络结构,除了线性层和HardTanh层外,还有一个卷积层和一个Max层。

图4 sentence approach
因为sentence的大小不一定相同,需要在sentence上选取滑窗将输入的向量进行卷积,得到如下形式,

<flθ>1t=Wl<fl1θ>dwint+bl t(23)

其中,序列中所有滑窗共享 Wl 。相比线性层,卷积层将局部的特征堆叠起来构建高层的特征,而线性层则需要一个非线性变换(比如HardTanh)才能达到这种效果。
Max层是将卷积层的输出的局部特征合并成为全局特征,卷积层输出处理常用的方法有AVG和MAX。SENNA中采用的是MAX运算,即,

[flθ]i=maxt[fl1θ]i,t1inl1hu(24)

其中, fl1θ 为卷积层的输入, flθ 为Max的输出。

7.2 参数估计

上述神经网络的参数均通过MLE + SGD得到,我们将参数记为 θ ,训练数据记为 T , 则参数估计记为,
θ(x,y)Tlogp(y|x,θ)(25)
其中, x 为输入的句子或词序列(window approach)对应的表示向量, y 表示具体任务(POS,NER,Chunking,SRL)的tag, p(.) 为神经网络的输出结果,箭头右边为data log likelihood。

SENNA求解方式分为两种,word-level log-likelihood,sentence-level log-likelihood。
(1)word-level log-likelihood
在给定输入 x 的情况下,神经网络输出一个得分 [fθ(x)]i ,这里 i 为输出的tag编号。这个得分不满足概率的约束,需要对它进行归一化,这里采用了softmax方程,
p(i|x,θ)=e[fθ]ije[fθ]j(26)
为方便运算,对上述等式取log值,记分母部分为 logaddj[fθ]j=log(je[fθ]j) ,得到的形式带入data log likelihood中,最终形式为交叉熵(cross entropy)。但是,由于在句子中当前词和相邻的词的tag存在关联性,上述方案并非最好的求解方式,所以SENNA提出了sentence-level log-likelihood。

(2)sentence-level log-likelihood
在输入的句子中,有些tag不能在某些tag之后。从序列的角度看,tag和tag之间的转换是有条件的,这种转换是需要满足约束的。记, [fθ] 为句子 [x]T1 的网络输出得分, [fθ]i,t 为输入序列中第 t 个词,输出为第 i 个tag的得分。基于上述考虑,SENNA引如一个转换矩阵 [A] 用于保存tag和tag之间的转换关系, [A]i,j 表示从tag i到tag j的得分,转换得分需要通过从数据中训练得到,故参数为 θ^=θ{[A]i,j,i,j} 。按照上述处理,序列的得分是神经网络得分加上转换得分,
s([x]T1,[i]T1,θ^)=t=1T([A][i]t1,[i]t+[fθ][i]t,t)(27)
类似于word-level的处理,最终输出需要满足概率分布的约束,sentence level仅对所有可能的tag路径进行softmax归一化,我们定义这个结果比值为tag路径条件概率。对条件概率取log后,
logp([y]T1|[x]T1,θ^)=s([x]T1,[i]T1,θ^)logadd[j]T1s([x]T1,[j]T1,θ^)(28)

上式中,logadd操作拥有特殊的性质可以递归的求解,可以方便的得到递推公式,

终止条件为,

logadds([x]T1,[f]T1,θ^)=logaddiδT(i)(29)
上述过程理解可以参照HMM的前向算法。在训练时,对所有的样本 ([x]T1,[y]T1) 最大化data log likelihood,注意其中 p(.) 为tag路径条件概率。

SENNA的推断部分采用的是Viterbi算法,推断过程理解可以参照HMM的推断过程,形式为,
argmax[j]T1s([x]T1,[f]T1,θ^)(30)
类似于HMM中,也需要按照参数求解过程进行递归处理,但是每步需要用max操作替代logadd操作,然后回溯得到解。viterbi的过程理解可以参照动态规划问题,找出状态转移方程即可。

本文链接:[我们是这样理解语言的-3]神经网络语言模型
本站文章若无特别说明,皆为原创,转载请注明来源:火光摇曳,谢谢!^^

你可能感兴趣的:(自然语言,大数据,广告定向,计算广告学)