多标签分类:Google‘s Neural Machine Translation System

文章地址:https://arxiv.org/pdf/1609.08144.pdf

文章标题:Google‘s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation(谷歌的神经机器翻译系统:弥合人类和机器翻译之间的鸿沟)

写在前面:本文是2016年谷歌的GNMT模型,基于机器翻译而不是多标签分类,但是其主体是基于Seq2Seq的架构模型,因此,对于基于Seq2Seq模型的多标签分类模型的改进有借鉴之处。对于这篇文章,本文只是粗略翻译了其模型架构。

Abstract

神经机器翻译 (NMT) 是一种用于自动翻译的端到端学习方法,具有克服传统基于短语的翻译系统的许多弱点的潜力。在训练和翻译中计算成本高昂,有时在非常大的数据集和大型模型的情况下,这一点令人望而却步。几位作者还指责NMT系统缺乏健壮性,特别是当输入句子包含稀有单词时。在这项工作中,我们介绍了GNMT,谷歌的神经机器翻译系统,试图解决其中许多问题。我们的模型由具有 8 个编码器 + 的深层 LSTM 网络和 8 个解码器层组成,使用残余连接以及从解码器网络到编码器的注意连接。为了改进并行性,从而减少训练时间,我们的注意机制将解码器的底层连接到编码器的顶层。为了加快最终翻译速度,我们在推理计算中采用低精度算法。为了改进对稀有单词的处理,我们将单词划分为一组有限的常用子单词单元(“单词”),用于输入和输出。该方法在"字符"分隔模型的灵活性与"字"分隔模型的效率之间提供了良好的平衡,自然地处理稀有单词的翻译,并最终提高了系统的整体准确性。我们的光束搜索技术采用长度-规范化 - 过程,并使用覆盖惩罚,这鼓励生成输出句子,最有可能涵盖源句中的所有单词。为了直接优化BLEU分数的翻译,我们考虑使用强化学习来优化模型,但我们发现BLEU分数的改进没有反映在人的评价中。在 WMT’14 英语到法语和"英语对德国"基准上,GNMT 取得了最先进的竞争成果。与谷歌基于短语的生产系统相比,对一组孤立的简单句子进行人工并排评估,将翻译错误平均减少60%。

一、Introduction

神经机器翻译(NMT)[39,2]是一种很有前途的方法,它可以解决传统机器翻译系统的许多缺点。NMT的优点在于它能够以端到端方式直接学习从输入文本到相关输出文本的映射。它的体系结构通常由两个递归神经网络(RNNs)组成,一个用于消耗输入文本序列,另一个用于生成翻译后的输出文本。NMT常常伴随着一个注意机制[2],这有助于它有效地处理长输入序列。

二、Related Work

三、Model Architecture

我们的模型(见图1)遵循常见的顺序到顺序的学习框架[39]和注意[2]。它由三部分组成:编码器网络、解码器网络和注意力网络。编码器将源语句转换成向量列表,每个输入符号一个向量。给定这个向量列表,解码器每次生成一个符号,直到生成特殊的语句结束符号(EOS)。编码器和解码器通过注意模块连接,该注意模块允许解码器在解码过程中聚焦于源语句的不同区域。

在我们的实验中,我们发现为了使NMT系统达到良好的精度,编码器和解码器的RNNs都必须足够深,以捕获源语言和目标语言中的细微异常。这一观察结果与之前的观察结果类似,即深度LSTMs明显优于浅层LSTMs[39]。在这项研究中,每增加一层,困惑减少了近10%。与[30]类似,我们对编码器RNN和解码器RNN都使用了深堆栈长短时记忆(LSTM)[22]网络。

