与传统的机器翻译相比,基于神经网络的机器翻译方法能够通过统一调参最大化。Encoder-decoder被广泛用于机器翻译,它将一句话的语义信息表示为一个固定长度的向量。然而,这种固定长度的向量可能无法承载句子的全部语义信息,因此如果句子长度过长,那么采用这种方式可能取得较差的性能。
这篇论文的优势在于提出一种attention机制,将align和translate统一了起来。align是指翻译两个句子之间,语义之间的对应关系。translate即生成翻译结果。这种机制通过调参的方式,搜索相关位置,生成对应的单词。
attention机制的本质是,它不是将句子压缩成一个固定长度的向量,而是将其表示为向量序列。然后通过自适应的方法,选择向量集合,预测目标单词。
RNN encoder-decoder
编码器
对于一个encoder的输入是一个向量序列
X
=
(
x
1
,
x
2
,
.
.
.
,
x
n
)
X=(x_1, x_2, ..., x_n)
X=(x1,x2,...,xn),最常用的方法就是RNN:
h
(
t
)
=
f
(
x
t
,
h
t
−
1
)
h(t) = f(x_t, h_{t-1})
h(t)=f(xt,ht−1)
and
c = q ( h 1 , . . . . , h T ) c=q({h_1, ...., h_T}) c=q(h1,....,hT)
其中 h t h_t ht是时间 t t t时的隐藏状态, c c c是基于隐藏状态序列生成的vector,代表句子的上下文。
解码器
对于一个decoder来说,其输入包括上下文向量
c
c
c,所有之前已经预测的单词
{
y
1
,
y
2
,
.
.
.
,
y
t
−
1
}
\{y_1, y_2, ..., y_{t-1}\}
{y1,y2,...,yt−1}。事实上,decoder就是要构建一个联合条件概率:
p
(
y
)
=
Π
p
(
y
t
∣
{
y
1
,
.
.
.
,
y
t
−
1
}
,
c
)
p(y) = \Pi{p(y_t|\{y_1, ..., y_{t-1}\}, c)}
p(y)=Πp(yt∣{y1,...,yt−1},c)
对于RNN而言,对于生成的每个word,应该满足条件概率如下:
p
(
y
t
∣
y
1
,
.
.
.
,
y
t
−
1
,
c
)
=
g
(
y
t
−
1
,
s
t
,
c
)
p(y_t|{y_1, ..., y_{t-1}, c}) = g(y_{t-1}, s_t, c)
p(yt∣y1,...,yt−1,c)=g(yt−1,st,c)
g
g
g是一个非线性的,可能是多层的函数,输出概率
y
t
y_t
yt。每次生成word都要依据上下文向量
c
c
c。
Attention 机制
论文以encoder-decoder为例,引入attention机制。
decoder阶段
定义条件概率:
p
(
y
i
∣
y
1
,
.
.
.
,
y
i
−
1
,
x
)
=
g
(
y
i
−
1
,
s
i
,
c
i
)
p(y_i|y_1, ..., y_{i-1}, x) = g(y_{i-1}, s_i, c_i)
p(yi∣y1,...,yi−1,x)=g(yi−1,si,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
上下文向量依赖于一系列的annotations: ( h 1 , . . . . , h T ) (h_1, ...., h_T) (h1,....,hT),对于每个annotation都包含整个句子的信息,并且主要集中在i位置的单词上。
上下文向量
c
i
c_i
ci是
h
h
h的加权求和:
c
i
=
∑
α
i
j
h
j
c_i = \sum{\alpha_{ij}h_j} \\
ci=∑αijhj
其中
α
i
j
\alpha_{ij}
αij的计算方法如下:
α
i
j
=
e
x
p
(
e
i
j
)
∑
e
x
p
(
e
i
k
)
\alpha_{ij} = \frac{exp(e_{ij})}{\sum{exp(e_{ik})}}
αij=∑exp(eik)exp(eij)
其中 e i j e_{ij} eij通过一个前向的神经网络计算,被称为alignment model:
e i j = a ( s i − 1 , h j ) e_{ij} = a(s_{i-1}, h_j) eij=a(si−1,hj)
注意, i i i对应输出序列, j j j对应输入序列。
encoder阶段
作者采用双向RNN,前向RNN和后向RNN分别在输入 j j j的位置产生了隐藏状态向量 ( h 11 , h 12 ) (h_{11}, h_{12}) (h11,h12),作者将两个隐藏状态向量合并,作为annotation输入到alignment model中。
attention机制如下图所示: