《Effective Approaches to Attention-based Neural Machine Translation》—— 基于注意力机制的有效神经机器翻译方法

《Effective Approaches to Attention-based Neural Machine Translation》

  • 基于注意力机制的有效神经机器翻译方法;
  • 作者:Minh-Thang Luong(第一作者);
  • 单位:Stanford University;
  • 会议:EMNLP 2015;(NLP三大顶会:ACL、EMNLP、NAACL)

一、论文结构总览

  • Abstract:基于注意力机制的神经机器翻译模型是一种有效的方法,但是目前关于注意力机制模型结构的文章还比较少,本文提出了两种简单但是有效的注意力模型,能够达到很好的翻译效果;
  • Introduction:基于attention的神经机器翻译模型是一种简单并且有效的翻译方法,但是关于这种方法的研究还比较少,本文提出了两种新的注意力模型结构,这两种结构非常简单并且达到了很好的效果;
  • Neural Machine Translation:简单介绍神经机器翻译方法以及形式化表示;
  • Attention-based Models:详细介绍本文的两种注意力机制模型;
  • Experiment Settings:在WMT14英语到德语上的实验结果;
  • Analysis:对实验结果以及一些实验超参的分析;
  • Conclusion:对全文进行总结;

二、论文背景知识

2.1 Seq2Seq模型

  • Seq2Seq结构优点:
    • End2End模型,搭建和训练都非常简单;
    • 符合人类翻译的直觉,即阅读源语言的一句话->明白意思->翻译成目标语言的一句话;
  • Seq2Seq结构缺点:
    • Encoder将长句压缩成一个向量很难;简单理解就是一个向量很难将输入文本的信息进行详细表示;
    • Decoder解码的时候也会遗忘Encoder的信息,简单理解就是随着Decoder的进行,编码器输出所附带的信息会越来越少;

在这里插入图片描述

上图中,蓝色部分为Encoder编码器,红色部分为Decoder解码器;编码器的作用是将源语言的一句话编码成向量,提取源语言的语义信息;解码器利用编码器得到的向量,解码器将其解码为目标语言对应的文字;

在编码器和解码器中使用的特征提取器可以是CNN,RNN或者Transformer;在解码的时候解码器的当前输入需要将前一时刻解码得到的文字(比如X)作为输入,再对当前文字进行预测,表示当前要解码X之后的单词;图中的表示End Of Sentence;

2.2 Seq2Seq模型改进

  • Decoder会遗忘Encode的信息,改进方法为将Encoder的输出向量送到Decoder的每一个时间步;该方法提出于论文《Learning Phrase Representations using RNN Encoder-Decoder for Statistical for Statistical Machine Translation》
  • 上述论文还是无法解决Encoder很难压缩长句的问题;

在这里插入图片描述

  • 为了解决Encoder很难压缩长句的问题,论文《Neural Machine Translation By Jointly Learning to Align and Translate》借助对齐的思想,翻译到某个词时,从源语言中找相关的词,让翻译更加简单;
    在这里插入图片描述
    如上图,简单来说,假设解码器要翻译 y t y_t yt,编码器部分可以获得编码器中每个词的隐向量表示 h i ⃗ \vec{h_i} hi ,通过使用注意力机制获取编码器中对解码影响较大的编码器向量;

2.3 注意力机制简介

在这里插入图片描述
注意力机制包含三要素:Query、Key、Value;通过Query和Key做內积得到注意力权重 [ w 1 , w 2 , . . . , w n ] [w_1,w_2,...,w_n] [w1,w2,...,wn],将权重做softmax处理变为和为1的概率分布 [ α 1 , α 2 , . . . , α n ] [\alpha_1,\alpha_2,...,\alpha_n] [α1,α2,...,αn];最后将 [ v a l u e 1 , v a l u e 2 , . . . , v a l u e n ] [value_1,value_2,...,value_n] [value1,value2,...,valuen] [ α 1 , α 2 , . . . , α n ] [\alpha_1,\alpha_2,...,\alpha_n] [α1,α2,...,αn]做加权求和得到注意力向量;

2.4 NMT模型

神经机器翻译形式化表示:

在输入源语言句子的条件下预测目标句子: log ⁡ p ( y ∣ x ) = ∑ j = 1 m log ⁡ p ( y j ∣ y < j , s ) \log p(y \mid x)=\sum_{j=1}^{m} \log p\left(y_{j} \mid y_{<j}, s\right) logp(yx)=j=1mlogp(yjy<j,s)公式中的s表示源语言句子, y j y_j yj表示要翻译的第j个词, y < j y_{<j} y<j表示已经翻译的目标语言的前 j − 1 j-1 j1个词;

