简介部分:
- 对于机器翻译,之前的做法就是把输入压缩成一个向量,然后对这个encode后的向量进行decode,这种方法处理长句子比较难,尤其当句子的长度长于训练集中的语料库
- 本问提出的模型,当翻译生成一个词语的时候,我们在输入的序列中找到与目标词y(t)最相关的信息,模型预测目标基于这些位置信息的上下文的语义向量 以及 已预测出来的词(y1,y2,...,y(t-1) ) 共同进行。
- 本文提出的模型与encoder-decoder 最大的区别在于,encoder-decoder模型在于把全部输入的序列压缩成一个固定的向量,而本文的提出的模型是选取输入序列中的部分对目标词进行预测
举个中译英的例子:
我的/名字/叫做/推推
my name is tuitui
如果,我们要将 “名字” 翻译 成 “name” ,输入序列中 “名字” 对于翻译结果 name,更加重要一些,这个就是attention的意思,注意力,集中在sequence的部分
背景:神经机器翻译
- 目标是argmax p(y|x) , 有些文章提出了基于RNN(LSTM) 的模型取得了显著的效果(state-of-the-art)
- RNN encoder-decoder模型
- 隐藏层单元部分,例如f 为LSTM
- encoder部分,例如 q({h1,h2,..,hT})=hT,即取最后一个隐藏单元作为输入向量的压缩结果
- decoder部分,根据c 和 先前预测出的y1,y2,....,yt-1 来预测 yt ,即,g是一个非线性函数,st 是隐藏单元
- 对于生成一个句子来(y1,y2,...,yT)说,即
3. 校准和翻译 - 重点,本问提出的模型,有一些创新点
- encoder 部分:
采用了双向RNN进行编码,一个词的前后信息都考虑进去
- decoder部分:
上面的图看着还是有点模糊,我重新画一个
我画的图,是基于 input sequence 的长度为4,预测目标y1的过程
可以看到y1 由 c1,y0,s1 构成
s1 由 s0,y0,c1构成
c1 由 经过softmax 后的 e11,e12,e13,e14构成
注意 c的下标 和 目标y的下标是一致的 ; eij 表示 输入部分第j个hidden unit 对 输出第j个目标的重要性,当然,中间会涉及si-1
si 来传递到yj
具体公式文章中是如下说明的
模型的一些细节
- RNN的结构,采用了 gated hidden unit 结果,这个结构跟LSTM有点类似,作者也是受到LSTM启发得来的,结构如下
reset gate
update gate
主要用于计算hidden unit
其中
一些说明:
当reset gate 趋近0的时候,就会忽略 h(t-1),丢掉一些不相关的信息
当update gate 用于记忆long-term信息
每个hidden unit 是有独立的reset 和update gate
- align 模型
其中 v,w,u 都是权重矩阵,其中Ua*hj 可以预先算好,因为和Si 没有关系呢
- decoder 部分的si ,相比encoder部分的hiddencell, 多了一个Ci
初始的s0 为
目标函数
refer:
https://arxiv.org/pdf/1409.0473.pdf NEURAL MACHINE TRANSLATION BY JOINTLY LEARNING TO ALIGN AND TRANSLATE
https://arxiv.org/pdf/1406.1078.pdf Learning Phrase Representations using RNN Encoder–Decoder for Statistical Machine Translation