我们的注意力模块类似于[2]。更具体地说,设yi−1为过去解码时间步长的decoder-Rnn输出(在我们的实现中,我们使用双向底层解码器层的输出)。当前时间步长的注意上下文ai按照以下公式计算:
多标签分类:Google‘s Neural Machine Translation System
在我们的实现中,注意功能是一个具有一个隐含层的前馈网络。
多标签分类:Google‘s Neural Machine Translation System
图一:谷歌神经机器翻译系统GNMT的模型体系结构。左边是编码器网络,右边是解码器网络,中间是注意模块。底部的编码器层是双向的:粉色节点从左到右收集信息,而绿色节点从右到左收集信息。编码器的其他层是单向的。在编码器和解码器中,剩余的连接从第三层开始。该模型被分割成多个gpu以加快训练速度。在我们的设置中,我们有8个编码器LSTM层(1个双向层和7个单向层)和8个解码器层。使用此设置,一个模型副本被划分为8个部分,并放置在通常属于一台主机的8个不同的gpu上。在训练过程中,底层双向编码器层首先并行计算。一旦两个完成,单向编码器层可以开始计算,每个在一个单独的GPU。为了在运行解码器层的过程中尽可能地保持并行性,我们使用底层解码器层的输出来获得循环注意上下文,该上下文被直接发送到所有剩余的解码器层。softmax层也被分区并放置在多个gpu上。根据输出词汇表的大小,我们可以让它们运行在与编码器和解码器网络相同的gpu上,也可以让它们运行在一组独立的专用gpu上。

3.1 Residual Connections(残差连接)

多标签分类:Google‘s Neural Machine Translation System
图二:普通堆叠LSTM和我们的堆叠LSTM之间的区别。左侧:简单堆叠的LSTM层。在右边:我们实现了具有残差连接的堆叠LSTM层。对于残差的连接,底层LSTM层(xi到LSTM1)的输入被作为元素和添加到底层(xi)的输出中。然后将这个和作为新的输入输入到顶层LSTM层(LSTM2)。

如上所述,与较浅的模型相比,深度叠加的LSTMs通常具有更好的精度。然而,简单地将更多的LSTM层叠加到一定数量的层上是可行的,超过这些层,网络就会变得过于缓慢和难以训练,这可能是由于爆炸和消失的梯度问题造成的[32,21]。根据我们在大型翻译任务方面的经验,简单堆叠的LSTM层最多可以工作4层,仅6层,8层以上的工作就非常糟糕。

在[20]的激励下,我们引入了栈中LSTM层之间的剩余连接(如图2所示),具体来说,让LSTMi和LSTMi+1分别为栈中的第i层和第(i+1)LSTM层,其参数分别为Wi和Wi+1。在第t时刻,对于没有残差连接的堆叠LSTM,我们有:
多标签分类:Google‘s Neural Machine Translation System
其中,xit是第t步LSTMi的输入,mit和cit分别是第t步LSTMi的隐藏状态和内存状态。

LSTMi与LSTMi+1之间存在残差连接,则有:
多标签分类:Google‘s Neural Machine Translation System
残差连接大大改善了后向通道中的梯度流,这使我们能够训练非常深入的编码器和解码器网络。在我们的大多数实验中,我们为编码器和解码器使用了8个LSTM层,尽管残差连接可以让我们训练更深层的网络(类似于在[43]中观察到的)。

3.2 Bi-directional Encoder for First Layer

多标签分类:Google‘s Neural Machine Translation System
图三:在编码器的第一层中的双向连接的结构。LSTM层LSTMf从左到右处理信息,而LSTM层LSTMb从右到左处理信息。LSTMf和LSTMb的输出首先连接起来,然后传送到下一个LSTM层LSTM1。

对于翻译系统,在输出端翻译某些单词所需的信息可以出现在源端的任何位置。通常,源端信息近似于从左到右,类似于目标端,但根据语言对,特定输出字的信息可以分布在输入端的某些区域,甚至可以被分割。

为了在编码器网络的每个点上都拥有最好的上下文,使用双向RNN[35]作为编码器是有意义的,这在[2]中也使用过。为了在计算过程中实现最大可能的并行化(将在3.3节中详细讨论),双向连接仅用于底层编码器层——所有其他编码器层都是单向的。图3说明了我们在底层编码器层使用的双向LSTMs。层LSTMf从左到右处理源句,层LSTMb从右到左处理源句。LSTMf (xft)和LSTMb(xbt)的输出首先连接起来,然后传送到下一层LSTM1。

3.3 Model Parallelism(模型的并行性)

由于模型的复杂性,我们利用模型并行性和数据并行性来加速训练。数据并行性很简单:我们使用倾盆SGD算法[12]并行地训练n个模型副本。n个副本共享一个模型参数副本,每个副本使用Adam[24]和SGD算法的组合异步更新参数。在我们的实验中,n通常是10左右。在我们的实验中,每一个副本一次只能处理一小批m个句子对,通常是128个。

