Neural Machine Translation by Jointly Learning Align and Translate【NMT】【Attention】【待完成~】

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,hj1)

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} hjRn是第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,...,yi1的条件下,用来预测下一个输出 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=1Tp(yty1,y2,,yt1,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(yty1,y2,,yt1,c)=g(yt1,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(yiy1,,yi1,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(si1,yi1,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} si1和输入序列的每个位置 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=1Txα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(si1,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=[hj T,hj T]。这样每个注释 h j h_j hj都包含了在它之前的单词的信息,又包含了在它之后的单词的信息, h j h_j hj将会专注于在 x j x_j xj周围的单词。

参考链接:
https://zhuanlan.zhihu.com/p/32481747

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值