这是2015年发表在ICLR上的论文,也是NLP中Attention机制的开山之作,Attention机制是为了解决一般的RNN Encoder-Decoder对长句子表现不佳的问题而设计的。从论文题目中我们可以看到,作者希望通过Attention机制将输入句子input和输出句子output进行"对齐"(SMT中也有所谓的词对齐模型)。但是,由于不同语言的句法语法结构千差万别,想将源句子与翻译句子严格的对齐是很困难的,所以这里的对齐实际上是软对齐(soft-alignment),也就是不必将源句子显式分割,因而又被形象地称为注意力机制(Attention Mechanism)
近年来,基于神经网络的机器翻译模型经常被用来处理机器翻译任务。与传统基于统计的翻译方法相比,审计网络的机器翻译模型意在构建单个神经网络模型来提升整体翻译的准确率,主要的模型架构基本都是Seq2Seq家族的(Seq2Seq模型论文笔记)。在本论文中,作者认为该模型的瓶颈主要在于中间转换的向量是固定维度的。因此,作者提出了一种新的解码方式,其解码的源头不仅仅包括该向量,它们希望构建一种为当前预测词从输入序列中自动搜寻相关部分的机制(soft-search,也就是注意力机制)。作者运用这种新的机制来搭建升级版的神经翻译模型,取得了卓越的效果,并且也通过定量分析来证明了这种注意力机制的合理性
注意力机制解决的问题
传统的Encoder-Decoder结构对于长句子和生词过多的句子效果很不理想,因为随着序列的增长,句子越前面的词信息就会丢失的越厉害,虽然也有很多论文提出了一些trick,比如将句子倒序输入,或者重复输入两遍,或者使用LSTM模型。但这些都治标不治本,对模型性能的提升并不明显,因为在解码时,当前预测词对应的输入词的上下文信息、位置信息等基本都已丢失
并且,性能的瓶颈在于Encoder强制将句子中所有信息都压缩在一个定长的向量中,而当句子长度过大时,定长的向量就难以将所有的信息都编码进向量中,因此造成了性能下降。由此,作者提出,在翻译目标词的每一步,应该让Decoder自动抽取源句子中那些与目标词信息相关的部分,而忽略不相关的部分,这些部分的信息构成一个上下文向量(context word) $c_i$,取代传统Encoder中的语义表示向量$h_{T_x}$。也就是说,Encoder将句子编码成一个向量序列,而不是一个向量,然后再预测翻译单词的每一步选择这些向量的子集作为注意力向量输入到Decoder中。这是符合我们直觉的,因为人类在翻译句子时,不会每时每刻都考虑整个句子的含义,而是在翻译特定片段时,重点注意这个片段附近的上下文,而不会注意离我们正在翻译的片段较远的那些片段
Encoder
基本的RNN Encoder是将源句子压缩成一个固定维度的向量,那么期间每个词的隐层状态只压缩了前面的词。Bahdanau等人使用双向RNN(bidirecitonal RNN,简记为BiRNN),即一个词的隐层状态不仅压缩了其前面的词的信息,还压缩了后面的词
一个BiRNN包含一个前向(forward)和一个后向(backward)RNN。前向RNN按照词序列($x_1,x_2,...,x_T$)的顺序依次压缩源句子,并得到一个隐层状态($\overrightarrow {h_1},\overrightarrow {h_2},...,\overrightarrow {h_T}$),类似地,后向RNN按照($x_T,x_{T-1},...,x_1$)的顺序依次压缩源句子,得到($\overleftarrow {h_1},\overleftarrow {h_2},...,\overleftarrow {h_T}$)。最后对于词$x_i$,它的隐层状态通过连接两个RNN的结果得到,即$h_i=[\overrightarrow {h_i^T};\overleftarrow {h_i^T}]^T$,可以看到,$h_i$压缩了前向和后向的表示,并且更加关注于词$x_i$周围的词,使得RNN能更好地表达当前的输入
Decoder
在预测目标词时,生成对应单词的条件概率定义为:
$$ p(y_i|y_1,\cdots,y_{i-1},\mathbf{x})=g(y_{i-1},z_i,c_i) $$
$g$一般是多层非线性神经网络,其中$z_i$为RNN在$i$时刻的状态:
$$ z_i=f(z_{i-1},y_{i-1},c_i) $$
可见,与简单的Encoder-Decoder结构不同的是,源语言端上下文向量表示由原来的$c$变成了$c_i$,即针对每一个目标词$y_i$,都有一个特定的$c_i$与之对应(也就是说如果固定$c_i=\overrightarrow {h_T}$,那么模型就变为一个RNN Encoder-Decoder)
上下文向量$c_i$依赖于Encoder得到的$\text{annotations}\ (h_1,...,h_T)$,其中每个$h_j$压缩了源语言端的词并且"关注于"$x_j$周围的词。$c_i$可以通过各个$annotations$的加权平均得到:
$$ c_i=\sum_{j=1}^{T_x}\alpha_{ij}h_j $$
其中,从$h_j$到$c_i$的权重$\alpha_{ij}$为:
$$ \begin{aligned} \alpha_{ij}&=\frac{\exp(e_{ij})}{\sum_{k=1}^T\exp(e_ik)}\\ e_{ij}&=a(z_{i-1},h_j)\\ &=v_a^T\tanh(W_az_{i-1}+U_ah_j) \end{aligned} $$
Decoder中的a可以看作是一个对齐模型,用来衡量第$j$个源端词与目标端第$i$个词的匹配程度,这个程度则通过Decoder的隐层状态$z_{i-1}$和源端第$j$个$annotation$计算得到。不同于传统的对齐模型:源语言端每个词明确对齐到目标语言端一个或多个词(hard alignment),而该方法计算得到得是一种soft alignment,可以融入整个NMT框架,通过反向传播算法求梯度以及更新参数
将Attention机制引入NMT中,可以使得Decoder更多地关注于源语言端部分词,从而缓解了Encoder-Decoder框架中将源语言压缩成固定维度的向量带来的问题
定量分析
作者比较了原始的RNN Encoder-Decoder模型(RNNenc)和由Attention机制改进的模型(RNNsearch),让这两个模型分别在句子最大长度为30和50的训练集上训练,在测试集上翻译结果的BLEU分数与句子长度的关系如下图所示
可以看到,RNNSearch-50对长句子已经相当稳健,几乎不受长句子的影响,而对于RNNsearch-30来说,当句子长度超过30时,分数还是会出现大幅下滑
定性分析
为了从直观上感受Attention机制,作者随机抽取了测试集中的几个句子,将他们的注意力权重采用热图的方式展示了出来
对齐模型结果如上图所示,所选的例子是随机从句长10-20且不包含UNK的结果中采样得到的。横轴对应源语言(English),纵轴对应目标语言(French),对齐权重由灰度值表示:0-黑色,1-白色
通过上图我们可以清晰地看到在生成目标词时,源句中的哪些词被认为更重要。不难看出,输入句子(英语)与输出句子(法语)的词之间的关系在很大程度上是单调的,即权重矩阵近似于单位矩阵,而对于一些输入与输出语言存在的一些不对称的语法现象,Attention机制能够自动跳过一些单词,调节语法顺序,使得输入输出得到正确的软对齐
比起SMT中的硬对齐,软对齐更加灵活,不生硬,同时能自然地处理不同长度地输入和输出,而不是以一种反直觉地方式把一些词映射成NULL。这也是为什么Attention机制能够很好地处理长句子问题,传统的RNNenc在翻译长句子时,翻译的后半段往往会漏掉许多细节,偏离句子的原意,而RNNsearch在翻译长句子的后半段时,不会遗漏那些重要的信息,因为这些信息是即使计算的,而不像RNNenc那样固定不变
总结
虽然神经网络翻译仅仅发展了几年,但其取得的成果已使得统计翻译模型几乎没有了优势,目前看来唯一存在的问题,就是生词问题了
写得太好了!!