深度|Google神经网络机器翻译上线历程回顾

唯物按:作者陈村,剑桥大学自然语言处理(NLP)组, 现为机器学习语义分析工程师。

Google Translate 作为久负盛名的机器翻译产品,推出 10 年以来,支持 103 种语言,一直是业界的标杆。而在前不久,Google 官方对翻译进行一次脱胎换骨的升级——将全产品线的翻译算法换成了基于神经网络的机器翻译系统(Nueural Machine Translation,NMT)。

从 Google 官方发表的博文[1]和技术报告[2]中,我们有机会一窥究竟。这个全新的系统到底有什么神奇的地方?笔者借这篇文章,帮大家梳理一下机器翻译的发展历程,以及 Google 这次新系统的一些亮点。

机器翻译的发展史

机器翻译,即把某一种源语言(比如英文)翻译到最恰当的目标语言(比如中文)。

还在几年前,机器翻译界的主流方法都是 Phrased-Based Machine Translation (PBMT),Google 翻译使用的也是基于这个框架的算法。所谓 Phrased-based,即翻译的最小单位由任意连续的词(Word)组合成为的词组(Phrase),比如下图中的“北风呼啸”。

PBMT是怎么把一句英文翻译成中文的呢?

  • 首先,算法会把句子打散成一个个由词语组成的词组(中文需要进行额外的分词),如图中(1)所示;
  • 然后,预先训练好的统计模型会对于每个词组,找到另一种语言中最佳对应的词组,如图中(2)所示;
  • 最后,需要将这样“硬生生”翻译过来的目标语言词组,通过重新排序,让它看起来尽量通顺以及符合目标语言的语法,如图中(3)所示。

图片出处:Lopez, A. (2008). Statistical machine translation. ACM Computing Surveys, 40(3), 1–49.

传统的 PBMT 的方法,一直被称为NLP(Natural Language Processing,自然语言处理)领域的终极任务之一。因为整个翻译过程中,需要依次调用其他各种更底层的 NLP 算法,比如中文分词、词性标注、句法结构等等,最终才能生成正确的翻译。

这样像流水线一样的翻译方法,一环套一环,中间任意一个环节有了错误,这样的错误会一直传播下去(error propagation),导致最终的结果出错。

因此,即使单个系统准确率可以高达 95%,但是整个翻译流程走下来,最终累积的错误可能就不可接受了。

深度学习这几年火了之后,机器翻译一直是深度学习在 NLP 领域里成果最为卓越的方向之一。深度神经网络提倡的是 end-to-end learning,即跳过中间各种子 NLP 步骤,用深层的网络结构去直接学习拟合源语言到目标语言的概率。

2014年,Cho et. al [3]和Sutskever et al. [4] 提出了Encoder-Decoder架构的神经网络机器翻译系统。如下图所示:

首先把源语言一个词一个词地输入 Encoder,Encoder 利用训练好的神经网络参数,把整个输入序列的信息存在一个隐层向量 h 中;h 这个隐层,可以理解为包含了所有对输入源语言的描述;然后再由 Decoder,利用训练好的神经网络参数,从隐层 h 中读取参数,再一个词一个词地输出目标语言。

via:3.bp.blogspot.com

NMT 这样的过程直接学习源语言到目标语言,省去了训练一大堆复杂 NLP 子系统的依赖,依靠大量的训练数据(平行语聊库,比如同一本书的中文和英文版本),直接让深度神经网络去学习拟合。熟悉深度学习的朋友可能会意识到,这样的方法一个极大的优势就是省去了很多人工特征选择和调参的步骤。

听说前两年,有个做神经网络图像处理的教授,在不太了解 NLP 的基础上,硬生生地搭建了一套可以匹敌传统 PBMT 的机器翻译系统,后者可是十几年来多少奋战在第一线的 NLP同志一砖一瓦垒起来的啊。而且,相比传统 PBMT 一个词组一个词组的独立翻译,NMT这样 end-to-end 翻译出来的语言更加自然流畅。

2015年,Yoshua Bengio 团队进一步加入了Attention 的概念。稍微区别于上面描述的Encoder-Decoder 方法,基于 Attention 的 Decoder 逻辑在从隐层 h 中读取信息输出的时候,会根据现在正在翻译的是哪个词,自动调整对隐层的读入权重。即翻译每个词的时候,会更加有侧重点,这样也模拟了传统翻译中词组对词组的对应翻译的过程。Attention模块其实也就是一个小型神经网络,嵌入在 Encoder-decoder 之间的,跟着整个神经网络训练的时候一起优化训练出来的。

