【深度学习机器翻译】GNMT:Google 的的神经机器翻译系统
Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation1. 论文地址:1. 论文地址:https://arxiv.org/abs/1609.08144发表时间:2016被引用量:2345(注意不是百度学术查到的,百度学术非常不准,这个数据是从谷歌学...
Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation
1. 论文地址:
https://arxiv.org/abs/1609.08144
发表时间:2016
被引用量:2345
(注意不是百度学术查到的,百度学术非常不准,这个数据是从谷歌学术镜像查到的,而且不得不说这一篇真的厉害)
源码地址:https://github.com/tensorflow/nmt
(非常详细的一个教程,毕竟用的自家框架)
2. 论文简介:
如今 NMT(Neural Machine Translation)任务中最大的一个问题就是模型缺乏鲁棒性,为了解决这个问题,Google 团队提出了一个新的模型,称之为 GNMT;
这个模型由一个有 8 个编码器和 8 个解码器层的深度 LSTM 网络组成,使用残差连接以及从解码器网络到编码器的注意力模块连接,主要特点有:
- 为了提高并行度,从而减少训练时间,该模型使用注意机制将解码器的底层连接到编码器的顶层;
- 为了提高最终的翻译速度,在推理计算中采用了低精度的算法(限制数值范围);
- 为了改进对罕见单词的处理,作者将单词分为有限的公共子单词单元(称之为“单词块”),用于输入和输出,该方法在“字符”分隔模型的灵活性和“单词”分隔模型的效率之间提供了良好的平衡,自然地处理了罕见单词的翻译,最终提高了系统的整体准确性;
- 通过一种波束搜索技术(beam search technique)使用了长度标准化过程和覆盖惩罚,这鼓励生成输出语句,最有可能覆盖源语句中的所有单词;
- 为了直接优化翻译任务的 BLEU 分数,作者还使用了强化学习来细化模型;
在 WMT‘14 的英法和英德基准测试中,GNMT 达到了最先进水平的竞争性结果,与谷歌的基于短语的生产系统相比,通过对一组孤立的简单句子进行人工并排评估,它平均减少了60%的翻译错误;
3. NMT 的典型结构:
NMT 模型能够实现从输入文本序列到输出文本序列的端到端的学习;
它的基本结构是由两个 RNN 组成,一个负责评估输入文本,另一个负责生成输出的翻译文本;
并且在 NMT 中经常使用注意机制来有效地处理长输入序列;
4. NMT 现有的缺点:
NMT 的一个优点是它避开了传统基于短语的机器翻译(SNT)中许多脆弱的设计选择,然而,在实践中,NMT 系统往往比基于短语的翻译系统的准确性更差,特别是在对非常大规模的数据集进行训练时,如用于最好的公共可用翻译系统时;
作者总结了 NME 有三个固有的缺点:
- 训练和推理速度较慢:在大规模的翻译数据集上训练一个 NMT 系统通常需要花费大量的时间和计算资源,从而减慢了实验的周转时间和创新的速度;
- 处理罕见词时效率低下:NMT对罕见词的翻译缺乏鲁棒性,虽然这可以解决原则上通过训练“复制模式”来模拟传统对齐模型,或者通过使用注意力机制复制罕见字,但是这些方法都是不可靠的;
- 有时不能翻译源句中的所有词:NMT系统有时产生的输出句子不能翻译输入句子的所有部分;
5. GMNT 的特点:
谷歌提出的 GMNT 为上述问题提供了解决方案;
在 GMNT 的实现中主要注意以下几点:
- 网络是一个 8 层的长短时记忆(LSTM)我们的LSTM RNNs有8层,层与层之间以残差模块连接,以鼓励梯度流;
- 为了实现并行性(相同参数下并行度高,运算速度更快),我们将注意力从解码器网络的底层连接到编码器网络的顶层;
- 为了进一步提高推理时间,模型采用了低精度的推理算法,并通过特殊的硬件(谷歌的张量处理单元 TPU)进一步加速;
- 为了有效地处理罕见字,模型中使用子字单位(也称为“单词块”)作为系统的输入和输出,从而在单个字符的灵活性和完整单词的解码效率之间取得了很好的平衡,同时也避免了对未知单词进行特殊处理的需要;
- 使用了波束搜索技术,包括一个长度归一化过程,以有效地处理译码过程中不同长度假设的比较问题,以及一个覆盖惩罚,以鼓励模型翻译所有提供的输入;
这个模型的实现是健壮的,并且在跨许多对语言的数据集上表现良好,不需要进行特定于语言的调整,能够在标准基准上获得与以前的最先进系统相当或更好的结果,同时对基于短语的生产翻译系统进行了很大的改进,最终的翻译系统的质量更接近于人类的平均水平;
6. GMNT 的网络结构:
主要结构有三个:
- 编码网络(encoder):负责将每个输入字符转换成相应的词向量;
- 解码网络(decoder):负责接收词向量并生成翻译文本;
- 注意力模块(attention):编码器和解码器通过注意模块连接,该注意模块允许解码器在解码过程中聚焦于源语句的不同区域;
6.1 推理过程:
假设 ( X , Y ) (X,Y) (X,Y) 是一对源语句和目标语句,其中 x i , y j x_i,y_j xi,yj 表示语句中的字符:
那么编码层就可以表示为:
其中 X i X_i Xi 是 x i x_i xi 的固定大小的向量表示;
利用链式法则,可以将序列的条件概率 P ( Y ∣ X ) P(Y|X) P(Y∣X) 分解为:
在推理过程中,我们可以根据到目前为止的源语句编码和解码的目标序列计算下一个符号的概率:
这个解码器是由一个 RNN 网络和一个 softmax 层的组合来实现的:解码器 RNN 网络生成下一个待预测符号的隐藏状态 y i y_i yi,然后通过 softmax 层生成候选输出符号的概率分布;
注意力模块使用 y i − 1 y_{i-1} yi−1 作为过去解码时间步长的解码器输出;
那么当前时间步长的注意上下文信息 a i a_i ai 的计算公式就可以写作:
其中 A t t e n t i o n F u n c t i o n AttentionFunction AttentionFunction 就是一个由一个隐藏层构成的前馈神经网络;
6.2 残差模块:
虽然研究表明,深层 LSTM 网络往往优于浅层网络,但是深层网络往往会因为梯度消失或梯度爆炸等问题难以收敛;
因此作者提出可以通过在 LSTM 层之间使用残差模块来解决这个问题:
即假设一个普通的堆叠 LSTM 结构表示为:
那么使用残差结构的 LSTM 就可以写作:
即在原本上一层输出 m t i m_t^i mti 上加了一个上一层输入 x t i − 1 x_t^{i-1} xti−1;
6.3 第一层的双向编码器:
对于翻译系统,在输出端翻译某些单词所需的信息可以出现在源端的任何位置;
通常,源端信息近似于从左到右,类似于目标端,但根据语言对,特定输出字的信息可以分布在输入端的某些区域,甚至可以被分割,因此作者在第一个 LSTM 层使用双向的编码器,从而更有效地利用上下文信息;
双向编码器的结构如图:
其中 L S T M f LSTM_f LSTMf 从左到右处理源语句, L S T M b LSTM_b LSTMb 从右到左处理源语句,二者的输出 X i f X_i^f Xif 和 X i b X_i^b Xib 合并后作为下一层的输出;
6.4 模型的并行性:
由于模型的复杂性,作者利用模型并行性和数据并行性来加速训练;
数据并行性很简单:我们使用 Downpour SGD 算法并行地训练 n 个模型副本,这 n 个副本共享一个模型参数副本,每个副本使用 Adam 和 SGD 算法的组合异步更新参数;
在的实验中,n 通常是 10 左右,并且每一个副本一次只能处理一小批 m 个句子对,通常是 128 个;
除了数据并行性外,模型并行性还可以提高每个副本上梯度计算的速度;
编码器和解码器网络沿着深度维度进行分区,并放置在多个 GPU 上,有效地在不同的 GPU 上运行每一层;
由于除第一层以外的所有编码器层都是单向的,所以第 i + 1 i + 1 i+1 层可以在第 i i i 层完全完成之前开始计算,从而提高了训练速度;
softmax 层也被分区,每个分区负责输出词汇表中的一个符号子集;
模型并行性给可以使用的模型架构设置了一定的约束;
例如,不能为所有的编码器层都提供双向的 LSTM 层,因为这样做会减少后续层之间的并行性,因为每一层都必须等到前一层的前向和后向都完成;
对于模型的注意部分,作者选择将底部解码器输出与顶部编码器输出对齐,以在运行解码器网络时最大化并行性;如果将顶层解码器层与顶层编码器层对齐,我们就会消除解码器网络中的所有并行性,并且不会从使用多个 GPU 进行解码中受益;
7. 实验结果:
与以前的基于短语的生产系统相比,这个GNMT系统在几种流行的语言对上大约减少了60%的翻译错误;
关注我的公众号:
感兴趣的同学关注我的公众号——可达鸭的深度学习教程:
更多推荐
所有评论(0)