除了数据并行性外,模型并行性还可以提高每个副本上梯度计算的速度。编码器和解码器网络沿着深度维度进行分区,并放置在多个GPU上,有效地在不同的GPU上运行每一层。由于第一层以外的所有编码器层都是单向的,所以第i+1层可以在第i层完全完成之前开始计算,提高了训练速度。softmax层也被分区,每个分区负责输出词汇表中的一个符号子集。图1显示了分区如何完成的更多细节。

模型并行性给我们可以使用的模型架构设置了一定的约束。例如,我们不能为所有的编码器层提供双向的LSTM层,因为这样做会减少后续层之间的并行性,因为每一层都必须等到前一层的前向和后向都完成。这将有效地限制我们并行地使用两个gpu(一个用于正向,一个用于反向)。对于模型的注意部分,我们选择将底部解码器输出与顶部编码器输出对齐,以在运行解码器网络时最大化并行性。如果我们将顶层的解码器层与顶层的编码器层对齐,我们就会消除解码器网络中的所有并行性,并且不会从使用多个GPU进行解码中受益。

四、Segmentation Approaches

五、Training Criteria

六、Quantizable Model and Quantized Inference

七、Decoder

在解码过程中,我们使用集束搜索来找到序列Y,该序列最大化了一个给定训练模型的得分函数s(Y,X)。介绍了基于最大概率的波束搜索算法的两个重要改进:覆盖惩罚[40]和长度归一化。对于长度归一化,我们的目标是考虑这样一个事实,即我们必须比较不同长度的假设。如果没有某种形式的长度规格化,常规的集束搜索将平均更倾向于短结果而不是长结果,因为每一步都增加了一个负的log-probability,对长句子产生更低的(更负的)分数。我们首先尝试简单地除以长度来标准化。我们然后改进了原始的启发式除以长度,0<α<1,优化开发的集。最后,我们设计了下面这个基于经验的更好的评分函数,它还包含了一个覆盖惩罚,以便根据注意力模块来选择完全覆盖源句的翻译。

在集束搜索中,我们通常保留8-12个假设,但我们发现使用更少的假设(4或2)对BLEU分数只有轻微的负面影响。除了修剪的数量考虑的假设,其他两种形式的修剪被使用。首先,在每一步中,我们只考虑局部分数不超过该步最佳令牌下面的集束大小的令牌。其次,根据公式14找到归一化的最佳得分后,我们将所有大于集束大小的假设都裁剪到目前为止的最佳归一化得分之下。后一种类型的剪枝只适用于完整的假设,因为它比较了标准化空间中的分数,而标准化空间仅在假设结束时可用。后一种形式的修剪也有这样的效果:一旦一个足够好的假设产生了,很快就不会产生更多的假设已经找到了,所以搜索会很快结束。当在cpu上运行时,剪枝将搜索速度提高30% - 40%,而不进行剪枝(即在预定的最大输出长度为源长度的两倍之后停止解码)。通常我们使用beamsize = 3.0,除非另有说明。

为了提高译码期间的吞吐量,我们可以将许多长度相似的句子(通常是35个)放入一个批处理中,然后并行地解码所有这些句子,从而利用为并行计算优化的可用硬件。在这种情况下,波束搜索只有在批处理中所有句子的所有假设都不在波束中时才会结束,这在理论上效率略低,但在实践中额外的计算成本可以忽略不计。

八、Experiments and Results

九、Conclusion

在本文中,我们详细描述了谷歌的神经机器翻译(GNMT)系统的实现,包括对其准确性、速度和鲁棒性至关重要的所有技术。在公开的WMT’14翻译基准上,我们的系统的翻译质量接近或超过所有当前发布的结果。更重要的是,我们还展示了我们的方法可以应用到更大的生产数据集,这些数据集有几个数量级的数据,从而提供高质量的翻译。

我们的主要发现是:1)零件建模有效地处理开放的词汇表和形态丰富的语言来翻译质量的挑战和推理速度,2)的组合模型和数据并行性可以用来有效地训练最先进的sequence-to-sequence NMT模型在大约一个星期,3)模型量化大大加速翻译推理,允许使用在部署生产环境中,这些庞大的模型4)许多额外的细节,如长度规格化、覆盖惩罚等,对于使NMT系统在真实数据上良好工作是必不可少的。