浅谈神经网络语言模型(NNLM)的理解

作者分享使用Embedding方法时对NNLM的理解。前向传播中,先计算句子概率,经马尔可夫假设简化,对语料词one - hot编码后降维得特征向量,通过映射结构预测;反向传播则给出损失函数,对目标函数进行梯度上升求解。

    最近一直在使用各种Embedding的方法,于是好奇的看到了NNLM,总结一下自己的理解。


Forward


  首先,我们假设一句话由w=(w1,w2,...,wt)w=(w_1,w_2,...,w_t)w=(w1,w2,...,wt)组成(wiw_iwi为单词),在语言模型中计算一句话的概率,我们用w1,w2,...,wtw_1,w_2,...,w_tw1,w2,...,wt的联合概率来表示一句话的概率。如下:

p(w)=p=(w1,w2,...,wt)(1)\bm{p(w)=p=(w_1,w_2,...,w_t)}\tag1p(w)=p=(w1,w2,...,wt)(1)

也可以来判断一句话是否通顺,都是一个意思,通过条件概率得到如下变形:
P(w1,w2,…,wt)=P(wt∣wt−1,…,w2,w1)∗P(wt−1,…,w2,w1)=p(w1)∗p(w2∣w1)∗p(w3∣w1,w2)∗......∗p(wn∣w1,......,wn−1)(2)\begin{array}{ll} P(w_1, w_2, … , w_t)& = P(w_t | w_{t-1}, … , w_2, w_1) * P(w_{t-1}, … , w_2, w_1)\tag2 \\\\ & = p(w_1)*p(w_2|w_1)*p(w_3|w_1,w_2)*......*p(w_n|w_1,......,w_{n-1}) \end{array}P(w1,w2,,wt)=P(wtwt1,,w2,w1)P(wt1,,w2,w1)=p(w1)p(w2w1)p(w3w1,w2)......p(wnw1,......,wn1)(2)

根据马尔可夫假设,我们可以类似的认为离t最近n-1个词和它相关,从而可以得到:

P(wt∣wt−1,…,w2,w1)=P(wt∣wt−1,wt−2,…,wt−n+1)(3)\bm{P(w_t | w_{t-1}, … , w_2, w_1)=P(w_t | w_{t-1}, w_{t-2}, … , w_{t-n+1})\tag3}P(wtwt1,,w2,w1)=P(wtwt1,wt2,,wtn+1)(3)
另外,插一点题外话,若我们这里认为只和最近的1个词相关,便成了2-gram,同时我们可以把公式(2)变形如下:
P(w1,w2,…,wt)=P(wt∣wt−1,…,w2,w1)∗P(wt−1,…,w2,w1)=p(w1)∗p(w2∣w1)∗p(w3∣w1,w2)∗......∗p(wn∣w1,......,wn−1)=p(w1)∗p(w2∣w1)∗p(w3∣w2)∗......∗p(wn∣wn−1)(2*)\begin{array}{ll} P(w_1, w_2, … , w_t)& = P(w_t | w_{t-1}, … , w_2, w_1) * P(w_{t-1}, … , w_2, w_1)\tag{2*} \\\\ & = p(w_1)*p(w_2|w_1)*p(w_3|w_1,w_2)*......*p(w_n|w_1,......,w_{n-1})\\\\ & = p(w_1)*p(w_2|w_1)*p(w_3|w_2)*......*p(w_n|w_{n-1}) \end{array}P(w1,w2,,wt)=P(wtwt1,,w2,w1)P(wt1,,w2,w1)=p(w1)p(w2w1)p(w3w1,w2)......p(wnw1,......,wn1)=p(w1)p(w2w1)p(w3w2)......p(wnwn1)(2*)

  回归正题,我们这里假设词典为10000个词。分别对语料中的词进行one-hot编码(词典为语料中不重复的单词)。
  一般来说,这个n是一个比较小的值。我们这里假设n=6,那么n-1=5.那么,我们可以认为输入是5个one-hot向量,我们把这个向量拼成一个[5 * 10000]的矩阵,由于向量的维度通常比较高,我们进行降维处理:右乘一个[10000 *100]的权重矩阵得到一个[5 * 100]的矩阵(这里不一定是100,只是举个例子)。

  上面的这一段在原文里面其实是没有的,这样讲解是为了更好的理解,论文里面是通过index在C中进行一个查表操作。其实道理是一样的。

  这个过程我们也可以理解为从one-hot到distributed representation的转化过程。这样就得到了特征向量。根据论文 Nerual Network Language Model写道:

a function g maps an input sequence of feature vectors for words in context,(C(wt−n+1),⋅⋅⋅,C(wt−1))(C(w_{t−n+1}),··· ,C(w_{t−1}))(C(wtn+1),,C(wt1)), to a conditional probability distribution over words in V for the next word wtw_twt

上面的(C(wt−n+1),⋅⋅⋅,C(wt−1))(C(w_{t−n+1}),··· ,C(w_{t−1}))(C(wtn+1),,C(wt1))就是我们得到的特征向量,作者通过一个映射g来得到对wtw_twt.的预测,

这个映射的设计结构如下图:

映射g的结构图

  先是将特征向量进行拼接,也就是5*100的矩阵,拼接成一个500维的向量(xxx),然后将这个向量(xxx)

经过 (4) 线性变换之后,再经过tanh处理得到一个100维的向量,如(5):

y1=Utanh(d+Hx)(4)\bm{y_1=U tanh(d+Hx)}\tag4y1=Utanh(d+Hx)(4)

[100∗500]∗[500∗1]=[100∗1](5)\bm{[100*500]*[500*1]=[100*1]}\tag5[100500][5001]=[1001](5)

  然后左乘U得到 一个10000维的向量 y1y_1y1,如(6):
[10000∗100]∗[100∗1]=[10000∗1](6)\bm{[10000*100]*[100*1]=[10000*1]\tag6}[10000100][1001]=[100001](6)
  接下来是对输入特征向量(xxx)的处理 ,(xxx)左乘一个[10000 * 500]的矩阵得到一个[10000 * 1]的向量:
y2=b+Wx(7)\bm{y_2 = b+Wx\tag7}y2=b+Wx(7)

[10000∗500]∗[500∗1]=[10000∗1](8)\bm{[10000*500]*[500*1]=[10000*1]\tag8}[10000500][5001]=[100001](8)

  将上面y1和y2y_1和y_2y1y2相加就得到了最终的向量
y=y1+y2(9)\bm{y=y_1+y_2\tag9}y=y1+y2(9)

y=b+Wx+Utanh(d+Hx)(10)\bm{y = b+Wx+U tanh(d+Hx)\tag{10}}y=b+Wx+Utanh(d+Hx)(10)
  yyy是一个10000的向量,这里的x为特征向量,W,U,H都为权重,b,d为biasW,U, H都为权重,b, d为biasWU,Hb,dbias。然后通过softmax得到对wtw_twt的预测:

P(wt∣wt−1,⋅⋅⋅wt−n+1)=eyw,i∑iNeyw,i(11)\bm{P(w _t |w_{t−1} ,···w_{t−n+1} ) =\frac{e ^{y{_w}{_,}{_i}}}{∑_ i^N e ^{y_w{_,}_i}}\tag{11}}P(wtwt1,wtn+1)=iNeyw,ieyw,i(11)
也就是当上下文为content(www)时,wtw_twt为字典中第i个词的概率。


Back propagation


损失函数: L=∑w∈clogp(w∣context(w))(12)\bm{L =∑_{w \in c}log p(w|context(w))\tag{12}}L=wclogp(wcontext(w))(12)

接下来对目标函数进行梯度上升求解即可。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值