您的位置:首页 > 其它

论文阅读:《Neural Machine Translation by Jointly Learning to Align and Translate》

2017-06-24 08:43 495 查看
这是2015年的一篇会议论文,作者是Dmitry Bandana,KyungHyun Cho,Yoshua Bengio。本文最重要的贡献就是提出了attention机制。下面我先总结每段的要点,然后适当添加自己的解读。

ABSTRACT

神经机器翻译(NMT)里,别人大多用encoder-decoder,我们推测把原句编码到一个固定长度的向量是一个瓶颈,然后我们提出了改进。

1 INTRODUCTION

神经机器翻译是新技术,大多数都是encoder-decoder。一个潜在的问题是把信息都压缩在固定长度的向量,无法对应长句子。为了解决这个问题,我们提出了一个扩展,它同时进行对齐和翻译。每次我们的模型生成新的翻译词,它在原句那些最有可能包含有关信息的位置上进行搜索。

这个方法最重要的特点是,它没有尝试将原句的所有部分编码到固定长度的向量,而是它把原句编码到一序列向量,然后在解码的时候灵活的选用这个序列的子集。

2 BACKGROUND:NEURAL MACHINE TRANSLATION

从统计的角度看,翻译相当于寻找译句 y,使得给定原句 x 时条件概率最大,即 argmaxyp(y|x)。

2.1 RNN ENCODER-DECODER

在Encoder-Decoder框架里,编码器把原句,一个序列的向量 x=(x1,...,xTx),编码到一个向量c。最普遍的方法是用一个RNN:

ht=f(xt,ht−1)

还有

c=q({ht,...,hTx})

解码器用来给定上下文向量c和所有之前预测好的词{y1,...,yt′−1},预测下一个词yt′

。换句话说,解码器定义了翻译 y上的概率分布:

p(y)=∏t=1Tp(yt⎪{y1,...,yt−1},c)

在这里 y=(y1,...,yTy)。有了RNN,每个条件概率都表示成:

p(yt⎪{y1,...,yt−1},c)=g(yt−1,st,c)

在这里g是一个非线性的,多层的函数,st是decoder RNN的隐状态。

解读:到这里编码器和解码器都定义好了,我们的目的就是同时训练编码器和解码器,使得它们能最合适地表征训练数据。换句话说,使得训练好的编码器和解码器最大可能地生成训练数据。这就是极大似然估计的含义。

3 LEARNING TO ALIGN AND TRANSLATE

3.1 DECODER:GENERAL DESCRIPTION

在新的模型结构里,我们定义条件概率为:

p(yi⎪{y1,...,yi−1},x)=g(yi−1,si,ci)

在这里si是RNN i时刻的隐状态,这样计算:

si=f(si−1,yi−1,ci)

值得一提的是,跟之前的不一样,这里每个词yi都有单独的上下文ci。

解读:关键部分来了,在之前的模型里,一句话的每个词都共用一个上下文,但是新的模型是一句话的每个词都有自己的上下文,这就是注意力机制的精髓。上下文是怎么计算的呢?下面讲了。

上下文ci取决于解码器产生的注释序列(h1,...,hTx)。每个注释hi都包含了整个原句的信息,伴随着对原句第i个词周围的关注。下一节会详细解释注释。

上下文向量ci是这些注释的加权和:

ci=∑j=1Txαijhj

每个注释的权重这样计算:

αij=exp(eij)∑Txk=1exp(eik)

在这里

eij=a(si−1,hj)

是一个对齐模型,这个模型衡量了原句的j位置和译句的i位置在多大程度上匹配。对齐模型a作为一个前馈神经网络,跟编码器和解码器共同进行训练。

解读:到这里就呼应题目了——对齐和翻译是同时学习的。学习对齐模型只是手段,目的是完善注意力机制——计算每个翻译词的上下文。下段继续解释对齐模型和权重。

我们可以把计算注释的加权和看成计算期望注释。把αij当做译句词yi由原句词xj翻译而来的概率。概率αij反映了注释hj相对于前一个隐状态si−1在预测下一个状态si和生成yi过程中的重要性。直观上,这在解码器上实现了注意机制。

解读:简单讲,αij越大,翻译第i个词的时候就更应该着重注意原句第j个词。

3.2 ENCODER:BIDIRECTIONAL RNN FOR ANNOTATING SEQUENCES

以往的RNN,都是从句子第一个符号读到最后一个符号。然而,我们想要让注释不仅囊括之前的信息,还要包含之后的信息,所以我们采用双向RNN。

一个BiRNN由向前和向后RNN组成。向前RNN f→从左到右读取原句(从x1到xTx),然后计算一个序列的向前隐状态(h→1,...,h→Tx)。向后RNN f←反方向读取原句,然后计算一个序列的向后隐状态(h←1,...,h←Tx)。

剩下的几章就是实验,结论之类,略掉。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