这篇是神经机器翻译(Neural Machine Translation, NMT)的代表性论文,指出encoder-decoder将源语言句子压缩成一个固定维度的向量是造成性能瓶颈的主要原因,并提出了基于Attention的模型,有效地处理较长的句子。

Motivation

目前大多数神经机器翻译模型都是基于encoder-decoder的,而且是将源句子encode成一个固定大小的向量。这篇论文认为固定大小的向量会成为性能的瓶颈,特别是句子长度比训练集中的句子还要长的时候,Cho et al. (2014b)也表明,当句子长度增加时,RNNenc的性能会急剧下降。于是这篇论文提出了基于Attention的模型,能够有效地处理较长的句子。

RNN Encoder-Decoder

在encoder-decoder框架中,encoder读入输入序列\(\textbf{x} = (x_1, \cdots, x_{T_x})\)并将其encode成向量\(c\)。最常用的方法是使用RNN使得

\[h_t = f(x_t, h_{t – 1})\]

\[c = q(\{h_1, \cdots, h_{T_x}\})\]

其中\(h_t \in R^{n}\)是时间\(t\)的隐藏状态,\(f\)和\(q\)都是非线性的函数。

decoder通常是给定上下文向量\(c\)和之前预测过的单词\(\{y_1, \cdots, y_{t^\prime – 1}\}\),预测下一个单词\(y_{t^\prime}\):

\[p(\textbf{y}) = \sum_{t = 1}^{T} p(y_t | \{y_1, \cdots, y_{t^\prime – 1}\}, c)\]

其中\(\textbf{y}=(y_1, \cdots, y_{T_y})\),

\[p(y_t | \{y_1, \cdots, y_{t – 1}\}, c) = g(y_{t-1}, s_t, c)\]

其中\(g\)是一个非线性的输出\(y_t\)的概率的函数,可能还是多层的,\(s_t\)是RNN的隐藏状态。

Learning to Alignment and Translate

本论文提出了一种新的结构,使用双向RNN作为encoder,decoder在decode翻译的过程中模拟搜索源句子。

Decoder

在\(p(\textbf{y})\)的方程中,我们定义每个条件概率为:

\[p(y_i | \{y_1, \cdots, y_{i – 1}\}, x) = g(y_{i-1}, s_i, c_i) \]

其中\(s_i = f(s_{i – 1}, y_{i – 1}, c_i)\)是RNN在时间\(i\)的隐藏状态。需要注意的是不同于之前的encoder-decoder方法,对于每一个\(y_i\),这里概率的条件是一个不同的上下文向量\(c_i\)。\(c_i\)依赖于标注序列\(h_1, \cdots, h_{T_x})\),每一个\(h_i\)包含整个序列的信息,并且关注与第\(i\)个单词周围的部分。

\[c_i = \sum_{j = 1}^{T_x} \alpha_{i j}h_j\]

\[\alpha_{i j} = \frac{exp(e_{i j})}{\sum_{k = 1}^{T_x} exp(e_{i k})}\]

\[e_{i j} = a(s_{i – 1}, h_j)\]

其中\(e_{i j}\)是一个对齐模型,用来衡量目标端的第\(i\)个词和源端的第\(j\)个词的匹配程度。

Encoder

为了使得每个单词的标注包含前面和后面单词的信息,本论文使用了双向RNN,即\(h_j = [\overrightarrow{h_j^T};\overleftarrow{h_j^T}]^T\)。

Experiments

数据集使用的是WMT ’14的English-French的平行语料库。训练使用SGD+Adadelta,训练结束后使用beam search找到概率最大的翻译。

结果如下图所示,其中-50和-30分别表示训练集中句子最长的长度,可以看到随着句子长度的增加RNNsearch更robust,特别是RNNsearch-50在句子长度大于50的情况下还没有明显的下降。