论文笔记(attention 1)----NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE

1. weakness of simple RNNenc Architecture

    传统的neural machine translation 大都是基于encoder-decoder模型,即通过一个encoder将源句子编码成一个固定长度的向量表示,再使用decoder将这个向量作为输入,然后获得输出。这样的话,Encoder需要将整个句子编码到一个固定长度的向量,如果句子长度不大,还OK,当句子长度一大,将其压入固定维度的向量必定会造成信息的丢失,因此,传统的结果无法包含源句子的所有信息,这也成为一个瓶颈。当然,直觉上我们可以通过增加维度来解决,但是这样不管对内存还是计算性能上,都有更高的要求。那么,有没有什么好的方法呢?


2. soft attention mechanism for NMT

    为了解决上面的问题,作者提出了一种基于encoder-decoder模型的扩展,这个模型可以同时做到对齐和翻译任务。模型基于这样的思想:target端的翻译过程中,每一个词的生成往往只与源句子部分词相关,因此没有必要每次预测词都使用全部的信息。每一次decoder生成target时,它会从encoder每一个时间点生成的hidden state中去搜寻和当前target相关的词信息,然后基于这些相关的词信息与先前生成的所有target信息一起,来预测当前target。

    这个模型与传统的encoder-decoder最大的不同在于:它并不是去将encoder的信息压缩到一个固定维度的向量,而是将source sentences用一系列的向量来表示(各个时间点的hidden state),然后从中选择一部分和当前预测target最相关的词,在这个基础上进行预测。通过这种操作,可以使模型不用去压缩源信息,解决了更长的信息保留问题。


2.1 Encoder architecture

    首先回顾下基本的Encoder-decoder:

Encoder一般是RNN,它读入input sentence,一般是一连串的vector:X=(X1,X2,X3...XT),将其编码成一个vector C,公式如下:

                                 

                          

其中,ht是encoder在t时刻的hidden-state,  C是由这些hidden-state最后生成的一个代表全句子的vector。经典的模型使用LSTM作为f,C=f吐出的最后一个hidden-state,也就是hT。

上面的结构,在运行期间,每个hidden state只包含了其前面的词的信息,作者使用了双向RNN( bidirectional RNN),即一个词的隐层状态不仅压缩了其前面的词的信息,还压缩了后面的词。其Encoder的架构如下图所示:


    一个BiRNN包含一个前向(forward)和一个后向(backward)RNN。前向RNN按照词序列的顺序依次压缩源语句,并得到一系列隐层状态。类似地,后向RNN按照Xt到X1的顺序依次压缩源语句词,得到。正如上面的结构图所示。

最后对于词Xi,它的隐层状态通过连接两个RNN的结果得到,即:。(也有的人喜欢将两个向量之间加起来,效果也不错)。可以看到,hi压缩了前向和后向的表示,并且由于RNN的特性,会使得更加关注词Xi周围的词,这使得RNN可以更好地表达当前的输入。 

将用于后续的Decoder和对齐模型中。

2.2 Decoder: Learning to Align and Translate

 传统的Decoder 的表达式为:


也就是说,Decoder预测每个yi时,使用的是之前时间步预测的结果y<i   与 C,这里的C就是encoder获得的embedding。可以看到传统的方法,对每个yi的预测,使用的C都是一样的。而作者的模型:


其中: Zi表示i时间Decoder中RNN的隐层状态,定义为:


可见,与普通的Encoder-Decoder结构不同的是,源语言端上下文向量表示由原来的C变成了Ci。即针对每一个目标词yi,都有一个特定的上下文Ci与之对应(也就是如果固定Ci=hT,那么模型就变为RNN Encoder-Decoder了)。


上图就是基于Attention的Decoder结构图。

上下文向量Ci依赖于Encoder得到的 annotation (h1,....hT),其中每个hj压缩了源语言端的词并且“关注于”Xj周围的词。

Ci可以通过各个annotation加权平均获得:


其中,从hj到Ci的权重αij通过下式计算:


原文对权重的解释如下:


Decoder中的a可以看做是一个对齐模型,用来衡量第j个源端词语目标端第i个词的匹配程度,这个程度则通过Decoder的隐层状态Zi-1与源端第j个annotaiton计算得到。不同于传统的对齐模型:源语言端每个词明确对齐到目标语言端一个或多个词(hard alignment).  而该方法计算得到的是一种soft alignment。可以融入整个NMT框架,通过BP算法求梯度来更新参数。

    将Attention机制引入NMT中,可以使得Decoder更多地关注源语言端的部分相关词,从而缓解了Encoder-Decoder框架中将源语言压缩成固定维度向量带来的问题。

下面是原文对attention的解释:


在训练上,通过Encoder获得了一系列的Encoder隐层状态Hi,然后开始Decoder的时候,第一次的Decoder输入是一个SOS token,第一个Decoder的hidden state作者使用的是 :


也就是Encoder中第一个反向的hidden state,这样计算出来的第一个词的attention会更关注源语句第一个词周围的词,这也比较符合直观上的理解。使用这个S0和[SOS token]以及通过S0生成的attention 进行weighted sum获得的context来继续进行后续操作。