写在前面

本文是对博文《Attn: Illustrated Attention》的翻译,有一部分是自己的理解,和原文出入不大。国内网盘链接

在基于神经网路的机器翻译(NMT)出现之前,基于统计的方法一直是机器翻译的主流方法。NMT是近些年才出现的机器翻译方法,它通过训练大型神经网路来读入文本并输出文本的翻译。目前NMT中最流行的框架是序列到序列(seq2seq)的方法,本文将通过图解的方法来介绍seq2seq框架以及其中的注意力机制。

在seq2seq中,有一个Encoder和一个Decoder,Encoder和Decoder都是RNN。即:把要翻译的语言通过Encoder编码,之后把编码得到的向量(图1中红色节点)输入Decoder解码。

seq2seq的缺点在于Decoder从Encoder接收的唯一信息就是最后Encoder隐藏状态( 图1中的2个红色节点),如果输入文本很长,仍然使用定长向量来表示句子的信息显然是不合理的(不可能包含所有的信息,会导致信息的有损压缩)。

Attention的想法基础就是在把原先输入Decoder的定长向量,改为对Encoder的输出向量加权和的形式,这个加权和的计算过程就叫Attention。

注意力机制可以看做是更好的联系Encoder和Decoder的一种方式,可以为Decoder提供来自每个Encoder隐藏状态的信息。通过这种方法,模型能够有选择地关注输入序列的有用部分,从而了解它们之间的对齐关系,有助于模型更好地处理输入较长的句子。

定义:对齐

对齐的意思是把原始文本和对应的翻译进行匹配(就是哪个词对应著翻译成哪个词)。

注意力机制可以分为两种。一种叫做全局注意力,就是计算注意力的时候使用Encoder所有的隐藏状态。还有一种叫局部注意力,使用Encoder一部分隐藏状态(目的是为了减少计算量,通常计算一个固定窗口内的部分)。本文的范讨论的是全局注意力,因此本文中对「Attention」都是全局注意力。

本文采用图解的方式来理解Attention机制,没有繁杂的数学公式,文末还使用了3个NMT模型作为例子来展示注意力到底是怎么用的。

注意力机制概述

通过为每个单词分配一个权重,注意力机制能够保证当前翻译的单词对原文各个单词的关注点不同(就是对照著原文翻译)。由于这个权重可能大于1,为了方便我们使用softmax进行归一化,得到归一化权重,然后计算Encoder隐藏状态和其对应归一化权重的加权和,得上下文向量。注意力层的实现可以分为6个步骤。

计算Encoder的隐藏状态和Decoder的隐藏状态

计算Encoder所有的隐藏状态和Decoder的第一个隐藏状态。要想输出Decoder的第一个隐藏的状态,需要给Decoder一个初始状态和一个输入,例如采用Encoder的最后一个状态作为Decoder的初始状态,输入为0。

计算评分

计算Decoder的第一个隐藏状态和Encoder所有的隐藏状态的相关性,这里采用点积的方式(默认两个向量长度一样)。后面是一个计算示例。

在上面的例子中,Encoder其中一个的隐藏状态向量[5, 0, 1]获得了60分的最高分数,这说明要翻译的下一个词将受到这个Encoder隐藏状态很大程度的影响。

通过softmax归一化分数

我们把得到的分数输入到到softmax层,进行归一化,归一化后的分数代表的注意分配的权重 。(这里我觉得有一点问题,文章里面说的是进行softmax,即soft注意力,出来的应该是浮点数的概率值,但是他这里的计算结果是采用选取评分最高的那个词,即hard注意力,其实都可以的,但是一般soft用的比较多。)这里我们看到除了 [5, 0, 1] 获得1的注意力得分,所有Encoder隐藏状态的对齐到了0。这意味著我们可以预期第一个翻译的单词应该与 [5, 0, 1] 嵌入的输入单词匹配。

将每个Encoder隐藏状态乘以其softmax得分

通过将每个Encoder隐藏状态与其softmaxed得分(标量)相乘,我们获得对齐向量 。

对齐向量

把对齐向量和对应的归一化分数相乘相加,得到上下文向量。上下文向量就是对所有对齐向量进行信息聚合。

将上下文向量输入到Decoder中。

输入的方式和模型有关。我们会在下面的例子中看到不同的模型是如何利用Decoder的上下文向量的。

注意力实际上如何运作?

答案:反向传播。反向传播会确保Decoder的输出(翻译的句子)和实际情况误差逐渐减小。这实际上是通过改变RNN中的权重和得分函数来完成的。改变权重会影响Encoder隐藏状态和Decoder隐藏状态,进而影响注意力得分。

注意力机制的例子

在上一节中我们已经了解了seq2seq和seq2seq +注意模型,接下来会介绍3个基于seq2seq的NMT架构,来看一下具体是怎么用的。为了比较效果,文章给出了每个模型的双语评估研究(BLEU)分数 -用于评估生成的句子到参考句子的标准度量。

例1:Neural Machine Translation by Jointly Learning to Align and Translate

注意力机制用于机器翻译的开篇之作。作者在《Neural Machine Translation by Jointly Learning to Align and Translate》一文中使用「对齐」一词来表示在训练模型时得到的注意力权重。下面是这个模型的一些关键点:

  • Encoder是双向(前向+后向)门控循环单元(BiGRU)。
  • Decoder是GRU,其初始隐藏状态来自EncoderGRU的最后隐藏状态向量(未在下图中示出)。
  • 注意层中的评分方法是点积加权和,下一个Decoder时间步的输入是来自前一个Decoder时间步(粉红色)的输出和当前时间步(深绿色)的上下文向量之间的拼接(concat)。

作者在WMT14英语 - 法语数据集上获得了26.75的BLEU分数。

例2: Effective Approaches to Attention-based Neural Machine Translation

这篇论文的关键点如下:

  • Encoder是两层的LSTM网路。 Decoder也一样,其初始隐藏状态是最后Encoder隐藏状态。
  • 他们实验的评分函数是(i)add和concat,(ii)dot,(iii)location,和(iv)general。
  • 拼接得到的上下文向量输入一个前馈神经网路得到的输出(粉红色)作为当前Decoder时间步的输入。

在WMT』15 英语 - 法语数据集上获得了25.9的BLEU分数 。

例3:(不讲,感觉没什么特别的)

总结

本文内容回顾:

  • seq2seq
  • seq2seq + attention
  • seq2seq with bidirectional encoder + attention
  • seq2seq with 2-stacked encoder + attention
  • GNMT—seq2seq with 8-stacked encoder (+bidirection+residual connections) + attention

附录:评分函数

一些常见的Attention评分函数

推荐阅读:

相关文章