导读
本次分享中,我们介绍一下近期的工作,分别以缓解上述三个问题为出发点,提出的三种方法:
1. 我们在基于RNN的编码器上层引入关系网络层,增强模型对源语言的表示学习能力;
2. 我们将立方体剪枝算法应用于NMT解码器中,在达到相同甚至更好翻译性能的情况下,比传统柱搜索算法提升了搜索效率;
3. 在NMT训练阶段,我们以一定的概率从前一步的参考译文词语和模型自身预测出的1-best词语之间采样,1-best词语的确定包括词语级别和句子级别的最优,这样做使模型在训练时尽量考虑测试时的环境。
自我介绍
张文,2010年获得中南大学工学学士学位,专业是计算机科学与技术,2013年获得中国地质大学(北京)硕士学位,专业计算机技术,现在是中国科学院计算技术研究所自然语言处理课题组在读博士生。研究方向为自然语言处理和机器翻译。博士期间以第一作者发表会议CWMT,COLING,EMNLP和ACL会议各一篇,发表国内期刊中文信息学报一篇。
正文
神经网络机器翻译模型(NMT)已经取得非常卓越的效果。然而,仍然存在一些问题和挑战:
1. 基于RNN的NMT模型使用RNN对源端序列进行编码时仅考虑了词语之间的正反顺序信息,忽略了词语与词语之间的关系,并且RNN通常倾向于忘记有用的历史信息,难以捕获语言学中的长距离依赖信息。
我们的方法借鉴了关系网络。Santoro等于2017将关系网络(Relation Network,简称RN)应用于问答系统做关系推导,捕捉两个物体之间的关系。
给定一组对象的序列
RN可以用下列关于对象的组合函数表示
该函数用于推导两个对象之间的关系,其中i和j分别表示序列中第i个和第j个对象,g和f表示带有可训练参数的函数。
我们在NMT的编码器层和注意力层之间引入关系网络层(Relation Network Layer,RNL)
(1) 卷积网络层:捕获词语附近的局部信息
将编码器的输出序列当作对象序列
,对于其中每一个词语表示,窗口大小为k的输入为
卷积层的输出为
(2) 图传播层:学习序列中两两词语之间的关系
我们将第i个词的卷积层表示与序列中所有结点的卷积层表示两两拼接得到
再经过一个多层感知机
给定
,我们得到i个词语的图传播层输出
(3) 多层感知机层:空间维度映射
最后经过一个多层感知机层将每个词的向量表示映射回输入的维度大小
融入关系网络的神经网络机器翻译模型示意图如下:
我们在多个关系网络层之间使用残差连接和密集拼接(Huang等,2017)技术。
我们在NIST中英数据集上的实验结果如下:
我们在WMT’16数据集上与相关工作的实验结果如下:
我们在WMT’17数据集上的实验结果如下:
2. NMT模型的翻译效率仍然比较低,解码器在测试阶段的柱搜索过程中,通常需要在搜索空间和搜索效率(翻译质量和翻译效率)之间进行权衡,因此模型的优势无法得到充分发挥。
Huang, 等2007将立方剪枝算法应用于统计机器翻译的解码器中的方法,使解码器的解码效率得到大幅度提升,同时保证翻译质量基本不变。我们借鉴上述思路,将立方剪枝算法运用于NMT的解码器中,同样在保持译文质量不变的情况下,提升解码速度3~4倍。
(1) 引入立方剪枝算法的NMT解码器
我们使用一个示例来说明引入立方剪枝算法的NMT解码器的一步:
上图展示了立方剪枝搜索算法从第10个柱生成第11个柱的全过程。下面我们对上图进行详细的剖析。为了画图和解释方便,对于柱中每一个存储单元块,我们只在图中记录累积的Negative Log Likelihood (NLL)值和目标端候选词语在词汇表中的索引,例如图中第10个柱中第一个块(6.1,433)中的6.1表示截止到第10步解码序列上累积的NLL值,433表示当前候选词语在目标端词汇表中的索引。假设柱大小为4。为当第10步初始化一个堆之后,我们首先按照目标端词语相同的约束条件将第10个柱中所有块合并同类项,得到两个块组C1和C2,如图中的(a)部分所示,(6.1,433)组成块组C1;(6.5,35)、(7.0,35)和(7.3,35)具有相同的目标端词语35,合并在一起构成另一个块组C2。对于每个组块,我们使用所有块中包含隐状态的按元素平均值作为该组块隐状态向量的近似值,估计下一个步的概率分布和隐状态。合并同类项和做完近似化概率分布扩展之后,每一个组块里所有的块在两个维度均是按照NLL降序排序,如(a)子图所示。然后,每个组块中的左上角的块被推入到最小堆(在从左上向右下的搜索过程中,我们每次向最小堆中推入一个候选项时,最小堆都会根据NLL值将堆中最优的候选(NLL最小的候选)放置在根结点中)中,在从堆中弹出NLL最小的块之后,我们计算并存储该块的精确NLL,然后将组块内位于该块右边和下边的块(如果有的话)再推到最小堆中。结合图中所有步骤说明如下:
(a) 将位于两个组块左上角的两个元素推入到最小堆中;
(b) 弹出最小块(6.2,674),同时将其右边邻居(8.6,8357)(没有下边邻居)推入堆中;
(c) 弹出最小块(7.3,8),将其右边邻居(7.7,880)和下边邻居(7.8,8)推入堆中;
(d) 弹出最小块(7.7,880),并将其右边邻居(9.8,29)和下边邻居(8.2,880)推入堆中;
(e) 弹出最小块(7.8,8),然后将其下边邻居(8.1,8)(右边邻居已经在堆中)推入堆中。
一旦有块被弹出,我们就用实际的隐状态重新计算出精确的NLL并保存。到第(e)步,已经有4个块从两个组块C1和C2中弹出,我们按照它们精确的NLL降序排列之后构建第11个柱。虚线方框表示4个被选择进入第11个柱的词语级别的候选。
打个形象的比喻,引入立方剪枝算法的柱搜索就好比是海浪在从左上不断地向右下“蔓延”。我们将上述算法称为原始立方剪枝(Naive Cube Pruning,简称NCP)算法。
(2) 加速的立方剪枝算法
在立方剪枝算法的每个步骤中,我们首先要根据某些约束条件将类似的候选块合并在一起组成一个或多个组块,然后使用每个组块中所有块里包含的隐状态向量按元素的平均值作为该组块的松弛隐状态,估计出下一步的近似概率分布。为了进一步提升解码效率,我们还尝试仅根据每一个组块中排名第一的块对应的隐状态向量(上面示意图中每个组块的第一行)计算该组块对应的近似概率分布,后序步骤与NCP完全相同。
由于第一个组块中排名第一的块是质量比较高的,基于每个组块预测的近似概率分布也与标准柱搜索算法非常相似。
我们称这种算法为加速的立方剪枝(Accelerated Cube Pruning,简称ACP)算法。
同样,每个组块只需要一次前向计算。因此,它可以节省更多的搜索空间并进一步降低解码器的计算复杂度。
与NCP不同,ACP在从堆中弹出块之后,不用去计算精确的NLL,仍然使用近似的NLL继续搜索,所以比NCP又减少了一部分运算。
(3) 自归一化(Self-Normalization,简称SN)
自归一化是Devlin等在2014年提出的,他们在神经网络语言模型任务上提高了解码速度并取得了很好的效果。设计自归一化的目的是直接使用输出层产生的模型分数(未归一化之前)作为目标端词汇表上的概率分布,而不用进行归一化操作。根据归一化函数的定义,对于观察到的参考译文序列
交叉熵损失可以写成:
我们将softmax归一化操作中的分母
标记为Z。根据Devlin等,2014的工作,我们将CE损失函数修改为:
训练过程最小化上述损失函数值,会确保log Z近似为0,也就是说,模型一旦收敛,Z会逼近于1。在训练模型时,我们根据经验确定alpha的值。因为Z趋近于1,所以在测试时,可以忽略softmax函数的分母Z直接使用第j步的模型输出分数近似第j时间步目标端词汇表上的概率分布:
我们使用NIST中英数据集进行实验,使用NIST03作为测试集,GPU上的解码效率对比结果如下面两个图所示:
左图中,不使用自归一操作时,ACP显著加快了解码,不过损失了0.5个BLEU值。
右图中,使用自归一时,与NBS相比,ACP只花费1/3的时间,在柱大小为30时达到最好。
当柱大小为30时,ACP SN比NBS SN快3.3倍。
在CPU上的解码效率对比结果如下面两个图:
CPU上的结果与GPU类似。不论使用SN与否,与NBS-SN相比,ACP比NCP的解码效率有显著提升。当柱大小为30时,ACP SN比NBS SN快3.5倍,同时得到略好的翻译质量。
GPU上的解码时间(不考虑翻译质量)对比结果如下图所示:
从上面两个图可以看出,在不考虑质量的情况下,当柱大小为40时,ACP SN加速解码器3.8倍。
CPU上的解码吕(不考虑翻译质量)对比结果如下图所示:
从上面两个图可以看出,与GPU上的结果相似,在不考虑翻译质量的情况下,当柱大小为40时,ACP SN加速解码器4.2倍。
3. NMT模型大多是自回归的,即以源语言句子和目标端的历史序列作为条件逐词生成整个目标译文。在训练阶段,模型以目标端参考译文的历史序列作为上下文进行预测;而在测试阶段,模型必须从头开始生成整个序列,不得不使用自身预测出来的历史序列作为上下文预测下一个词。这种训练和测试输入上下文词汇的差异会不断地导致错误累积。此外,词级的训练过程要求所生成的序列与参考译文序列之间严格匹配,这导致对不同但合理的翻译的过度校正。
NMT训练时仅使用前一步的参考词语做预测,我们引入模型本身预测的词语,结合参考词语。模型自身输出的词语称为1-best词语,1-best词语包括词级候选(Word-level Oracle,简称WO)和句级候选(Sentence-level Oracle,简称SO)。在训练过程中,我们在参考译文词语和1-best词语之间进行伯努利采样,即以概率p采样参考词语,以1-p的概率采样1-best词语。整个过程的示意图如下所示:
我们使用贪婪搜索每个步骤概率分布中概率最大的词语作为词级候选,如下图所示:
对于句级候选,我们使用柱搜索算法得到BLEU值最大的译文候选,但使用柱搜索算法得到的译文长度与参考译文可能不一样,所以我们使用强制解码约束候选译文长度与参考译文长度相同。
然后选择每一步的词语作为句级候选:
我们同时在模型输出向量上加入冈贝尔噪声后再进行归一化,如下图所示:
计算公式如下(噪声是以均匀分布计算得到):
另外,模型训练初始采样参考词语的概率为1,加速收敛。随着模型逐渐收敛,更频繁地采样1-best词语,概率p是关于训练轮次的递减函数:
NIST中英数据集上实验结果如下表所示:
消融实验在NIST中英数据集上的结果如下表所示,其中BLEU值为所有测试集上平均值:
WMT’14的英德数据集上的实验结果如下表所示:
开发集上的BLEU曲线以及训练集上的Loss函数如下面两个图所示,其中包含基线RNNsearch模型和我们所提出的模型。
我们使用开发集上BLEU最高的模型进行测试,从上面左图可以看出,RNNsearch模型在第7轮达到最好的BLEU值。但右图中训练集上的loss依然在降,我们认为这是基线模型所存在的训练过拟合问题,我们使用提出的采样方法和冈贝尔噪声虽然收敛慢,但可以缓解过拟合问题。