论文笔记(Attention 2)-----Effective Approaches to Attention-based Neural Machine Translation

上一篇attention介绍了Bahdanau等人提出的一种soft-attention模型。  Luong等人在此基础上提出了两种简单且有效的方式:全局(global)和局部(local)的方式。所谓的global,就是指每次都关注整个source sentence,而local则是在每个时间t,只关注一部分source sentence。

Luong等人提出的global类似于Bahdanau等人的soft-attention方式,但是比他们会简单一些;local的方式可以看成是hard-attention与soft-attention的一种平衡,计算代价比soft-attention小,并且相较于hard-attention,它可微且便于训练。

先来一波Decoder示意图:


首先,Encoder部分其实是大同小异的,通过RNN获得各个时间t的hidden state 

(以下用下标i表示对应目标语言的第i个词,j表示源语言的第j个词)

文中定义decoder端生成最终目标词yi的概率为:


这里作者引入了一个attention hidden state 


原文对这个向量的描述:


其中Ci是当前的目标端yi对应的源语言端上下文向量,后面将分别用global和local的方式来计算Ci。Zi是Decoder的RNN生成的当前隐层状态,它的计算方式如下:


这与Bahdanau等人计算hidden state的方式很像,但是计算Zi的成分有些不同,后面会分析区别。

这里先谈谈: 在传统的统计机器翻译中,我们通常会保存一个coverage set,也就是记录到目前为止源语言端已经被翻译过的词。同样,在Attention-based NMT中,前面计算得到的对齐信息也应该用来辅助当前的对齐决策过程。这就有了文中提出的  input-feeding的方式,即将前一时刻的attention hidden state 加入到当前时刻计算隐层状态Zi的过程中。如上面结构图中黑色虚线的部分。

1.Global Attention

    全局attention的基本思想就是在计算源语言端上下文向量Ci时,考虑Encoder的所有隐层状态h1-T。其间的对应权重(对齐概率)通过比较当前目标端隐层状态Zi和各个hj的相似度来计算,计算方式如下:


这里的score函数可以自己定义,文章给出了三种计算方式:


此外,他们还尝试了一种location-based的定义方式,该方式仅仅考虑目标端的隐层状态:


那么最后Ci就通过ai和hi的weighted sum计算得到。

不过对于location-based的计算方式,获得的a的长度只与target端隐层状态维度有关,文章这么处理:对于短句,只使用前一部分的ai,对于长句,忽略长句最末尾的若干词。


2.Local Attention

    全局的attention需要计算每个目标端词与每个源语言端词的对齐概率,那么对于源语言词比较长时,计算量就会很大,这也是一种缺点。因此有了折中的方法:local attention。

局部attention只计算每个目标端词语部分源语言端词的对齐概率:


如何选取那部分的词呢?

局部的Attention针对i时刻的输出生成一个它在源语言端的对齐位置Pi, 接着在源语言端取一个窗口[Pi-D,Pi+D],上下文向量Ci就是通过计算窗口内的隐层状态的weighted sum获得(如果窗口>句子长度,则以句子长度为基准)。D按照经验设定。这个对齐位置Pi如何确定?文章给了两种方式:

  • Monotonic alignment (local-m)------即简单地设定Pi=i 。对齐权重向量ai与前面计算方式相同。
  • Predictive alignment( local-p)------即针对每个目标输出,预测它在源语言端的对齐位置,计算公式如下:

式中,Wp与Vp都是模型学习的参数,T是源语言的句子长度。这样通过sigmoid再与T相乘会获得一个位置。

最后文章引入一个服从于的高斯分布来设置对齐权重,因为直觉上,我们认为距离对齐位置Pi越近的地方,影响应该越大。这样目标位置i与源语言端位置j的对齐概率计算公式为:


align与前面计算方式相同。

这里引入高斯分布的好处有:



上图可以看出,引入高斯分布后,将权重距离Pi的点提升为peak,这符合我们的认知。且使得整个过程可以通过BP进行参数的学习。(可以想下,没有gassian的引入,是学习不了计算Pi哪个公式中的Wp和Vp的,因为它不是直接通过某个函数和网络联系起来,而是计算出Pi的值,然后把它当做窗口的中心。虽然计算Pi的操作可以微分,但是当做窗口中心这个操作是没办法微分的,所以没办法BP)。在Hard attention中,直接取score最大的作为attention,同理,这个取max的操作无法微分,所以hard attention需要使用其他technique来进行优化BP。

最后对比下Luong的模型与Bahdanau模型的不同之处:



下面给出文章的Encoder-Decoder'部分RNN的结构:

Encoder:多层的LSTM ,句子逆序输入(seq2seq的结论,认为这样效果更好,因为逆序输入,最后output的hidden state会包含更多句子开头的信息,对于接下来Decoder预测开头帮助更大)


Decoder 的RNN:也是多层LSTM,取最上层最后的hidden state输出作为ht:


猜你喜欢

转载自blog.csdn.net/hx14301009/article/details/80462092
今日推荐