Bengio 团队的这个工作也奠定了后序很多 NMT 商业系统的基础,其中也包括 Google 这次发布的 GNMT。

Google GNMT

Google 这次在算法上、尤其是工程上对学术界的 NMT 方法提出了多项改进,才促成了这次Google NMT 系统的上线。

学术上的 NMT 虽然取得了丰硕的成果,但在实际的产品中 NMT 的效果却比不上 PBMT。究其原因 Google 在技术报告[2]中总结了三点:

1

训练和预测的速度太慢。

要获得更好的模拟效果,就要用更深层的神经网络来拟合参数(下面会提到,GNMT用了8层的Stack LSTM来做Encoder)。这么复杂的神经网络在预测的时候就要耗费大量的资源,远远慢于 PBMT 的系统。并且在训练的时候拟合这么大规模的预料,可能要很久很久才能训练一次,这样不利于快速迭代改进调整模型参数。

2

NMT在处理不常见的词语的时候比较薄弱。

比如一些数字、或者专有名词。在传统 PBMT 系统中,可以简单地把这些词原封不动的copy 到翻译句子中;但是在 NMT 中,这样的操作就无法有效的进行。

3

无法对源句的全部进行翻译,会有奇怪的效果

Google NMT 的主要神经网络架构图如下:

仔细看,其实还是带 Attenion 的 Encoder-Decoder 逻辑。Encoder 是由 8 层 LSTM 组成,最下面两层是一个双向 LSTM,可以从前到后以及从后往前理解一遍输入的源语言输入。中间的蓝色模块就是 Attention 模块,负责对 Encoder 的逻辑进行加权平均输出到Decoder 层。

Decoder 模块也是一个 8 层的 LSTM,最终连接到 Softmax 层,一个词一个词输出最终的目标语言词语的概率分布。

算法上,论文中还提到了一些创新点。包括引入 Wordpiece 来对单词进行更细粒度的建模,来解决上面提到的不常见词语的问题;以及在 Decoding 结束之后,搜索最佳输出序列的时候,引入coverage penalty 的概念,来鼓励 Decoder 输出更加完整的翻译句子,以解决有时候NMT有时候无法完整的翻译整句的情况。

工程上,报告里面着重谈到了几个性能优化的重点:

  • 引入Risidual Connection

8 层的 LSTM 堆叠起来,大大增加了神经网络的表达能力,在海量的数据下可以获得更好的模型效果。不过这样的堆叠会直接导致模型太庞大不可训练,在梯度反向传播的时候,很容易出现梯度弥散或梯度爆炸的问题。过去的研究证明[5],Residual Connection 的方式,直接去学习残差可能会带来更好的效果,避免了深度网络中反向传播中出现的梯度反向传播可能会发生的问题。在上面 Google NMT 架构图中,从倒数第三层开始都会引入Residual Connection。

  • 大量的并行优化

与此同时,在工程上 Google 也进行了非常多的优化,来减少训练和实时翻译时候的延迟问题。比如训练数据的时候,数据会分成 n 等份,交给不同的 GPU 去异步训练,然后再汇总到统一的参数服务器;同时,Encoder 和 Decoder 的不同层的 LSTM 会在不同的GPU 上运行,因为更上一层的 LSTM 不必等到下一层的神经网络完全计算完毕再开始工作;即使对于最后的 Softmax 输出层,如果最后输出词的维度太大,也会划分到不同的GPU 上并行处理。可谓不放过丝毫并行的机会。

底层基础计算平台的支持。Google NMT 采用了自家的 Tensorflow 深度学习框架,并运行在 Google 专门为深度学习打造的 TPU(Tensor Processing Unit)上,当年的 AlphaGo 也是由 TPU 提供支持。在对于模型参数的计算上,也大量应用了 Quantized 计算的技术:

由于神经网络参数涉及大量的耗时的浮点数运算,通过 Quantization 的方法,将模型参数由浮点数类型转换到一个更低精度(比如 8bit),虽然会有一些精度的损失,但是可以大大减少计算量以及最终训练模型的体积。

