论文发表于ACL2016,作者为Zhaopeng Tu等,来自华为的诺亚方舟实验室。代码已经开源,见https://github.com/tuzhaopeng/NMT-Coverage
一 问题的提出
现在,基于attention机制的机器翻译模型广泛地应用于各类翻译任务中,但是在该机制下忽略了历史的对齐信息,往往会出现存在过译(一些词被翻译多次)和漏译(一些词没有被翻译)问题。为了解决这个问题,作者在attention机制下进行了改进,提出了coverage-based NMT模型。
具体来讲,使用一个覆盖率向量来记录注意力历史,覆盖率向量作为注意力模型的输入用于调整后续的注意力,可以让神经机器翻译系统考虑更多的未翻译词。
我们先来看一个简单的例子。
可以看到在中英翻译任务中,左图中“关闭”一词翻译了两次出现了过译现象,而“被迫”却漏译。
二 attention模型简单回顾
为了讲述后面的改进,我们首先简单回顾一下attention模型,各位大佬们可以跳过了,请直接看part3。
模型的结构如下图所示:
给定输入句子x=和先前已经生成的单词,则生成yi的概率为:
其中g是非线性函数,而ti是i时刻的解码器状态:
激活函数f(*)为GRU单元,si是i时刻source sentence的抽象表达,就是编码器最后一层隐层状态的加权求和:
其中:
其实就是用来判断yi和hj的匹配程度。在attention模型中,它避免了用一个向量来表示整个源语句。与之相反,解码器每次生成时只选择源语句的部分来关注。但是,注意模型不能充分利用过去的对齐信息。例如,如果一个源单词在过去被翻译,它就不太可能再次被翻译,并且应该被分配一个更低的对齐概率。
三 模型建立
在解决问题时,作者首先关注了基于统计的机器翻译模型(Statistical Machine Translation, SMT)。SMT在解决该类问题时利用了一个coverage vector,它记录了source sentence中每一个词是否被翻译(翻译过该位置1,未翻为0),当向量中的值全为1时,就停止翻译。因此,作者的解决问题的思路就是就是把coverage机制和attention NMT结合起来。
为此,作者提出了coverage-based attention model:
既然还是基于attention模型,那么设计的主要目的是将coverage vecoter和attention vector结合起来,在解码过程中,能够降低那些已经被翻译过的source words的”注意力“,防止它们被再次翻译。其中,最简单粗暴有力量的方式就是直接结合,利用coverage vecoter去调整attention vector,则整个模型可以表示为:
其中:
四 模型实现
作者在实现这个模型时,提出了两种方法,一种是基于语言学的覆盖模型,另一种是基于神经网络的覆盖模型。
1 Linguistic Coverage Model
在i时刻source word xj的coverage vector计算方法如下所示:
Φj是一个预定义的权重,表明由xj预计将产生目标单词的数量。它利用简单的 linguistic heuristic 去迭代更新 coverage vector。这个思想并不是很新,是从前人的工作中总结提取出来的。在此基础上,作者引入Fertility概念,做了一个改进模型。
Fertility: 是word-level SMT中的一个概念,它表示的是在 source sentence 中的某个词对应到 target sentence 中的词的个数。比如还是最开始中的例子,中文”被迫“对应的就是3个词”were forced to“,fertility就是3。利用这个fertility数目去做linguistic coverage model 的归一化。
引入后,Φj由之前直接指定为1改为了如下计算方式:
N是一个预定义的常量,用来表示一个源词可以产生的最大目标词数,σ()为sigmoid函数,Uf为权重矩阵,hj表示(xjl*x)。但是,暂时这个数值只能作为一个hyperparameter,靠手工直接写死,不能随着模型自动学习。(笑不出来.jpg)
2 Neural Network Based Coverage Model
基于神经网络嘛,那么这个coverage vector肯定就是可以通过网络更新的。简单的示意图如下:
Cij变成了一个维度大于1的向量,之前的gupdate(*)变成了一个神经网络,这里采用RNN模型:
具体的讲解可以参看论文,模型简单就不啰嗦了~
五向NMT中引入模型
为了便于引入,他们改写了part2中提到的attention模型:
Ci-1,j是source word xj在i时刻前的覆盖向量,Va属于Rnxd是覆盖模型的权重矩阵,其中n为hidden units个数,d为coverage units个数。
五模型的训练
在训练时,整个模型为端到端的NMT模型,需要学习两部分参数, “original”model的θ(针对encoding RNN, decoding RNN和attention model)以及coverage model的η(针对annotation 和 guidance of attention):
其中对对齐概率和预期的语言覆盖率之间的差异进行惩罚。
六验证实验
实验在汉英翻译任务上进行,用4-gram NIST BLEU评价翻译质量,用alignment error rate (AER)评价对齐质量。为了更好的估计这种软对齐的质量,作者对AER进行了改进,即SER:
其中A是候选的对齐方式,而S和P分别是参考对齐中的确定的和可能的链接,M表示对齐矩阵。
几种模型实验结果对比如下:
首先,即使是没有加入fertility的最简单的linguistic coverage model就已经可以提高1.1个BLEU,可见 coverage vector 的重要性。其次,加入 fertility 后进一步提高。第三,他们发现越是在长句子,尤其是那些含有单句的复杂句时,这种结合效果更好。最后我们看一个比较直观的利用 coverage vector 辅助 attention 后的结果:
七总结
在NMT模型中,过翻和漏翻的现象是很常见的,而且对翻译效果的影响比较大,作者通过对attention模型进行了一些改动一定程度上解决了这个问题,而且论文中真真进行了各种尝试,给作者脑洞打call!!!下一步可以考虑引入coverage向量来尝试解决这类问题~
领取专属 10元无门槛券
私享最新 技术干货