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中读取参数,再一个词一个词地输出目标语言。
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 GNMTGoogle这次在算法上、尤其是工程上对学术界的NMT方法提出了多项改进,才促成了这次Google NMT系统的上线。
学术上的NMT虽然取得了丰硕的成果,但在实际的产品中NMT的效果却比不上PBMT。究其原因Google在技术报告[2]中总结了三点:
1、训练和预测的速度太慢。
要获得更好的模拟效果,就要用更深层的神经网络来拟合参数(下面会提到,GNMT用了8层的Stack LSTM来做Encoder)。这么复杂的神经网络在预测的时候就要耗费大量的资源,远远慢于PBMT的系统。并且在训练的时候拟合这么大规模的预料,可能要很久很久才能训练一次,这样不利于快速迭代改进调整模型参数。
2、NMT在处理不常见的词语的时候比较薄弱。
比如一些数字、或者专有名词。在传统PBMT系统中,可以简单地把这些词原封不动的copy到翻译句子中;但是在NMT中,这样的操作就无法有效的进行。
3、有时候NMT无法对输入源句子的所有部分进行翻译,这样会造成很奇怪的结果。
Google NMT的主要神经网络架构图如下:
仔细看,其实还是带Attenion的Encoder-Decoder逻辑。Encoder是由8层
本文来源:不详 作者:佚名