Effective Approaches to Attention-based Neural Machine Translation

Effective Approaches to Attention-based Neural Machine Translation

总体介绍

这篇文章不得不说写的非常好,写的结构清晰,逻辑清楚,内容讲得也非常通俗易懂。总体来说,这篇文章在神经机器翻译的基础上提出了两种attention的结构,attention的机制可以保障在翻译时每个字词的输出是和输入是对齐的(我的理解就是和源输入是保持一致的)。一种是global attention,一种是local attention。global指的是对齐时会考虑到所有的输入序列,而local则会只考虑部分输入序列。文章还提出了一些训练数据的trick,比如input-feeding approach,文章最后给出了自己做的各种实验的结果,进行了比对,对两种attention机制以及对齐方式进行了实验,local一般来说会有较为出色的结果。

Two Attention Architecture

  1. Attention-based Models

    1. 传统的RNN ecoder-decoder模型中,decoder时最上层的rnn单元会直接输出$h_t​$,根据$h_t​$再接一层网络,形成最终的输出$y_t​$。这种传统的模型,在每个time step输出结果时,没有考虑到整个输入序列的情况,仅仅依赖encoder的最后一个hidden state,而对于比较长的句子,则可能不能完全代表整体的语义;
    2. attention机制会根据当前time step的hidden state $h_t$,再跟encoder的outputs进行词对齐,生成context vector $c_t$,最后的输出$y_t$由$c_t$和$h_t$组成。
    3. 总体来说,attention model的特点就是最后的输出$y_t$不仅仅由$h_t$决定,还需要考虑context vector $c_t$。而$c_t$的不同生成方式就构成了不同的attention architecture。
  2. global attention

    1. global attention模型下$c_t$会参考所有的encoder hidden states
    2. alignment vector $\alpha_t$
      • score function
        • $h_t^T \mathop{h_s}\limits^-$—- dot
        • $h_t^TW_a \mathop{h_s}\limits^-$ —- general
        • $v_atanh(W_a[h_t; \mathop{h_s}\limits^-])$ —— concat
        • $\alpha_t = softmax(W_ah_t)$ 作者最开始使用的score function,仅仅使用了target hidden state去计算
    3. 和Bahdanau提出的模型的比较(更多的是简化和泛化)
      • hidden state的使用
        • 本文encoder和decoder部分只使用了最顶层的LSTM单元的hidden state
        • Bah文中猜测encoder用的是双向LSTM,对forward和backward的hidden state进行了拼接,猜测decoder部分是单层单向LSTM,没有对state进行拼接。
      • 计算路径(是否可以理解为context vector的计算)
        • $h_t - > \alpha_t - > c_t - >\mathop{h_t}\limits^-$ 本文的计算路径
        • $h_{t-1} - > \alpha_t - > c_t - > h_t$ 从前一个hidden state开始计算,计算量会更大(具体怎么计算的需要参考Bah原始论文)
      • 具体不同 luong和Bahdanau不同
        • luong使用了encoder和decoder部分的hidden_state计算context;而Bah只使用了encoder部分的hidden_state,将forward和backward的hidden_state concat
        • 计算context的不同
          • luong直接使用decoder的hidden_state和encoder部分hidden_state计算context,和decoder的hidden_state进行concat过一层网络输出
          • Bah使用t-1时刻的decoder的hidden_state和concat的state计算context(这个地方有个疑问,到底用不用到decoder的hidden_state计算context),然后和t-1时刻的decoder的hidden_state进行concat输入到t时刻
        • context的分数计算方式
          • luong有三种
          • Bah只会concat
  3. local attention

    1. global的缺点很明显,在生成每一个$y_t$的时候需要考虑到所有的input words,这种计算是非常expensive的,而且对于长句子的处理来说非常不友好。
    2. 灵感来自于图片描述生成任务
      • soft attention:会考虑图片中所有的patches
      • hard attention:只会考虑图片中的一个patch;需要降维和增强学习等技术来辅助训练
    3. 每次生成context vector时,会选取一个窗口,用窗口内的encoder hidden states来计算 $c_t$。具体的,每次计算时,需要选取一个 $p_t$,这个是窗口的中心,那么窗口就是,D一般由经验指定;然后就可以根据前面提出的计算context vector的方式进行计算。针对 $p_t$ 生成规则不同,又分为两种模型
      • Monotonic alignment 单调对齐:即简单地设置$p_t = t$
      • predictive alignment 预测对齐 $p_t$由模型预测得出
        • S为encoder max-time,因为sigmod $\in[0,1]$,所以可以得出某个位置
        • alignment weights 生成时引入了高斯分布,令 $\sigma = \frac{D}{2}$
    4. 与Gregor的selective attention机制(用于image generation task)非常像,但是该模型选择图片patch时会同时有变化的position和zoom,而本文使用的是相同的zoom(D)

Trick

  1. input-feeding approach
    1. 每次字词生成的时候需要知道之前的生成情况,传统的机器翻译模型会在生成当前词的时候考虑到那些词汇已经被翻译过。
    2. 本文将上一次的attention与当前的input进行concat,然后再进行输入达到了考虑之前情况的效果。

Experiment

  1. 模型使用的technology
    1. reverse 猜测是双向LSTM
    2. dropout
    3. global attention
    4. local-p attention
    5. feed input
    6. unk replace
  2. 结论
    1. dot function 在global attention中使用会取得较好的效果
    2. general function在local attention中会取得比较好的效果
    3. 总的来说,使用predictive position的local attention效果是最好的
    4. 对于alignment quality,可以使用AER(alignment error rate)来衡量,发现local attention model的AER会更低一些。

应用

可以应用到自己翻译模型中的点

  1. 看一下tf中luong attention是实现的哪一种方式,可以考虑尝试local attention
  2. unk word的处理
  3. 一些参数的调节,包括字典词数的选择
  4. bucket的选择batch的方式