表3 当前实施的解码器
图1 简化的UML类图
3.1 NMT批量解码
预测器框架的灵活性伴随着解码时间的下降而下降。SGNMT提供了两种加速纯NMT解码的方法,特别是在GPU上。Vanilla解码策略揭示了在Block(van Merrienboer et al. ¨ , 2015)中并行处理集束中所有有效假设的集束搜索实现。我们还实现了一次解码多个句子(批量解码)而不是按顺序解码的集束解码器版本。批量解码可能更有效,因为较大批量可以更好地利用GPU并行性。批量解码器实现的关键是:
1. 我们使用运行在单独的CPU线程上的调度器来从多个句子构建大批量的计算(GPU作业)并将它们提供给作业队列。
2. GPU由单个线程操作,通过包含作业的队列与CPU调度程序线程进行通信。这个线程只负责检索作业队列中的作业,计算它们并将它们放入作业结果队列中,从而最大限度地减少GPU计算的停机时间。
3. 另一个CPU线程负责处理在作业结果队列中的GPU上计算的结果,例如,从后验得到n个做好的词。处理后的作业被发送回CPU调度程序,在那里它们被重新组装成新的作业。
这个解码器能够在Stanlberg等人(2016)【Theano 0.9.0, cuDNN 5.1, Cuda 8 with CNMeM, Intel RCore i7-6700 CPU】描述的基于字的NMT模型中,将WMT英语 - 法语测试集news-test2012翻译成Titan X GPU上的newstest2014,每秒911.6字。这种解码速度似乎比用Marian-NMT(Junczys-Dowmunt et al.,2016)等高性能NMT解码器进行顺序解码的速度要快,解码速度为每秒865个字【注意,可比性相当有限,因为即使我们使用相同的梁尺寸(5)和词汇量的大小(30k),我们使用(a)稍微慢GPU(泰坦X和GTX 1080),(b)不同的训练集和测试集,(c)一个稍微不同的网络架构,和(d)的单词而不是子字单位】。然而,批量使用Marian-NMT进行解码要快得多,达到每秒4500字以上【https://marian-nmt.github.io/features/】。我们认为这些差异主要是由于Python中有限的多线程支持和性能,特别是在使用外部库时,与Marian-NMT中高度优化的C 代码相反。由于速度不是SGNMT的主要设计目标,所以我们没有推动更快的解码。请注意,批量解码绕过预测器框架,只能用于纯NMT解码。
与多个标记化级别的模型进行组合
SGNMT允许使用替代的建模单元组来掩盖预测器。不同预测器的标记化方案之间的转换由FST定义。这使得可以通过将来自基于子词单元(BPE)的NMT(Sennrich等人,2016)和基于字符的NMT的基于单词的NMT模型的分数相结合来解码,用FSTs转换字符序列到BPE或单词序列掩盖了基于BPE和基于词的NMT预测器。掩码对解码策略是透明的,因为预测器被一个特殊的包装器(fsttok)替代,该包装器使用掩蔽FST将predict_next()和consume()调用转换为(一系列)具有替代标记项的预测器调用。集束搜索的同步波束变化仅在消耗特殊的字边界符号之后,而不是在每个令牌之后比较竞争假设。这使得即使在使用具有多个级别的标记化模型时,也可以在单词级别组合分数。使用不同的标记化方案进行联合解码有可能结合不同方案的优点:基于字符和BPE的模型能够解决罕见的单词,而基于单词的NMT则可以更有效地对长距离依赖性进行建模。
系统级组合
我们在2.1节中展示如何将NMT集合作为一组NMT预测器来制定。在每个解码步骤中对各个模型评分进行平均。或者,系统级组合将整个句子与每个模型分开解码,并在所有模型上选择最佳评分完全假设。在我们的实验中,系统级组合不如集合有效,但仍然给纯NMT带来适度增益。然而,在单独的解码运行之后,在后处理步骤中选择最佳翻译的简单实现,运行比较缓慢。sepbeam解码策略将系统级组合的运行时间减少到单个系统级别。该策略只应用一个预测器而不是所有预测器的线性组合来扩展假设。单个预测器由父假设联系起来。sepbeam中的初始堆栈包含每个预测器(即系统)的假设,而不是像正常集束搜索那样只有一个假设。我们通过结合Stahlberg等人(2017)使用sepbeam解码器的三种基于BPE的NMT模型,在日英ASPEC测试集(Nakazawa et al.,2016)上报告了0.5 BLEU的中等增益。
迭代集束搜索
由于运行时间取决于事先未知的目标句子长度,所以在时间受限设置中使用正常的波束搜索比较困难,因为很难事先选择正确的集束尺寸。桶搜索算法通过重复执行小集束搜索遍历来避开设置集束大小的问题,直到固定的计算预算耗尽。桶搜索非常快速地产生初始假设,并保持桶中每个长度的部分假设。随后的波束搜索通过迭代地更新这些桶来改进初始假设。我们最初的实验表明,桶搜索通常在与标准集束搜索相似的水平上执行,其能够支持困难时间约束。与集束搜索不同,桶搜索适用于无风险(即允许)修剪,因为所有比当前最佳完整假设更差的部分假设都可以被丢弃。
4 结论
本文提出了我们的SGNMT平台,用于原型涉及机器翻译的新方法,涉及神经和符号模型。SGNMT通过一个通用接口(预测器)和各种搜索策略(解码器)支持许多不同的模型和约束条件。此外,SGNMT的重点在于通过将评分模块彼此和搜索算法解耦来最小化添加新的预测器和解码器的实施工作。SGNMT正在积极地用于教学和研究,我们欢迎对其发展做出贡献,例如通过实施使用其他框架和工具训练的新预测器。
论文下载链接:
http://www.aclweb.org/anthology/D/D17/D17-2005.pdf