概要
统计语言模型的目标是学习句子中词的联合概率,这其中有个非常严重的问题就是维度灾难。论文提出使用神经网络模型对词进行分布式表示:
- 关联词汇表中的每个词,形成一个分布式词特征向量∣ V ∣ × m |V| \times m∣V∣×m
- 根据词序列中词的特征向量表示词序列的关联概率函数
- 学习词特征向量和关联概率函数的参数
特征向量可以表示词的不同方面,因为每个词都与向量空间中的一个点相关联。概率函数则是以词序列的条件概率表示,使用多层神经网络进行训练函数的参数。
为什么可以这么实现?
假如有两个词序列
The cat is walking in the bedroom
A dog was running in a room
我们知道两个句子中cat和dog语义表示应该是相似的。因为(the,a), (bedroom,room), (is,was),(running,walking)是语义相似的,概率函数在特征向量表示中的平滑作用,cat和dog的特征表示也会很相似。
NNLM模型
如图所示为NNLM模型结构
假设训练集为一个词序列w 1 , w 2 , . . . , w T w_1,w_2,...,w_Tw1,w2,...,wT,词汇表为V VV,而w t ∈ V w_t \in Vwt∈V,NNLM模型的目标函数为f ( w t , . . . , w t − n + 1 ) = P ^ ( w t ∣ w 1 t − 1 ) f(w_t,...,w_{t-n+1})=\hat P(w_t|w^{t-1}_1)f(wt,...,wt−n+1)=P^(wt∣w1t−1)其中w 1 t − 1 = ( w 1 , w 2 , . . . , w t − 1 ) w^{t-1}_1=(w_1,w_2,...,w_{t-1})w1t−1=(w1,w2,...,wt−1)下同。
对任意词序列w 1 t − 1 w_1^{t-1}w1t−1都满足:∑ i = 1 ∣ V ∣ f ( i , w t − 1 , w t − 2 , . . . , w t − n + 1 ) = 1 , f > 0 \sum_{i=1}^{|V|}f(i,w_{t-1},w_{t-2},...,w_{t-n+1})=1,\quad f>0i=1∑∣V∣f(i,wt−1,wt−2,...,wt−n+1)=1,f>0其中f ( i , w t − 1 , w t − 2 , . . . , w t − n + 1 ) f(i,w_{t-1},w_{t-2},...,w_{t-n+1})f(i,wt−1,wt−2,...,wt−n+1)表示前n nn个词预测词i ii的概率。通过这些条件概率的乘积,可以得到词序列的联合概率模型。
NNLM模型将函数f ( w t , . . . , w t − n − 1 ) = P ^ ( w t ∣ w 1 t − 1 ) f(w_t,...,w_{t-n-1})=\hat P(w_t|w_1^{t-1})f(wt,...,wt−n−1)=P^(wt∣w1t−1)分解为两个部分:
- 词汇表中的任意一个元素i ii使用映射矩阵C ∣ V ∣ × m C_{|V|\times m}C∣V∣×m得到向量表示C ( i ) ∈ R m C(i) \in \Reals^mC(i)∈Rm。它表示与词汇表中每个单词相关联的分布式特征向量。
- 将词特征向量序列( C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) (C(w_{t-n+1}),...,C(w_{t-1}))(C(wt−n+1),...,C(wt−1))函数g gg得到条件概率分布,估计P ^ ( w t ∣ w 1 t − 1 ) \hat P(w_t|w_1^{t-1})P^(wt∣w1t−1),如上图。C CC和g gg的组合就是函数f ff:f ( i , w t − 1 , w t − 2 , . . . , w t − n + 1 ) = g ( i , C ( w t − 1 ) , . . . , C ( w t − n + 1 ) ) f(i,w_{t-1},w_{t-2},...,w_{t-n+1})=g(i,C(w_{t-1}),...,C(w_{t-n+1}))f(i,wt−1,wt−2,...,wt−n+1)=g(i,C(wt−1),...,C(wt−n+1))
C CC和g gg都各自有一些关联参数,映射矩阵C CC的参数就是其特征向量本身。第i ii行就是第i ii个词的特征向量C ( i ) C(i)C(i)。而函数g gg则可以由前向神经网络、循环神经网络或其他的参数化函数实现,模型的整体参数表示为θ = ( C , ω ) \theta=(C,\omega)θ=(C,ω),其中ω \omegaω是函数g gg的参数。
整个模型训练的损失函数L = 1 T ∑ t l o g f ( w t , w t − 1 , . . . , w t − n + 1 ; θ ) + R ( θ ) L=\frac{1}{T}\sum_tlogf(w_t,w_{t-1},...,w_{t-n+1};\theta)+R(\theta)L=T1t∑logf(wt,wt−1,...,wt−n+1;θ)+R(θ)其中R ( θ ) R(\theta)R(θ)是惩罚性,训练目标就是最大化损失函数。
以论文中实验部分设计的模型梳理整个模型的流程
从上面的模型图中可以看出,NNLM模型有两个隐藏层(hidden layer):共享此特征层C CC(the shared word features layer C)和普通的双切曲线tanh隐藏层(the ordinary hyperbolic tangent hidden layer):
- 第一个隐藏层:将词序列通过矩阵C CC转换成特征向量序列:x = ( C ( w t − 1 ) , . . . , C ( w t − n + 1 ) ) x=(C(w_{t-1}),...,C(w_{t-n+1}))x=(C(wt−1),...,C(wt−n+1))
- 第二个隐藏层:计算每个输出词i ii的对数概率(log-probabilities)y = b + W x + U t a n h ( d + H x ) y=b+Wx+Utanh(d+Hx)y=b+Wx+Utanh(d+Hx)其中b , W , U , d , H b,W,U,d,Hb,W,U,d,H为函数参数。
最后输出层中为了保证所有词的概率之和等于1,使用softmax函数P ^ ( w t ∣ w t − 1 , . . . , w t − n + 1 ) = e y w t ∑ i e y i \hat P(w_t|w_{t-1},...,w_{t-n+1})=\frac{e^{y_{w_t}}}{\sum_ie^{y_i}}P^(wt∣wt−1,...,wt−n+1)=∑ieyieywt
总结
NNLM模型对词表示的能力比n-gram模型好很多,并且通过学习分布式词表示解决了维度灾难问题。同时,模型设计了并行计算,如数据的并行处理、参数的并行处理,更好的提升模型的性能。
论文地址