剑桥大学:SGNMT—一个用于新模型和搜索策略快速原型设计的灵活NMT解码平台

你和“懂AI”之间,只差了一篇论文

很多读者给芯君后台留言,说看多了相对简单的AI科普和AI方法论,想看点有深度、有厚度、有眼界……以及重口味的专业论文。

为此,在多位AI领域的专家学者的帮助下,我们解读翻译了一组顶会论文。每一篇论文翻译校对完成,芯君和编辑部的老师们都会一起笑到崩溃,当然有的论文我们看得抱头痛哭。

同学们现在看不看得懂没关系,但芯君敢保证,你终有一天会因此爱上一个AI的新世界。

这是读芯术解读的第72篇论文

EMNLP 2017 System Demonstrations

SGNMT—一个用于新模型和搜索策略快速原型设计的灵活NMT解码平台

SGNMT – A Flexible NMT Decoding Platform for Quick Prototyping of New Models and Search Strategies

剑桥大学

University of Cambridge

【摘要】本文介绍了SGNMT,我们用于机器翻译研究的实验平台。SGNMT提供了具有从左到右语义的神经和符号评分模块(预测器)的通用界面,如NMT,语言模型,翻译网格,n最佳列表或其他类型的评分和约束等翻译模型。预测器可以与其他预测器组合形成复杂的解码任务。SGNMT也实现了一些搜索策略,用于遍历由预测变量跨越的适合于不同预测器的空间。添加新的预测变量或解码策略非常简单,使其成为探索原型开发新研究思路非常有效的工具。SGNMT正在剑桥大学中的机器学习、语音和语言技术的硕士学位课程中积极使用,用于课程工作和论文,此外,也用于我们团队的大部分研究工作。

1 引言

我们正在开发一个称为SGNMT的开源解码框架,全称为语法导航神经机器翻译【http://ucam-smt.github.io/sgnmt/html/】。该软件包支持许多知名框架,包括TensorFlow【SGNMT依赖于TensorFlow https://github.com/ehasler/tensorflow】(Abadi et al., 2016),OpenFST (Allauzen et al., 2007),Block/Theano(Bastien et al., 2012; van Merrienboer et al.,2015)和NPLM (Vaswani et al., 2013)。SGNMT工具中的两个中心概念是预测器和解码器。预测器是评分模块,在给定当前内部预测器状态、历史、源语句和外部信息等情况下,定义目标语言词汇的分数。来自多个不同预测器的评分可以组合用于解码。

解码器是跨越预测器张成空间的搜索策略。SGNMT提供了常用的搜索树遍历算法(例如集束搜索beam search)。由于解码器的运行时间复杂度和他们所做的搜索错误的种类不同,所以不同的解码器适用于不同的预测器排列。

评分模块和搜索策略的严格分离以及评分模块之间的分离使SGNMT成为神经和符号模型的非常灵活的解码工具,不仅仅适用于机器翻译。SGNMT基于OpenFST-based的剑桥SMT系统(Allauzenet al., 2014)。虽然系统开发出来还不到一年,但我们认为这个系统对于新研究者来说是非常灵活和容易使用的。我们团队已将SGNMT投入到大部分研究工作当中。

我们还发现,SGNMT非常适合教学和学生研究项目。在2015-16学年,剑桥大学的两名学生在机器学习、语音和语言技术上使用了SGNMT作为他们的论文项目【http://www.mlsalt.eng.cam.ac.uk/Main/CurrentMPhils】,第一个项目涉及到使用SGNMT与OpenFST在SMT中应用子词模型(Gao,2016))。第二个项目由LSTM开发自动音乐作品,其中使用WFSAs来定义“巴赫”合唱团(Tomczak, 2016)中允许和弦空间。LSTM提供了“创造力”,WFSA强制执行合唱团必须遵守的限制。这个第二个项目特别表明了这种方法的多功能性。对于当前的2016-17学年,SGNMT正在这两门课程中大量使用。

2预测器

因此,SGNMT通过为机器翻译研究中使用的广泛的约束或模型提供通用接口来强调灵活性和可扩展性。该概念有助于快速构建新的研究思路。我们的平台旨在尽量减少实施所需的努力;一旦在SGNMT框架中成功证明了一个想法,生产系统的优化代码就可以生成,相对来说,解码速度是次要的。在SGNMT中,评分通过一个或多个预测器分配给部分假设。一个预测器通常具有单一的责任,因为它代表单一的模型或类型的约束。预测器需要实现以下方法:

1.initialize(src sentence)使用源语句初始化预测变量状态。

2. get state( )获取内部预测器状态。

3.set state( )设置内部预测器状态。

4.predict next( )给定内部预测器状态,为下一个位置的目标标记生成后验。

5.consume(token)通过向当前历史记录添加令牌来更新内部预测器状态。

预测器状态的结构和这些方法的实现在预测器之间有很大差异。表2列出了目前实施的所有预测器。表1总结了三种非常常见的预测器的接口语义:神经机器翻译(NMT)预测器,(确定性的)有限状态转换器(FST)用于格点求值的预测器,以及用于应用n-gram语言模型的n-gram预测器。我们还包括两个例子(字数和UNK数),它们没有一个自然的从左到右的语义,但仍然可以作为预测器。

表1 用于NMT,FST,n元LM和计数模块的预测器操作

表2 当前实施的预测器

2.1 示例预测器排列

SGNMT允许组合任意数量的预测器,甚至同一预测器类型的多个实例。在多预测器的情况下,我们将预测器分数结合到线性模型中。以下列表说明了各种有趣的解码任务可以被制定为预测器组合。

nmt:单个NMT预测器代表纯粹的NMT解码。

nmt,nmt,nmt:在我们的框架中,使用多个NMT预测器是一种自然的方式表示集成解码(Hansen和Salamon,1990; Sutskever等,2014)。

fst,nmt:NMT解码受限于FST。例如,在MT(Hasler等,2016)的源端简化或“Bach”(Tomczak)中的和弦进行的情况下,这可以用于神经网格再分类(Stahlberg等,2016)或其他类型的限制条件。fst预测器也可用于将基于字符或基于子词单元的NMT的输出限制为编码为FSA的大型单词词汇表。

nmt,rnnlm,srilm,nplm:将NMT与三种语言模型相结合:RNNLM(Zaremba et al。,2014),Kneser-Ney n-gram LM(Heafield et al。,2013; Stolcke et al。 2002)和前馈神经网络LM(Vaswani等,2013)。

nmt,ngramc,wc:Stahlberg等人之后的基于MBR的NMT (2017)。用(ngramc)和简单的单词惩罚(simple word penalty)(wc)提取n-gram后件。

3 解码器

解码是搜索最高得分假设的算法。预测器列表通过实现方法initialize(·),getstate(),set state(·),predict next()和consume(·)来确定如何评估(部分)假设。解码器类实现了适用于列表中所有预测器的这些方法的版本。initialize(·)总是在解码一个新的句子之前被调用。许多流行的搜索策略可以通过剩下的方法get state(),set state(·),predict next()和consume(·)来描述。算法1和算法2展示了如何用这种方法来定义贪婪和波束解码【形式上,算法1和算法2中的predict next()返回标记项和他们的成本对;字符串连接表示为·】。

表3包含当前实施的解码器列表。图1中的UML类图解释了解码器和预测器之间的关系。

表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正在积极地用于教学和研究,我们欢迎对其发展做出贡献,例如通过实施使用其他框架和工具训练的新预测器。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180712G0RB2L00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券