neural machine translation旨在建立和训练一个单独且大的神经网络,读入一个句子然后最大化翻译的性能 输出正确的翻译。最近提出的NMT模型都是encoder-decoder
这种思想,将源句encode为一个fixed-length vector
,然后decode为目标翻译结果。在这篇论文中,作者推测(conjecture)在encoder-decoder结构中使用fixed-length vector
是提升翻译效果的瓶颈。
将所有的源句的信息压缩为一个fixed-length vector的缺点是在处理长句子(尤其是那些比训练语料还要长的句子)时整个神经网络难以涵盖所有的word信息,从而会导致对源句翻译过程中,部分片段的翻译结果和原意思有出入。当句子增长时,如何不使翻译结果恶化,这正是论文研究问题的切入点。
论文就这一点提出让模型自动搜索源句中与当前预测词相关度更大的那部分词,无须将这些词明确地形成一个硬段,同时学习对齐模型和翻译模型。为每个当前词生成一个单独的基于源句中对应位置和上一个预测结果的语境向量。
模型
RNN encoder-decoder 的基本架构
在encoder-decoder结构中,encoder读取源句, X = x 1 , x 2 , . . . , x T X={x_1,x_2,...,x_T} X=x1,x2,...,xT,输出一个上下文向量 c c c,基本方式如下:
h j = f ( x t , h j − 1 ) h_j=f(x_t,h_{j-1}) hj=f(xt,hj−1)
c = q ( h 1 , h 2 , . . . , h T ) c=q({h_1,h_2,...,h_T}) c=q(h1,h2,...,hT)
其中, h j ∈ R n h_j\in{\mathbb{R}^n} hj∈Rn是第i时刻的隐藏状态, c c c是从隐藏状态生成的向量, f , q f, q f,q是某个非线性函数。
decoder在给定上下文向量
c
c
c和所有已经预测出的单词
y
1
,
y
2
,
.
.
.
,
y
i
−
1
{y_1,y_2,...,y_{i-1}}
y1,y2,...,yi−1的条件下,用来预测下一个输出
y
t
′
y_t^{'}
yt′。也就是说目标句的学习可以表示为一个联合概率:
p
(
y
)
=
∏
i
=
1
T
p
(
y
t
∣
y
1
,
y
2
,
…
,
y
t
−
1
,
c
)
p(y)=\prod\limits_{i=1}^{T}p(y_t|{y_1,y_2,\dots,y_{t-1}}, c)
p(y)=i=1∏Tp(yt∣y1,y2,…,yt−1,c)
每个单词的预测基于上下文向量
c
c
c、已经预测出的目标词、当前时刻的状态
s
t
s_t
st。公式如下:
p
(
y
t
∣
y
1
,
y
2
,
…
,
y
t
−
1
,
c
)
=
g
(
y
t
−
1
,
s
t
,
c
)
p(y_t|{y_1,y_2,\dots,y_{t-1}},c)=g(y_{t-1},s_t,c)
p(yt∣y1,y2,…,yt−1,c)=g(yt−1,st,c)
learn to align and translate
论文中的encoder过程由一个双向RNN构成,生成注释序列 h j h_j hj。decoder过程搜索源句所有word,通过对齐模型生成和当前单词对应的上下文 c i c_i ci,然后和普通的RNN类似,建立条件概率模型,逐个预测目标单词。
decoder: general description
在新的模型中,定义条件概率模型如下:
p
(
y
i
∣
y
1
,
…
,
y
i
−
1
,
c
i
)
p(y_i|y_1,\dots,y_{i-1},c_i)
p(yi∣y1,…,yi−1,ci)
其中,
s
i
s_i
si是RNN在时刻
i
i
i的隐状态,
s
i
=
f
(
s
i
−
1
,
y
i
−
1
,
c
i
)
s_i=f(s_{i-1},y_{i-1},c_i)
si=f(si−1,yi−1,ci)
和已有的encoder-decoder结构相比,论文的条件概率模型的特殊之处在于每个目标单词 y i y_i yi分别基于一个对应的上下文向量 c i c_i ci。
上面给出了最终所需要训练的条件概率模型,上面提出独立的上下文向量 c i c_i ci,那么这个向量是基于什么而来的呢?接下来就是详细介绍。
上下文向量依赖于由输入序列映射而来的注释序列
(
h
1
,
…
,
h
T
x
)
(h_1,\dots,h_{T_{x}})
(h1,…,hTx),(encoder部分会说明这个注释序列的含义和生成)。对齐模型
a
a
a 为输入序列的每个位置与输出序列中当前位置的匹配程度进行打分,它依赖于上一个时刻的隐藏状态
s
i
−
1
s_{i-1}
si−1和输入序列的每个位置
h
j
h_j
hj,然后用一个softmax函数将对齐的值归一化,使每个位置的分数限制在区间[0,1],也就是每个位置对当前预测位置的重要程度,用一个概率值表示,即概率权值,全部输入序列位置的概率之和为1。然后,上下文向量
c
i
c_i
ci计算为每个输入序列位置的概率权值与注释乘积之和。上下文向量和概率权值的计算如下:
c
i
=
∑
j
=
1
T
x
α
i
j
h
j
c_i=\sum\limits_{j=1}^{T_x}\alpha_{ij}h_j
ci=j=1∑Txαijhj
α i j = exp ( e i j ) ∑ k = 1 T x exp ( e i k ) \alpha_{ij}=\frac{\exp(e_{ij})}{\sum_k=1^{T_x}\exp(e_{ik})} αij=∑k=1Txexp(eik)exp(eij)
其中 e i j = a ( s i − 1 , h j ) e_{ij}=a(s_{i-1},h_j) eij=a(si−1,hj)
这里作者说道,对齐模型 a a a阶段作为一个前向反馈神经网络,可以同时进行train过程,不像以往的模型,对齐不被作为隐藏变量,这里的对齐模型可以直接计算soft alignment,允许cost function的梯度向后转播。这个梯度可以同用于计算对齐模型和翻译模型。
encoder: BI-RNN for annotation sequences
模型需要得知当前单词前后的信息,所以使用双向的RNN注释每个输入单词,前向RNN按照从
x
1
x_1
x1到
x
T
x
x_{T_x}
xTx的顺序读取输入序列,计算的出前向隐藏层状态序列
(
h
1
→
,
…
,
h
T
x
→
)
(\overrightarrow{h_1},\dots,\overrightarrow{h_{T_x}})
(h1,…,hTx)。然后,反向读入输入序列,计算出后向 隐藏状态序列
(
h
1
←
,
…
,
h
T
x
←
)
(\overleftarrow{h_1},\dots,\overleftarrow{h_{T_x}})
(h1,…,hTx),以某种方式将这两个状态序列拼接,比如
h
j
=
[
h
j
→
T
,
h
j
←
T
]
h_j=[\overrightarrow{h_j}^{\mathsf{T}}, \overleftarrow{h_j}^{\mathsf{T}}]
hj=[hjT,hjT]。这样每个注释
h
j
h_j
hj都包含了在它之前的单词的信息,又包含了在它之后的单词的信息,
h
j
h_j
hj将会专注于在
x
j
x_j
xj周围的单词。