从软件框架到定制硬件,相互配合,追求最极致的性能。在这篇报告里,有着长长的作者列表,最后赫然列着 Google 工程架构大神 Jeffrey Dean 的名字,他是当年一手创造了Map Reduce、Big Table 等产品的 Google 奠基者之一。

写在后面

Google 这次的论文,基本框架仍然是带 Attention 模块的 Encoder-Decoder。而且国内厂商,比如百度和搜狗,也发布了类似的神经网络机器翻译系统。百度早在去年,就发布“工业界第一款 NMT 系统”。不过,Google 毕竟是机器翻译界的标杆,这次披露的论文也揭示了很多他们为了大规模商业化做出的努力,因此在业界引起了不小的震动。

参考文献:

[1]A Neural Network for Machine Translation, at Production Scale

[2] Wu, Y., Schuster, M., Chen, Z., Le, Q. V., Norouzi, M., Macherey, W., et al. (2016, September 26). Google's Neural Machine Translation System: Bridging the Gap between Human and Machine Translation.

[3] Cho, K., van Merrienboer, B., Gulcehre, C., Bougares, F., Schwenk, H., and Bengio, Y. (2014a). Learning phrase representations using RNN encoder-decoder for statistical machine translation. In Proceedings of the Empiricial Methods in Natural Language Processing (EMNLP 2014).

[4] Sutskever, I., Vinyals, O., and Le, Q. (2014). Sequence to sequence learning with neural networks. In Advances in Neural Information Processing Systems (NIPS 2014).

[5] He, K., Zhang, X., Ren, S., & Sun, J. (1512). Deep residual learning for image recognition. arXiv preprint (2015).

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2016-11-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

如何通过数据挖掘手段分析网民的评价内容?

近年来微博等用户自媒体的爆炸式增长,使得利用计算机挖掘网民意见不但变得可行,而且变得必须。这其中很重要的一项任务就是挖掘网民意见所讨论的对象,即评价对象。本文...

6728
来自专栏数据小魔方

R语言构建层次分析模型不看一下吗~

AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家Saaty教授于二十世纪80年代提出的一种实用的多方案或多目标的决策方法...

1852
来自专栏机器之心

机器之心「GMIS 2017」嘉宾揭秘:LSTM之父Jürgen Schmidhuber

2017 全球机器智能峰会(GMIS 2017),让我们近距离接触「LSTM 之父」Jürgen Schmidhuber。 2017 全球机器智能峰会(GMIS...

3198
来自专栏机器之心

前沿 | 首次大规模神经机器翻译架构分析结果出炉,LSTM 优于GRU

选自arxiv 作者:Denny Britz等 机器之心编译 参与:微胖、蒋思源、吴攀 这样的实验只有谷歌级别的公司才能处理的了。这篇文章对大型 NMT 模型训...

45510
来自专栏BestSDK

知其所以然之永不遗忘的算法

image.png 相信大部分同学曾经都学习过快速排序、Huffman、KMP、Dijkstra等经典算法,初次学习时我们惊叹于算法的巧妙,同时被设计者的智慧所...

2737
来自专栏前沿技墅

揭开计算机识别人类语言的神秘面纱——词向量

1313
来自专栏新智元

一文看懂系列之深入理解 RNN——神经图灵机(附代码)

【新智元导读】RNN无疑是深度学习的主要内容之一,增强型RNN大致可以分为四种,本文介绍第一种:神经图灵机。 背景介绍 在写《深度学习与神经科学相遇》的过程中开...

4227
来自专栏量子位

干货分享 | 自然语言处理及词向量模型介绍(附PPT)

云脑科技机器学习训练营第二期,对自然语言处理及词向量模型进行了详细介绍,量子位作为合作媒体为大家带来本期干货分享~ 本期讲师简介 ? 樊向军 云脑科技核心算法工...

4927
来自专栏AI研习社

Hopfield 网络和玻尔兹曼机!深度学习之父 Geoffrey Hinton 的神经网络第 11 课(中文字幕)

作为深度学习祖师,Geoffrey Hinton 的每一句每一言,都使学习者如奉纶音。浓缩其毕生所学的《Neutral Network for Machine ...

3615
来自专栏CreateAMind

深入理解 RNN-神经图灵机(代码)

在写《深度学习与神经科学相遇》的过程中开始谈到了RNNs(Recurrent Neural Networks),我想很有必要暂停下来先对RNNs进行一些更深入的...

1733

扫码关注云+社区

领取腾讯云代金券