参考论文:Netural Machine Translation By Joinly Learning To Align And Translate
这篇论文应该是attention系列论文的鼻祖论文了, 引用量已经超多了吧!
背景
机器翻译方面的模型一般都会采用encoder-decoder的框架,对source sentence 编码成固定长度的vector,这个vector作为decoder的输入,产生对应的翻译结果。对source定长编码成为这一系列框架的瓶颈。成为瓶颈的原因有两个方面(1, 当source长度很长的情况, 用定长的vector显然不能包含source中所有的信息。2, decoder翻译出的yi和yi-1都使用了同等的语义信息c, 也就是说没有考虑hi相对与hi-1和yi的相关性更强的因素,就比如source = "I love eating apple", target="我爱吃苹果",love的hi信息对翻译结果yi更重要)而这篇论文提出可以自动找到与要预测的target word最为相关的source sentence 的片段。这种机制就可以称为attention机制,并且这篇论文探讨了这种结构在机器翻译领域所带来的提升。
结构
在上一篇文章中其实已经很详细的介绍了attention, 但是作为追根溯源的楼楼又怎么会放过一个了解机器翻译的好机会呢
论文中采用BiRNN, 采用普通的RNN中hi(annotation)只能包含(x1,x2,x3,...xi-1,xi)的信息,但是不能包含(xi 1,xi 2,...xT)的信息,但是包含整个source sentance信息才能在后面计算c时更合理。因而在encoder-decoder结构中的encoder采用了BiRNN.
过程
输入为(x1,x2,...,xT),从拿到source sentance到输入到encoder之前,需要进行embeding操作,一般采用的就是词袋模型和word2vector. RNN中ht的计算公式如下:
传统采用encoder-decoder结构的机器翻译模型也会在encoder-decoder之间设置一个context vector c. c是由序列的隐状态生成的,确切的说是由整个source sentence生成的,长度是固定的
其中f 和 q是非线性函数, decoder部分在去做预测时, 当预测下一个词yt,会根据拿到c以及y1,y2,..yt-1计算条件概率。计算公式如下:
, 其中g是非线性函数。而最终预测结果{y1,y2,...yT}的概率为
而这篇论文着重在c这个部分做了调整,并且根据新的c重新调整yt的调整概率。考虑到不同时刻的输出y采用不同的c, 也就是c会根据预测序列向前推进而发生变化, 之前的c包含了整个source sentence的信息,但是在这里虽然也包含了整个source sentence但是会有重点的,也就是分配更多的注意力给与当前要输出结果yi更相关的hi。这就是为什么叫attention的真正原因吧。
那论文中是如何分配attention的呢?
其实在文章attention all is you need中已经详细写过了,可以分为三个阶段,这里就把论文里的公式摆一摆吧。
其实,attention更像是一个跟着时间维变化的分布,我个人理解这个分布在时间维上以先验分布和后验分布迭代进行,直到整个target达到。 eij其实上就是decoder中的隐状态si-1和encoder中input sentence的第j个表示hj之间的得分,可以理解为si-1 的在hi,....htx的分布,得分越高,说明input sentence的第j个word更需要被关照。论文中提到其实eij的计算过程就是一个对其模型(alignment model), 体现了input 的j位置和output的i位置的匹配程度。随着i移动,ci会由于s的推进而不断变化,模型会通过ci将注意力重新分配。
最后再说说BiRNN,BiRNN包含前向RNN和后向RNN,两个RNN网络结构分别正序和逆序输入,得到相应的隐状态{h1,h2,,,,hTx},然后对于第j个隐层hj = [hj,hj],将前向和后向的hj拼接起来。通过这个方法,就能避免hj只包含前向或者是后向的信息,导致注意力分配不正确的问题()。