我们的目标是将目标语言句子的m个词的概率进行相加使得整体得到的值最大;

通过softmax生成最终预测词的概率: p ( y j ∣ y < j , s ) = softmax ⁡ ( g ( h j ) ) p\left(y_{j} \mid y_{<j}, s\right)=\operatorname{softmax}\left(g\left(\boldsymbol{h}_{j}\right)\right) p(yjy<j,s)=softmax(g(hj))公式中的 g ( ⋅ ) g(·) g()是一个非线性变换,通过softmax得到预测为某个词的概率,选择概率最大的词作为预测词; h j h_j hj为当前词对应的循环神经网络的隐藏向量;

最终的交叉熵损失函数为: J t = ∑ ( x , y ) ∈ D − log ⁡ p ( y ∣ x ) J_{t}=\sum_{(x, y) \in \mathbb{D}}-\log p(y \mid x) Jt=(x,y)Dlogp(yx)该损失函数的目的是使得实际词被预测出现的概率值最大化;

三、本论文做的工作

  • 注意力机制是否需要使用源语言所有的词来做注意力机制;基于这个问题,本论文提出了基于全局的注意力机制模型和局部的注意力机制模型;
  • 如何得到更好的Query来代表已翻译的词,进而引出输入流问题,这也是我们要讨论的问题;

四、论文研究成果及意义

  1. 增量实验:论文提出的两种模型表现都非常好;
    在这里插入图片描述
    如上图,增量学习就是,最开始实验Base的实验效果,接着在Base加上新的功能,如reverse;然后再加上dropout等;

    这里注意一下reverse的作用,reverse就是将源句子进行翻转,开头部分变为结尾部分,这样做的目的是在编码器开始时能够得到更多关于源句子开头部分的信息,能够在解码器开始解码时获得更准确的解码单词;

    消融实验,简单来说就是,基础模型为Base+A+B+C,逐渐消除模型的一部分,如消去C,则模型变为Base+A+B等等;

    图中的PPL是困惑度,BLEU是机器翻译效果的评价指标;

论文研究意义

  • 提出了两种新的注意力机制模型,采用更简单的方法得到了更好的效果;
  • 极大地推动了注意力机制的发展,目前注意力机制用于自然语言处理的文本分类、对话、阅读理解等各个场合;

五、模型详解

在这里插入图片描述

5.1 Luong模型整体流程

(1)源语言句子:[batch_size,sequence_length];目标语言句子:[batch_size,sequence_length];
(2)源语言句子经过源语言词嵌入矩阵,维度变换为:[batch_size,sequence_length,embedding_size];
(3)源语言句子输入到Encoder部分的LSTM模型中,Encoder最后输出由两部分组成:

  • 第一部分为Encoder_output,维度为:[batch_size,sequence_length,hidden_size],hidden_size为LSTM的隐藏层的维度,如上图所示,我们用 h ˉ s \bar{h}_s hˉs表示Encoder_output;这部分将用于计算注意力权重,然后通过加权计算得到Encoder部分的上下文向量,其计算方式如下所示: a t ( s ) = align ⁡ ( h t , h ‾ s ) = exp ⁡ ( score ⁡ ( h t , h ‾ s ) ) ∑ s ′ exp ⁡ ( score ⁡ ( h t , h ‾ s ′ ) ) \begin{aligned} \boldsymbol{a}_{t}(s) &=\operatorname{align}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right) \\ &=\frac{\exp \left(\operatorname{score}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right)\right)}{\sum_{s^{\prime}} \exp \left(\operatorname{score}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s^{\prime}}\right)\right)} \end{aligned} at(s)=align(ht,hs)=sexp(score(ht,hs))exp(score(ht,hs))上述公式中的 h ˉ s \bar{h}_s hˉs为Encoder_output,维度为[batch_size,sequence_length,hidden_size], h t h_t ht为Decoder中每一个输入(维度为[batch_size,1,embedding_size])经过LSTM的输出(Decoder_output),其维度为[batch_size,1,hidden_size];得到的注意力权重 a a a的维度为[batch_size,sequence_length];基于注意力权重可以计算得到Encoder部分的上下文向量 c t c_t ct c t = ∑ t = 1 T a t h ˉ s t c_t=\sum_{t=1}^Ta_t \bar{h}_{s_t} ct=t=1Tathˉst
  • 第二部分为Encoder_hidden,Encoder_hidden由两部分组成,即h和c,两者的维度均为:[batch_size,1,hidden_size];Decoder部分由LSTM组成,这里将Encoder部分的Encoder_hidden作为Decoder部分[h,c]的初始化输入;

