背景
- seq2seq learning in machine translation:
both input and output are sequences with different lengths - 一般的机器翻译模型可以用由encoder 和 decoder组成的RNN,encoder将原语言的词编码成向量,decoder把encoder编好的context向量解码成目标语言。随着decoder长度增加,信息衰减的严重程度也会增加。
- 在decoding过程中虽然可以把context作为decoder的每个hidden state,以此来避免信息衰减,但这样会导致翻译每个字时考虑的信息是一样的,因为直觉上来说,在翻译每个字时我们所关注的地方应该是不一样的。attention机制就是为了解决这个问题而诞生的
encoder-decoder结构
Attention机制
- Attention就是一个软查询过程。我们假设decoder中在第t个step下,hidden state是
h
1
h_1
h1让他与每一个encoder的hidden state
h
~
\tilde h
h~ 做inner product计算余弦相似度,即attention权重
α
\alpha
α。得到attention权重,剩下的事情就是加权累加
h
ˉ
t
=
∑
i
T
α
i
h
~
i
\bar{h}_{t} = \sum_{i}^{T} \alpha_i\tilde h_i
hˉt=∑iTαih~i 。
神经机器翻译过程图解
Encoder
encoder是一个RNN,输入为原语言待翻译的序列,每个RNN time step 根据上一个timestep的hidden state 和当前输入的input 计算出当前对应的output 和 hidden state
基于attention的seq2seq模型在encoder传递给decoder的数据上与传统的seq2seq模型只传递最后一个hidden state相比,会把encoder每个time step产生的hidden state都传递给decoder供后续attention运算使用。
Decoder
下面来看解码过程,decoder的输入为目标序列的word embedding,但是不同点在于第一个time step会输入一个特殊符号,decoder的RNN 根据初始化的hidden state和这个特殊符号input计算出hidden state,然后再用decoder的hidden state和encoder的hidden state做attention运算,以此决定每一步应该最大概率输出哪个字。
之后的每一个time step decoder会把上一步输出的目标语言的word embedding作为输入。