神经网路语言模型(NNLM)的理解

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

与传统的估算 p ( w t ∣ w t − ( n − 1 ) , . . . w t − 1 ) p(w_t|w_{t-(n-1)},...w_{t-1}) p(wtwt(n1),...wt1)不同,NNLM模型直接通过一个神经网络结构对n元条件概率进行评估,NNLM模型的基本结构如下:
这里写图片描述

1. 模型原理
1.1 模型输入:

首先从语料库中搜集一系列长度为n的文本序列 ( w t , w t − 1 . . . w t − ( n − 1 ) ) (w_t,w_{t-1}...w_{t-(n-1)}) (wt,wt1...wt(n1)),然后组成训练集D,我这里的理解是语料库就是我们在特定领域搜集的文本语料,同时还要有一个词典。有了训练数据和词典,下面就来看下模型是怎样进行前向传播的。

这里先对单个语句序列进行计算,也可以说是单个样本,比如: w 1 … w T w_1 …w_T w1wT 其中 w t ∈ V w_t∈V wtV,这里的 V V V是所有单词的集合(即词典), V i V_i Vi表示词典中的第 i 个单词。

1.2 模型参数:

NNLM的目标是训练如下模型:
f ( w t , w t − 1 , . . . , w t − n + 2 , w t − n + 1 ) = p ( w t ∣ w 1 t − 1 ) f(w_t,w_{t−1},...,w_{t−n+2},w_{t−n+1})=p(w_t|w_1^{t−1}) f(wt,wt1,...,wtn+2,wtn+1)=p(wtw1t1)
其中 w t w_t wt表示词序列中第t个单词, w 1 t − 1 w_1^{t−1} w1t1表示从第1个词到第t个词组成的子序列。模型需要满足的约束条件是:

  • f ( w t , w t − 1 , . . . , w t − n + 2 , w t − n + 1 ) > 0 f(w_t,w_{t−1},...,w_{t−n+2},w_{t−n+1})>0 f(wt,wt1,...,wtn+2,wtn+1)>0
  • ∑ i ∣ V ∣ f ( w t , w t − 1 , . . . , w t − n + 2 , w t − n + 1 ) = 1 \sum ^{|V|}_i f(w_t,w_{t−1},...,w_{t−n+2},w_{t−n+1})=1 iVf(wt,wt1,...,wtn+2,wtn+1)=1

上面模型的意思是当给定一段序列时,由其前面的(t-1)个词预测第n个词的概率。
限制条件一:即是通过网络得到的每个概率值都要大于0。
而对于第二个限制条件:因为我们的神经网络模型最终得到的输出是针对每t-1个词的输入来预测下一个,也即是第t个词是什么。因此模型的实际输出是一个向量,该向量的每一个分量依次对应下一个词为词典中某个词的概率。所以|v|维的概率值中必定有一个最大的概率,而其他的概率较小。

上面是模型的输入和输出,下面说下前向传播的过程:该模型可分为特征映射和计算条件概率分布两部分

  1. 特征映射:通过映射矩阵 C ∈ R ∣ V ∣ × m C \in R^{|V|×m} CRV×m将输入的每个词映射为一个特征向量, C ( i ) ∈ R m C(i) \in R^m C(i)Rm表示词典中第 i 个词对应的特征向量,其中 m 表示特征向量的维度。这里的映射可以是one-hot。然后将通过特征映射得到 C ( w t − n + 1 ) , . . . , C ( w t − 1 ) C(w_{t−n+1}),...,C(w_{t−1}) C(wtn+1),...,C(wt1)合并成一个 ( n − 1 ) m (n−1)m (n1)m维的向量 ( C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) (C(w_{t−n+1}),...,C(w_{t−1})) (C(wtn+1),...,C(wt1)),因为每一个词是m维的,总共有n-1个词,所以总共有 ( n − 1 ) m (n−1)m (n1)m维。
    也可以说是:一个从词汇表V到实数向量空间的映射C。通过这个映射得到每个单词的向量表示。

  2. 计算条件概率分布:通过一个函数 g(g是前馈或递归神经网络)将输入的词向量序列 ( C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) (C(w_{t−n+1}),...,C(w_{t−1})) (C(wtn+1),...,C(wt1))转化为一个概率分布 y ∈ R ∣ V ∣ y∈R^{|V|} yRV,所以这里的输出是|v|维的,和词典的维度是相同的。y中第 i 位表示词序列中第 n 个词是 Vi的概率,即: f ( i , w t − 1 , . . . , w t − n + 2 , w t − n + 1 ) = g ( i , C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) f(i,w_{t−1},...,w_{t−n+2},w_{t−n+1})=g(i,C(w_{t−n+1}),...,C(w_{t−1})) f(i,wt1,...,wtn+2,wtn+1)=g(i,C(wtn+1),...,C(wt1))