(4)在解码部分,Decoder要一个词一个词地进行预测,所以在Decoder解码部分输入到LSTM的输入为[batch_size,1,embedding_size](这里暂时先不考虑input_feeding),其输出由两部分组成,Decoder_output,维度为[batch_size,1,hidden_size],Decoder_hidden,维度为[[batch_size,1,hidden_size],[batch_size,1,hidden_size]];

  • Decoder解码部分得到的Decoder_output,也就是上图中的 h t h_t ht,和Encoder编码部分得到的 h ˉ s \bar{h}_s hˉs计算得到 c t c_t ct之后,使用以下公式得到 h ˉ t \bar{h}_t hˉt h ~ t = tanh ⁡ ( W c [ c t ; h t ] ) \tilde{\boldsymbol{h}}_{t}=\tanh \left(\boldsymbol{W}_{c}\left[\boldsymbol{c}_{t} ; \boldsymbol{h}_{t}\right]\right) h~t=tanh(Wc[ct;ht])得到的 h ˉ t \bar{h}_t hˉt的维度为[batch_size,1,hidden_size], h ˉ t \bar{h}_t hˉt有两个作用:(1)用于预测目标翻译的词: p ( y t ∣ y < t , x ) = softmax ⁡ ( W s h ~ t ) p\left(y_{t} \mid y_{<t}, x\right)=\operatorname{softmax}\left(\boldsymbol{W}_{s} \tilde{\boldsymbol{h}}_{t}\right) p(yty<t,x)=softmax(Wsh~t)(2)用于input_feeding,简单来说,将其和Decoder的输入进行拼接,上面说过Decoder部分的输入为[batch_size,1,embedding_size],和 h ˉ t \bar{h}_t hˉt进行拼接之后输入的维度变换为[batch_size,1,embedding_size+hidden_size];

5.2 Luong NMT模型——全局注意力机制

在这里插入图片描述

原理:使用源语言全部信息做注意力机制;

通过Query和Key求解每个词的权重: a t ( s ) = align ⁡ ( h t , h ‾ s ) \boldsymbol{a}_{t}(s)=\operatorname{align}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right) at(s)=align(ht,hs) = exp ⁡ ( score ⁡ ( h t , h ˉ s ) ) ∑ s ′ exp ⁡ ( score ⁡ ( h t , h ˉ s ′ ) ) =\frac{\exp \left(\operatorname{score}\left(h_{t}, \bar{h}_{s}\right)\right)}{\sum_{s^{\prime}} \exp \left(\operatorname{score}\left(h_{t}, \bar{h}_{s^{\prime}}\right)\right)} =sexp(score(ht,hˉs))exp(score(ht,hˉs))Loung NMT模型提出的Global Attention首先计算得到当前词的隐藏输出 h t h_t ht,然后基于 h t h_t ht和源语言句子每个词的隐藏向量 [ h 1 , h 2 , . . . , h s ] [h_1,h_2,...,h_s] [h1,h2,...,hs]得到注意力权重;