下面详细介绍下神经网络的结构,网络输出层采用的是softmax函数,如下式所示:
p ( w t ∣ w t − 1 , . . . , w t − n + 2 , w t − n + 1 ) = e y w t ∑ i e y i p(w_t|w_{t−1},...,w_{t−n+2},w_{t−n+1})=\frac{e^{y_{w_t}}}{∑_ie^{y_i}} p(wtwt1,...,wtn+2,wtn+1)=ieyieywt

其中 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 , d , W , U , H , C ) \theta=(b,d,W,U,H,C) θ=(bdWUHC) x = ( C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) x=(C(w_{t−n+1}),...,C(w_{t−1})) x=(C(wtn+1),...,C(wt1))是神经网络的输入。 W ∈ R ∣ V ∣ × ( n − 1 ) m W \in R^{|V|×(n−1)m} WRV×(n1)m是可选参数,如果输入层与输出层没有直接相连(如图中绿色虚线所示),则可令W=0。

当输入层和输出层没有直接相连时:
H ∈ R h × ( n − 1 ) m H \in R^{h×(n−1)m} HRh×(n1)m是输入层到隐含层的权重矩阵,其中h表示隐含层神经元的数目。此时隐藏层运算: h × ( n − 1 ) m h×(n−1)m h×(n1)m ( n − 1 ) m × 1 (n-1)m ×1 (n1)m×1 相乘得到 h × 1 h×1 h×1
U ∈ R ∣ V ∣ × h U∈R^{|V|×h} URV×h是隐含层到输出层的权重矩阵。 d ∈ R h d\in R^h dRh b ∈ R ∣ V ∣ b \in R^{|V|} bRV分别是隐含层和输出层的偏置参数。这时的输出层运算: ∣ V ∣ × h |V|×h V×h h × 1 h×1 h×1相乘得到 ∣ V ∣ × 1 |V|×1 V×1

以上就是前向传播的过程。

1.3 模型训练

模型的训练目标是最大化以下似然函数:
L = 1 T ∑ t l o g f ( w t , w t − 1 , . . . , w t − n + 2 , w t − n + 1 ; θ ) + R ( θ ) L=\frac{1}{T} \sum_t logf(w_t,w_{t−1},...,w_{t−n+2},w_{t−n+1};θ)+R(θ) L=T1tlogf(wt,wt1,...,wtn+2,wtn+1;θ)+R(θ),其中 θ \theta θ为模型的所有参数, R ( θ ) R(\theta) R(θ)为正则化项。

使用梯度下降算法更新参数的过程如下:
θ ← θ + λ ∂ l o g p ( w t ∣ w t − 1 , . . . , w t − n + 2 , w t − n + 1 ) ∂ θ \theta←\theta+ \lambda \frac{∂logp(wt|wt−1,...,wt−n+2,wt−n+1)}{∂θ} θθ+λθlogp(wtwt1,...,wtn+2,wtn+1),其中 λ \lambda λ为步长。

总结:由于NNLM模型使用了低维紧凑的词向量对上文进行表示,这解决了词袋模型带来的数据稀疏、语义鸿沟等问题。显然nnlm是一种更好的n元语言模型;另一方面在相似的上下文语境中,nnlm模型可以预测出相似的目标词,而传统模型无法做到这一点。

参考:
https://blog.csdn.net/u010089444/article/details/52624964?ref=myread
https://www.zhihu.com/question/32275069

  • 18
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值