score的计算方式有三种: score ⁡ ( h t , h ‾ s ) = { h t ⊤ h ‾ s dot h t ⊤ W a h ‾ s general v a ⊤ tanh ⁡ ( W a [ h t ; h ‾ s ] )  concat  \operatorname{score}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right)=\left\{\begin{array}{ll} \boldsymbol{h}_{t}^{\top} \overline{\boldsymbol{h}}_{s} & \text {dot} \\ \boldsymbol{h}_{t}^{\top} \boldsymbol{W}_{\boldsymbol{a}} \overline{\boldsymbol{h}}_{s} & \text {general} \\ \boldsymbol{v}_{a}^{\top} \tanh \left(\boldsymbol{W}_{\boldsymbol{a}}\left[\boldsymbol{h}_{t} ; \overline{\boldsymbol{h}}_{s}\right]\right) & \text { concat } \end{array}\right. score(ht,hs)=hthshtWahsvatanh(Wa[ht;hs])dotgeneral concat 上述公式中的general中的 W a W_a Wa是可学习参数,相当于给 h ˉ s \bar{h}_s hˉs做线性变换再进行点乘处理;

concat公式中, W a W_a Wa v a v_a va都为可学习参数;

这里简单分析一下dot、general、concat之间的区别

  • 使用点乘计算的好处是模型简单,没有额外的参数。点乘的方法要求编码器的隐状态和解码器的隐状态维度相同,并强制它们在同一个空间中;
  • general是点乘方法的一个扩展,由于不同语言的隐状态空间可能会存在区别,强行将它们约束在同一个空间中可能并不合适。general方法的本质是在编码器隐状态和解码器隐状态之间做一个线性转换然后计算点乘;
  • concat是将编码器隐状态和解码器隐状态进行拼接得到的向量, W a W_a Wa是二维参数矩阵, v a v_a va是一维参数向量;

这篇论文介绍的全局注意力计算方法和论文《Neural machine translation by
jointly learning to align and translate》提出的全局注意力计算方法不同,这篇论文在计算全局注意力时首先使用编码器和解码器的LSTM顶层的隐藏层状态,然后根据计算路径 h t → a t → c t → h t ˉ h_t\rightarrow a_t\rightarrow c_t\rightarrow \bar{h_t} htatcthtˉ进行计算;

5.3 Luong NMT模型——局部注意力机制

全局注意力机制有一个缺点,就是它必须关注每个目标单词的来源句子的所有单词,这一点代价高昂,并且可能使得翻译更长的序列(如段落或文档)变得非常困难。为了解决这个不足,该论文提出了一个局部注意力机制,该机制选择性地只关注每个目标词源位置的一小部分。

局部注意力是一种介于软注意力机制和硬注意力机制之间的注意力方式,其结构如下图所示:
在这里插入图片描述
局部注意力机制有选择地集中关注一个小窗口内的信息。这种方法的优点是避免了软注意力的昂贵计算,同时比硬注意力方法更容易训练。在具体细节中,模型首先在时间t为每个目标词生成一个对齐位置 p t p_t pt。然后将上下文向量 c t c_t ct作为窗口内源隐藏状态集合上加权平均值,窗口大小为 [ p t − D , p t + D ] [p_t-D,p_t+D] [ptD,pt+D],D是经验性选择的。与全局方法不同,局部对齐向量 a t a_t at的维数是固定的。局部注意力模型具有两种形式:

  1. 单调对齐。简单的设置 p t = t p_t=t pt=t,对齐向量 a t a_t at的定义和全局注意力机制计算方式一样;
  2. 预测对齐,通过下面公式预测对齐位置: p t = S ⋅ sigmoid ⁡ ( v p ⊤ tanh ⁡ ( W p h t ) ) p_{t}=S \cdot \operatorname{sigmoid}\left(\boldsymbol{v}_{p}^{\top} \tanh \left(\boldsymbol{W}_{p} \boldsymbol{h}_{t}\right)\right) pt=Ssigmoid(vptanh(Wpht))公式中, W p W_p Wp v P T v_P^T vPT都是在预测位置的时候学习到的参数:S是源端句子的长度。为了更好地利用 p t p_t pt附近的对准点,设置一个以 p t p_t pt为中心的高斯分布。具体来说,对齐权重现在被定义为: a t ( s ) = align ⁡ ( h t , h ‾ s ) exp ⁡ ( − ( s − p t ) 2 2 σ 2 ) \boldsymbol{a}_{t}(s)=\operatorname{align}\left(\boldsymbol{h}_{t}, \overline{\boldsymbol{h}}_{s}\right) \exp \left(-\frac{\left(s-p_{t}\right)^{2}}{2 \sigma^{2}}\right) at(s)=align(ht,hs)exp(2σ2(spt)2)其中,标准差 σ \sigma σ是根据经验设定的,一般取 σ = D / 2 \sigma=D/2 σ=D/2 p t p_t pt是真实的数字。

在实际应用中,全局注意力机制比局部注意力机制有着更广泛的应用,因为局部注意力机制需要预测一个位置向量 p t p_t pt,而这个位置向量的预测并不是非常准确的,会影响对齐向量的准确率。同时,在处理不是很长的源端句子时,相比于全局注意力并没有减少很多计算量。

猜你喜欢

转载自blog.csdn.net/qq_37388085/article/details/109108483