蓝狮娱乐-蓝狮注册登录站

机器翻译的流程(原理)是怎么样的?

日期:2024-07-22 07:24 / 作者:佚名

本题已收录至知乎圆桌:机器之能 X 语言之美,更多「人工智能」相关话题欢迎关注讨论。

前一阵看了微软的即时翻译,觉得很酷炫,想搞清楚里面的一些基础原理。

目前最重要的两种机器翻译方式:规则法和统计法

1. 规则法(rule based machine translation, RBMT),依据语言规则对文本进行分析,再借助计算机程序进行翻译。多数商用机器翻译系统采用规则法。

规则法机器翻译系统的运作通过三个连续的阶段实现:分析,转换,生成,根据三个阶段的复杂性分为三级。

- 直接翻译:简单的词到词的翻译。

- 转换翻译:翻译过程要参考并兼顾到原文的词法、句法和语义信息。因为信息来源范围过于宽泛,语法规则过多且相互之间存在矛盾和冲突,转换翻译较为复杂且易出错。【别说转换了,光是根据各种语法规则,对源语言进行分析都会崩溃好吗!

- 国际语翻译:迄今为止,还只是设想。大概是想凭借通用的完全不依赖语言的形式,实现对语言信息的解码。【国际语本身就是人工语言啊,还怎么做到不依赖语言形式。这个想法最早出现在13世纪orz

Bernard Vauquois' pyramid

2. 统计法 (statistical machine translation, SMT),通过对大量的平行语料进行统计分析,构建统计翻译模型(词汇、比对或是语言模式),进而使用此模型进行翻译,一般会选取统计中出现概率最高的词条作为翻译,概率算法依据贝叶斯定理。假设要把一个英语句子A翻译成汉语,所有汉语句子B,都是A的可能或是非可能的潜在翻译。Pr(A)是类似A表达出现的概率,Pr(B|A)是A翻译成B出现的概率。找到两个参数的最大值,就能缩小句子及其对应翻译检索的范围,从而找出最合适的翻译。

SMT根据文本分析程度级别的不同分为两种:基于词的SMT和基于短语的SMT,后一个是目前普遍使用的,Google用的就是这种。翻译文本被自动分为固定长度的词语序列,再对各词语序列在语料库里进行统计分析,以查找到出现对应概率最高的翻译。【所以,不要嫌弃谷歌翻译啦,如果不是依托于它自己强大的搜索引擎,能获取相对数量的语料库,翻译的质量可能更糟,可以对比必应和百度。非在线的开源机器翻译也有做得很棒的,多也是使用的统计法模式。


其他方式还有如范例法(example based machine translation, EBMT),类似统计法原理,不同的点在于比对对象是相对小型的语料库,从中找到对应的翻译片段的类似范例,再用片段组成相应的翻译;上下文法(context based machine translation, CBMT);知识法(knowledge based machine translation, KBMT)和混合法,但是不及前面两种使用率高。

刚好这两天在看Daniel Stein写的MT概述"Maschinelle übersetzung – ein überblick",有提到机器翻译的不同类型和原理,以上。

作者:九五要当学霸

链接:

知乎专栏

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

原文:Adam Geitgey

原文链接:medium.com/@ageitgey/ma

翻译:巡洋舰科技——赵95

你是不是看烦了各种各样对于深度学习的报导,却不知其所云?我们要来改变这个问题。

有趣的机器学习 前六章已更新!点此查看第一章:最简明入门指南第二章:用机器学习【制造超级马里奥】的关卡第三章:图像识别【鸟or飞机】第四章:用深度进行【人脸识别】第五章:使用深度学习进行【语言翻译】和 序列的魔力第六章:如何用深度学习进行【语音识别】




Google翻译背后的科技被称为机器翻译。它改变了世界,在本来根本不可能的情况下让(不同语言的)人们完成了沟通。

但我们都知道,在过去的15年里,高中学生已经使用Google翻译...额 ...协助他们完成他们的西班牙语作业。这已经不是新闻了…?

事实证明,在过去两年,深度学习已经完全改写了我们的机器翻译方法。那些对语言翻译一无所知的深度学习研究人员正在利用一个个相对简单的机器学习解决方案,来打败世界上最好的专家建造的语言翻译系统。

这一突破背后的技术被称为序列到序列学习sequence to sequence learning。这是一项非常强大的技术,被用于解决许多种类的问题。在我们看到它如何被用于翻译之后,我们还将学习这个算法是怎样用来编写AI聊天机器人和描述图片的。

我们开始吧!

让计算机翻译

那么我们该如何编写代码,才能让计算机翻译人类的语言呢?

最简单的方法,就是把句子中的每个单词,都替换成翻译后的目标语言单词。这里有一个简单的例子,把西班牙语逐字翻译成英语:

我们只是用匹配的英语单词替换每个西班牙单词。

这很容易实现,因为你所需要是一本字典来查找每个单词的翻译。但结果并不好,因为它忽略了语法和上下文的联系。

因此,下一件你可能要做的事,就是开始添加特定语言规则以改进结果。例如,你可能将两个常用词翻译为词组。你可能互换名词和形容词的顺序,因为他们在西班牙语中以相反的顺序出现:

这真的有效!如果我们就继续添加更多的规则,直到我们可以应对每一部分语法,我们的程序应该就能够翻译任何句子了,对吧?

这就是最早的机器翻译系统的工作原理。语言学家提出了许多复杂的规则,并逐一编程实现。一些世界上最聪明的语言学家在冷战期间辛勤努力了多年,才创建出了一些更容易理解俄罗斯人交流的翻译系统。

不幸的是,这种套路只对简单问题适用,比如说像天气预报这样结构简单的文档。它对于真实世界的文字来说并不可靠。

问题是,人类语言并不总是遵循固定的规则。人类语言充满了各种特殊情况,区域差异,或者干脆就不按套路出牌(#‵′)凸。我们说英语的方式更多地受到几百年前入侵的人的影响,而不是由坐下来定义语法规则的人。

利用统计数据使计算机更好地翻译

在基于规则的系统失效之后,一些新的翻译方法被开发出来了,他们基于概率和统计的模型而不是语法规则。

建造一个基于统计的翻译系统需要大量的训练数据,其中完全相同的文本被翻译成至少两种语言。这种双重翻译的文本称为平行语料库parallel corpora。18世纪的科学家以同样的方式在罗塞塔石碑上面从希腊语中找出埃及象形文字。(译者注:罗塞塔石碑,高1.14米,宽0.73米,制作于公元前196年,刻有古埃及国王托勒密五世登基的诏书。石碑上用希腊文字古埃及文字和当时的通俗体文字刻了同样的内容,这使得近代的考古学家得以有机会对照各语言版本的内容后,解读出已经失传千余年的埃及象形文之意义与结构,而成为今日研究古埃及历史的重要里程碑)以同样的方式,计算机可以使用平行语料库猜测如何将文本从一种语言转换为另一种语言。

幸运的是,有很多双重翻译的文本已经存在在世界的各个角落。例如,欧洲议会将其诉讼程序翻译成21种语言。因此,研究人员经常使用这些数据来帮助建造翻译系统。

训练数据通常令人兴奋!但这只是无数条政府文件而已...

用概率的思维思考

统计翻译系统的根本不同,在于它们试图生成不止一个精确的翻译。相反,他们生成成千上万种可能的翻译,然后他们按照可能最正确的给这些翻译排名。他们通过与训练数据的相似性来估计有多“正确”。以下是它的工作原理:

第1步:将原始句子分成块

首先,我们将我们的句子分成简单的块,每一块都可以轻松翻译:

第2步:找到每一块的所有可能的翻译

接下来,我们将翻译每块文字,我们将通过寻找我们数据库中所有人类翻译过的相同词块来完成我们的翻译。

要着重注意的是,我们不只是在一本简简单单的翻译字典中查找这些词块。相反,我们看到是真实的人在真实的句子中如何翻译这些相同的词。这有助于我们捕获到在不同语境中所有不同的表达方式:

即使最常见的短语也有很多种可能的翻译

这些可能的翻译中的有一些会比其他翻译更频繁地使用。根据我们训练数据中每个翻译出现的频率,我们可以给它设定一个分数。

例如,有人说“Quiero”更多的时候是指“我想要”而不是“我尝试”。所以,我们可以使用我们训练数据中 “Quiero”被翻译成“我想要”的频率,给“我想要”这个翻译更多的权重。

第3步:生成所有可能的句子,找到最有可能的那句

接下来,我们将使用这些词块的每种可能翻译来组合生成一堆可能的句子。

从第二步中列出的翻译过的词块中,我们可以通过不同组合方式生成将近2,500个不同的句子。下面是一些例子:

I love | to leave | at | the seaside | more tidy.
I mean | to be on | to | the open space | most lovely.
I like | to be |on | per the seaside | more lovely.
I mean | to go | to | the open space | most tidy.

但在真实世界中,因为有不同的语序和词块分解方法,所以实际上有更多可能的词块组合:

I try | to run | at | the prettiest | open space.
I want | to run | per | the more tidy | open space.
I mean | to forget | at | the tidiest | beach.
I try | to go | per | the more tidy | seaside.

现在需要扫描所有这些生成的句子,找到那个听起来“最像人话”的句子。

为此,我们将每个生成的句子与来自英语书籍和新闻故事的数百万个真实句子进行比较。我们拥有的英语文本越多越好。

我们采用这种可能的翻译:

I try | to leave | per | the most lovely | open space.

很可能没有人用英语写过这样的句子,所以它不会与我们的数据库任何句子非常相似。我们给这个可能的翻译设定一个低概率的得分。

但看看下面这个可能的翻译:

I want | to go | to | the prettiest | beach.

这个句子和我们的训练集中的句子很类似,所以它将获得一个高概率的得分。

在尝试过所有可能的句子之后,我们会选择那个,既是最有可能的词块翻译,又与真实英语句子最相似,的句子。

我们最后的翻译将是“I want | to go | to | the prettiest | beach.

我想去最漂亮的海滩。”不错!

有里程碑意义的统计机器翻译

当有足够多的训练数据的时候,统计机器翻译系统的性能要优于基于语言规则的系统。 Franz Josef Och基于这些想法并做出了改进,并在21世纪初使用它们构建了Google翻译。机器翻译终于可以被全世界使用。

早期的时候,基于概率翻译的“愚蠢”方法居然比语言学家设计规则系统做的更好,这让每个人都感到惊讶。这导致了80年代的时候,研究人员会(有点刻薄的)说:

“每当我炒了一个语言学家鱿鱼的时候,我的翻译准确度就会上升。” Frederick Jelinek

统计机器翻译的局限性

虽然统计机器翻译系统效果还不错,但是他们难于构建和维护。每一对需要翻译的新语言,都需要专业人士对一个全新的多步骤“翻译流水线”进行调试和修整。

因为构建这些不同的流水线需要做太多工作,所以我们必须进行权衡。如果你要用Google翻译把格鲁吉亚语翻译成泰卢固语(印度东部德拉维拉语言),那么作为一个中间步骤,它必须先翻译成英语。因为并没有太多格鲁吉亚到泰卢固语的翻译需求,所以在这一对语言上投入太多并没有太大意义。相比于英语翻译到法语,它可能会使用一个更低级的“翻译流水线”。

如果我们能让计算机为我们做所有令人讨厌的开发工作,这不更好么?

让电脑翻译的更好——无需昂贵的专家们

机器翻译的核心是一个黑盒系统,它通过查看训练数据,自己就可以学习如何翻译。使用统计机器翻译,人们仍然需要建立和调整多步骤的统计模型。

2014年,KyungHyun Cho的团队取得了突破。他们发现了一种应用深度学习来构建这种黑盒系统的方法。他们的深度学习模型采用平行语料库,并使用它来学习如何在无任何人为干预的情况下在这两种语言之间进行翻译。

两个宏伟的方法使这成为可能 - 循 环神经网络和编码。通过巧妙地结合这两个想法,我们可以建立一个能够自学的翻译系统。

循环神经网络

我们已经在第2章讨论过了循环神经网络,让我们快速回顾一下。

一个常规(非循环)神经网络是泛型机器学习算法,接收一序列数字并计算结果(基于先前的训练)。神经网络可以用作一个黑盒子,来解决很多问题。例如,我们可以基于房子的属性,使用神经网络来计算房屋的近似价格:


但是像大多数机器学习算法一样,神经网络是无状态(Stateless)的。你输入一序列数字,神经网络计算并输出结果。如果再次输入相同的数字,它总是计算出相同的结果。它没有进行过的计算的记忆。换句话说,2 + 2总是等于4。

一个循环神经网络(Recurrent Neural Network或简称RNN)是一个稍微改进过的神经网络的版本,区别是RNN先前的状态是可以被当做输入,再次带入到下一次计算中去。这意味着之前的计算结果会更改未来计算的结果!

人类痛恨他:一个黑科技就让机器变得更聪明!

我们为什么要这样做?无论我们上次计算结果是什么,2 + 2不应该总是等于4么?

这个技巧允许神经网络学习数据序列中的规律。例如,基于句子的前几个词,你可以使用它来预测句子中下一个最有可能的单词是什么:

实现智能手机输入法的“自动更正”的方法之一

当你想要学习数据中的规律时,RNN将会非常有用。因为人类语言其实只是一个大而复杂的“规律”,自然语言处理的各个领域越来越多地使用RNN。

如果你想了解更多关于RNN,你可以阅读第2章,我们使用了RNN来生成一本海明威写作风格的假书,然后使用同一个RNN生成了超级马里奥兄弟的游戏关卡。

编码

我们需要回顾的另一个想法是编码Encoding。在第4章中作为脸部识别的一部分,我们谈到了编码。为了解释编码,让我们稍作调整,了解一下如何用电脑区分两个人。

当你试图用电脑区分两张脸时,你从每张脸收集不同的测量值,并与其他脸部比较这些测量值。例如,我们可以测量耳朵的大小或眼间的间距,比较两个图片的测量值以确定他们是否是同一个人。

你可能已经从观看热门影视剧CSI当中对这个想法耳熟能详了(知乎无法上传太大的GIF,看图请戳原文)。

把面部特征转换为一系列测量值的想法就是编码的例子之一。我们获取到原始数据(面部图片),并将其转换为代表这张脸的一系列测量值(编码)。

但是像我们在第4章中看到的,我们不必提出一个具体的面部特征列表来测量我们自己。相反,我们可以使用神经网络,让它自动从面部生成测量值。找出哪些测量值能够区分两个相似的人,计算机在这方面比我们做的更好:

这些是由神经网络产生的面部特征测量值,训练后的该神经网络可以保证不同的数字代表了不同人的面部。

这是我们的编码。它让我们用简单的东西(128个数字)代表非常复杂的东西(一张脸的图片)。现在比较两张脸更加容易了,因为我们只需要比较这128个数字而不是比较整张脸的图像。

你猜怎么着?我们可以用句子做同样的事情!我们可以把任何一个句子表达成一系列独特的编码:

这一序列数字代表的是英语句子“有趣的机器学习!”。不同的句子将由不同的数字集表示。

为了生成这个编码,我们将句子输入到RNN中,一次一个词。最后一个词处理之后的最终结果,就将是表示整个句子的数值:

因为RNN具有记忆功能,能够记住处理过得每个词,所以它计算的最终编码表示句子中的所有词。

棒极了,所以现在我们有一种方法来把一个整个句子表示成一组独特的数字!我们不知道编码中的每个数字是什么意思,但这并不重要。只要每一句话都能由一组独特的数字标识出来,那么我们就不需要准确地知道这些数字是如何生成的。

让我们开始翻译吧!

好的,所以我们知道怎样使用RNN去个一句话编码并生成一组独特的数字。它有什么用呢?事情从这儿开始变得酷炫了!

如果我们使用两个RNNs并将它们首尾相连呢?第一个RNN可以给句子生成编码。然后,第二RNN遵循相反的逻辑,解码得到原始句子:

当然,编码然后再解码并得到原始语句并没有太大用处。但是如果(这里是问题的关键),我们训练第二个RNN,使它解码成西班牙语而不是英语,这会怎样?我们可以使用平行语料库训练数据来训练它:

就像这样,我们有一个通用的方法,将一序列英语单词转换成同样的西班牙语单词序列!

这是一个强有力的想法:

l 这种方法主要受限于你拥有的训练数据量和你可以投入的计算机生产力。机器学习研究人员仅仅在在两年前发明了这个方法,但它已经表现的和统计机器翻译系统一样好了,而后者花了20年时间才开发完善。

l 这不依赖于任何关于人类语言规则的了解。算法自己计算出这些规则。这意味着你不需要专业人士来调整“翻译流水线”的各个步骤,计算机为你把这个做好了。

l 这种方法适用于几乎任何种类的序列到序列sequence-to-sequence问题!而且事实证明,许多有趣的问题都实际上是 序列到序列的问题。继续阅读了解其他你可以做的酷炫的事!

注意,我们忽略了一些处理真实数据会碰到的问题。例如,如何处理不同长度的输入和输出?这还需要一些额外的工作(请参见bucketing和padding)。非常用词翻译也是一个问题。

构建你自己的序列到序列翻译系统

如果你想建立自己的语言翻译系统,这儿有一个包括可以在英语和法语之间翻译的TensorFlow的demo。然而,这并不是给胆小鬼或预算有限的人准备的。这仍然是一项新技术,并且资源有限。即使你有一台带有高级显卡的高级电脑,可能也需要连续一个月的时间来训练你自己的语言翻译系统。

此外,序列到序列语言翻译技术正在及快速地改进,以至于难以跟上。许多最近的改进(如添加注意机制attention mechanism或上下文跟踪tracking context)显着改善了翻译结果,但这些发展太过前沿,以至于他们甚至还没有维基百科页面。如果你想做认真的去做任何序列到序列学习,随着技术的发展,你需要持续保持更新,。

序列到序列模型的无穷力量

那么,我们还能用序列到序列模型做什么呢?

大约一年前,Google的研究人员表示,你可以使用序列到序列模型来建造AI机器人。这个想法是如此简单,并且令人震惊的是,它真的有效。

首先,他们获取了一些Google员工和Google技术支持小组之间的聊天记录。然后他们训练了序列到序列模型,其中输入的句子就是雇员的问题,而技术支持团队的回复是该句子的“翻译”。

当用户与机器人进行交互时,他们将使用该系统“翻译”每个用户的消息以获得机器人的响应。

他们最终得到的是一个半智能机器人,(有时)可以回答真正的技术支持问题。下面是一部分用户和机器人之间的对话示例:

人:连接被拒绝或类似的东西

机器:我可以知道你连接的网络连接的版本吗?

人:我不确定我知不知道

机器:是网络连接提示任何用户证书?

人类:是的

机器:你现在在家还是在工作?办公室?

人:我在家

机器:试试这个。 goto <URL redacted>页面,然后输入您的姓名和密码

人类:完成

机器:尝试使用<NAME redacted>登录,然后检查其是否正常工作

人类:是的,现在它在工作!

机器:棒极了。还有什么我可以帮助你的?

他们还试图建立一个基于数百万部电影字幕的聊天机器人。他们的想法是,使用电影角色之间的对话作为一种训练机器人像人一样说话的方式。输入句子是一名角色的一句话,“翻译”是另一名角色在对话里回应他的内容:

他们得到了很有意思的结果。机器人不仅仅像一个人,更是显示出了一点点智能化:

人类:我的名字是david。我的名字是什么?

机器:david。

人:我的名字是约翰。我的名字是什么?

机器:约翰。

人类:你是领导还是追随者?

机器:我是领导者。

人类:你是追随者还是领导者?

机器:我是领导者。

这只是可能性的开始。我们将不局限于将一个句子转换成另一个句子,同样,我们制作一个图像到序列的模型,它可以将图像转换为文本!

Google的另一个团队通过将第一个RNN替换为卷积神经网络(如我们在第3章中所了解的那样)。这允许输入是图片而不是句子,其余的工作基本相同:

就像这样,(只要我们有很多很多的训练数据)我们就可以把图片变成单词!

Andrej Karpathy把这个想法进行了拓展,以构建一个通过分别处理图像的多个区域,来详细描述图像的系统:

Andrej Karpathy论文中的图片

这个想法使得我们可以构建一个,能够按照奇怪的要求找到特定图片的图片搜索引擎:

例子来自image sentence ranking visualize

甚至有研究人员正在研究相反的问题,仅仅基于文本描述产生一个完整的图片!

从这些例子,你可以开始想象的各种可能性。 到目前为止,序列到序列应用在从语音识别到计算机视觉各个领域。 我猜,明年会有更多的应用。

如果您想更深入地了解序列到序列模型和翻译,以下是一些推荐的资源:

看到此问题就想写一篇详尽的机器翻译从古至今的发展历程。

本文从三个方面进行阐述:

机器翻译基本原理



简单来说,机器翻译就是把一种语言翻译成另外一种语言,在这里,我用的例子都是从中文翻译成英文。上面的句子用Source标记,即源语言,下面用Target标记,即目标语言,机器翻译任务就是把源语言的句子翻译成目标语言的句子。

机器翻译是人工智能的终极目标之一,面临如下国际公认的挑战。





第一个挑战,译文选择。在翻译一个句子的时候,会面临很多选词的问题,因为语言中一词多义的现象比较普遍。比如这个例子中,源语言句子中的『看』,可以翻译成『look』、『watch』 『read 』和 『see』等词,如果不考虑后面的宾语『书』的话,这几个译文都对。在这个句子中,只有机器翻译系统知道『看』的宾语『书』,才能做出正确的译文选择,把『看』翻译为『read』 ,『read a book』。译文选择是机器翻译面临的第一个挑战。





第二个挑战,是词语顺序的调整。由于文化及语言发展上的差异,我们在表述的时候,有时候先说这样一个成份,后面说另外一个成份 ,但是,在另外一种语言中,这些语言成分的顺序可能是完全相反的。比如在这个例子中,『在周日』,这样一个时间状语在英语中习惯上放在句子后面。再比如,像中文和日文的翻译,中文的句法是『主谓宾』,而日文的句法是『主宾谓』,日文把动词放在句子最后。比如中文说『我吃饭』,那么日语呢就会说『我饭吃』。当句子变长时,语序调整会更加复杂。






第三个挑战,数据稀疏。据不完全统计,现在人类的语言大约有超过五千种。现在的机器翻译技术大部分都是基于大数据的,只有在大量的数据上训练才能获得一个比较好的效果。而实际上,语言数量的分布非常不均匀的。右边的饼图显示了中文相关语言的一个分布情况,大家可以看到,百分之九十以上的都是中文和英文的双语句对,中文和其他语言的资源呢,是非常少的。在非常少的数据上,想训练一个好的系统是非常困难的。


机器翻译发展历程





从1949年翻译备忘录提出到现在,大约过了七十多年。这期间,机器翻译经历了多个不同的发展阶段,也涌现出了很多方法。总结起来主要有三类,一开始是基于规则的方法,然后发展为基于统计的方法。一直到最近几年出现的基于神经网络的方法。下面我分别来简单介绍一下这几个方法的原理。





基于规则的翻译,翻译知识来自人类专家。找人类语言学家来写规则,这一个词翻译成另外一个词。这个成分翻译成另外一个成分,在句子中的出现在什么位置,都用规则表示出来。这种方法的优点是直接用语言学专家知识,准确率非常高。缺点是什么呢?它的成本很高,比如说要开发中文和英文的翻译系统,需要找同时会中文和英文的语言学家。要开发另外一种语言的翻译系统,就要再找懂另外一种语言的语言学家。因此,基于规则的系统开发周期很长,成本很高。


此外,还面临规则冲突的问题。随着规则数量的增多,规则之间互相制约和影响。有时为了解决一个问题而写的一个规则,可能会引起其他句子的翻译,带来一系列问题。而为了解决这一系列问题,不得不引入更多的规则,形成恶性循环。





大约到了上世纪九十年代出现了基于统计的方法,我们称之为统计机器翻译。统计机器翻译系统对机器翻译进行了一个数学建模。可以在大数据的基础上进行训练。


它的成本是非常低的,因为这个方法是语言无关的。一旦这个模型建立起来以后,对所有的语言都可以适用。统计机器翻译是一种基于语料库的方法,所以如果是在数据量比较少的情况下,就会面临一个数据稀疏的问题。同时,也面临另外一个问题,其翻译知识来自大数据的自动训练,那么如何加入专家知识? 这也是目前机器翻译方法所面临的一个比较大挑战。



翻译知识主要来自两类训练数据:平行语料,一句中文一句英文,并且这句中文和英文,是互为对应关系的,也叫双语语料;单语语料,比如说只有英文我们叫单语语料。


从平行语料中能学到什么呢?翻译模型能学到类似于词典这样的一个表,一般称为『短语表』。比如说『在周日』可以翻译成『on Sunday』。后面还有一个概率,衡量两个词或者短语对应的可能性。这样,『短语表』就建立起两种语言之间的一种桥梁关系。


那么我们能够用单语语料来做什么呢?我们用单语语料来训练语言模型。语言模型是做什么事情的呢?就是衡量一个句子在目标语言中是不是地道,是不是流利。比如这里说『read a book』,这个表述是没有问题的,『read a 』后面跟一个『book 』这个词的概率可能是0.5,那么如果说『read a TV』呢?可能性就很低。因为这不符合目标语言的语法。


所以,翻译模型建立起两种语言的桥梁,语言模型是衡量一个句子在目标语言中是不是流利和地道。这两种模型结合起来,加上其他的一些特征,就组成了一个统计机器翻译这样的一个公式。


神经网络机器翻译





神经网络翻译近年来迅速崛起。相比统计机器翻译而言,神经网络翻译从模型上来说相对简单,它主要包含两个部分,一个是编码器,一个是解码器。编码器是把源语言经过一系列的神经网络的变换之后,表示成一个高维的向量。解码器负责把这个高维向量再重新解码(翻译)成目标语言。


随着深度学习技术的发展,大约从2014年神经网络翻译方法开始兴起。2015年百度发布了全球首个互联网神经网络翻译系统。短短3、4年的时间,神经网络翻译系统在大部分的语言上已经超过了基于统计的方法。

目前,评价机器翻译的译文质量主要有两种方式。第一种,人工评价。一说人工评价,大家第一时间就会想到『信、达、雅』,这是当年严复老先生提出来。我们用『信』来衡量忠实度,语言是为了交流的,『信』衡量译文是不是忠实地反映了原文所要表达的意思。『达』可以理解为流利度,就像刚才语言模型那样衡量的,译文是不是在目标语言中是一个流畅、地道的表达。至于『雅』,相对比较难衡量,这是仁者见仁、智者见智的。目前来说,机器翻译水平还远没有达到可以用『雅』来衡量的状态。




第二种,自动评价。自动评价能够快速地反映出一个机器翻译的质量好还是不好,相比人工评价而言,自动评价成本低、效率高。


现在一般采用的方法是,基于n-gram(n元语法)的评价方法。通常大家都用BLEU值。一般地,BLEU是在多个句子构成的集合(测试集)上计算出来的。这个测试集可能包含一千个句子或者两千个句子,去整体上衡量机器翻译系统好还是不好。有了这个测试集以后,需要有参考答案(reference)。所谓参考答案就是人类专家给出的译文。这个过程很像考试,通过比较参考答案和系统译文的匹配程度,来给机器翻译系统打分。


为了简便,此处我们用一个句子进行说明。比如说就这个句子而言,reference是『I read a book on Sunday』。那么上图中有两个系统译文,一个是system1 ,一个是system2。显见,system2的得分会更高,因为它的译文跟reference是完全匹配的,system1匹配了一些片段,但是不连续。在计算BLEU得分的时候,连续匹配的词越多,得分越高。


当然,BLEU值也有比较明显的缺点。用一个词来举例,比如『你好』,人给出的一个参考译文是『hello』。机器给出的译文是『how are you』,跟这个reference没有一个词匹配上,从BLEU值的角度来看,它得分是零。但是你能说它错吗?它翻译的很好。所以BLEU值的得分,受reference影响。Reference越多样化,匹配上的可能性就会越大。一般来说,用于评价机器翻译质量的测试集有4个reference,也有的有一个reference,也有的有十几个reference。BLEU分数受测试领域、reference多样性等多种因素的影响,抛开具体的设置,单说一个分数不具有参考性。


基于同一个测试集,针对不同的翻译系统结果,可以依据上述公式计算BLEU值,从而快速比较多个翻译系统的好坏。通常国际评测中,同时采用自动评价和人工评价方法衡量参赛系统。



这张图显示了近年来机器翻译质量的进步。这个BLEU值是在5个reference上计算出来的,衡量我们中英翻译的质量。2014年的时候,我们用的还是统计机器翻译的方法。从2015年到现在,随着神经网络翻译方法的不断进步,翻译质量一直是持续提高的。通常来说,BLEU值提高1个百分点就是非常显著的提高。在统计机器翻译时代,每年BLEU提高1个百分点都是比较大的挑战。而在神经网络翻译上线后的这四年之间,我们大约每年都有5、6个百分点BLEU值的提升。


我们通过一个例子,直观的感受一下神经网络方法的译文质量。这个例子是某一年的大学英语六级考试的翻译真题。这个例子我飘了不同的颜色,表示两种语言句子成分的对应关系。从颜色上我们可以看出来,与原文相比,译文的词语顺序发生了比较大变化。比如说,中文句子中的『尽快』, 在英语端,『as soon as possible』换到后面去了,进行了比较长距离的调序。这在统计机器翻译时代是非常难做的事情,但是神经网络翻译能够把它处理的很好。


刚才说的它包含编码器和解码器,先来看编码器。它进行了一个双向的编码,双向的编码干了一个什么事情?就是把词用词向量来表示。那么如何做到这一点呢?我们首先有一个词向量表,是通过神经网络训练出来的。源语言句子中的词,可以用一个one hot的向量表示。所谓one hot就是,比如上例中中文句子有8个词。哪个词出现了,就把这个词标为1,其他的词标为0。比如第4个词“看”这个词是1,那么其他的都是0。这两个矩阵这么一乘,相当于一个查表的操作。就把其中这个词向量表的一列取出来了,那么这一列的向量就代表了这个词。神经网络里面所有的词都会用向量来表示。得到词的向量表示后,再经过一个循环神经网络的变换,得到另外一个向量,称为Hidden State(隐状态)。


为什么做了一个双向的编码?是为了充分利用上下文信息。比如说,如果只是从左往右编码,“我在周日看”,看的是什么呢?“看”后面的你不知道,因为你只得到了“看”前面的信息。那么怎么知道后面的信息呢,这时候我们就想那能不能从后面到前面再进行一个编码,那就是“书本一了看”,从后面往前的编码,这时候“看”呢既有前面的信息,也有后面的信息。所以它有了一个上下文的信息,可以进一步提高译文质量。


刚才提到,每个词经过一系列变换,映射为一个向量表示。如果将双向编码的向量结合起来呢? 现在一般采用一个非常简单的方法,将两个向量进行拼接。比如两个256维的向量,拼接完成后得到一个512维的向量,用来表示一个词。




编码完成以后,需要把这个源语言的句子压缩到一个向量里去。这一步是怎么做的?一个最简单的方式是把这所有的向量加起来。但是后来大家发现这样其实不太合理。为什么不太合理,因为每一个词都是被作为相同的权重去对待的,那显然是不合理的,这时候就提出了一个注意力机制,叫Attention。这里用不同深度颜色的线去表示Attention的能量强弱,用以衡量产生目标词时,它所对应的源语言词的贡献大小。所以呢h前面又加一个α,α就表示它的一个权重。




有了句子的向量表示后,就掌握了整个源语言句子的所有的信息。解码器就开始从左到右一个词一个词的产生目标句子。在产生某个词的时候,考虑了历史状态。第一个词产生以后,再产生第二个词,直到产生句子结束符EOS(End of Sentence) ,这个句子就生成完毕了。




去年以来出现了一个大杀器,TRANSFORMER。基本上取得了目前来说神经网络机器翻译最好的效果。TRANSFORMER的改进在哪里,来源一篇谷歌的论文,叫“Attention Is All You Need”。上文提到有一个注意力机制,这篇论文所提出的方法,可以只用注意力机制就把翻译搞定了。



那么它是怎么来做的呢?它其实也有一个编码器和一个解码器,这个是架构是没有变的。其中编码器和解码器都有多层。下面我们通过一个具体例子,来简单解释一下其原理。





我们这个句子就包含两个词 『看书』。

论文中,把每一个词都用三个向量表示,一个叫Query(Q),一个叫Key(K),另外一个是Value(V)。那怎么得到一个词的Query、Key和Value呢?左边有三个矩阵,WQ、WK和WV,只要跟每一词向量相乘,就能够把这个词转换成三个向量表示。那么目标是什么,我们想把『看』这样一个词,通过一系列的网络变换,抽象到高维的向量表示。


通过Q和K进行点积,并通过softmax得到每个词的一个attention权重,在句子内部做了一个attention,称作Self Attention。Self Attention可以刻画句子内部各成分之间的联系,比如说“看”跟“书”之间就建立了联系。这样,每个词的向量表示(Z)就包含了句子里其他词的关联信息。






作者认为只有这一个QKV不太够,需要从多个角度去刻画。如何做呢?提出了“Multi-head”。在里面论文里面定义了8组QKV的矩阵,当然也可以定义16个,这个数值可以自定义。在通过一系列变换,最终得到了每个词的向量表示。这只是encoder一层。那么这一层的输出做为下一层的输入,再来一轮这样的表示,就是Encoder-2,那么再来一轮就是第三层,如此一直到第N层。Decoder也是类似,不再解释。感兴趣的可以阅读原文。


技术挑战

尽管神经网络带来了翻译质量的巨大提升,然而仍然面临许多挑战。





第一个挑战就是漏译,很多时候,原语言句子有些词没有被翻译出来,比如说在这个句子里面,『假』和『恶』没有被翻译出来。甚至有的时候输入一个长句子有逗号分隔,有几个子句都没有翻译出来。这确实是神经网络翻译面临的一个问题。通过刚才的讲解知道,翻译模型把原文句子整体读进去以后形成了一个向量,然后再对这个向量进行解码。翻译模型认为有些词不应该产生,从而漏掉了译文。


漏译的原因是什么,如何解决这个问题?这方面有很多工作,下面我就从几个方面去讲一下。我们今年有一篇论文从数据方面去分析。我们发现漏译与词语的熵成正相关关系,这个词的熵越大,漏译的可能性越大。它所对应的目标语言词越多,概率越分散(熵越大),越有可能被漏译。



左边的例子,S1对应3种不同的翻译,(s1,t1) (s1,t2) (s1, t3 t4),它的熵就比较大。我们把所有对应的翻译统一替换为一个特殊词『stoken4s1』,以降低词语翻译的熵值。右边呢是我们提出来的三种方法,去改善翻译结果,包括pre-training, multitask learning, two-pass decoding。大家有兴趣的话,可以去看论文。



从实验结果来看,相比Transformer,在中英翻译质量上有显著提高,高熵值词语的漏译比例显著下降。





第二个挑战就是数据稀疏。相比于统计机器翻译,这个问题对神经网络翻译而言,更严重。实验表明,神经网络对于数据量更敏感。



针对数据稀疏问题,我们提出了一个多任务学习的多语言翻译模型。在进行多语言翻译的时候,源语言共享编码器,在解码端,不同的语言,使用不同的解码器。这样在源语言端就会共享编码器的信息,从而缓解数据稀疏问题。后来,加拿大蒙特利尔大学、Google等在此方向上陆续开展了多个工作。



实验表明,我们的方法收敛更快,翻译质量也明显提高。更多细节,请阅读论文。




这篇论文是2018年EMNLP上的best paper,提出了一个统一的框架。A)里面蓝色的点和红色的点分别代表两种不同的语言句子。如何通过两种语言的单语数据构建翻译系统呢?


首先我要做一个初始化,B)是初始化。首先构建一个词典,把这两种语言之间的词做一下对齐。C)是语言模型,基于单语数据,可以训练语言模型,用来衡量这个语言的流利度。那么D)是什么? D)是一个称作Back Translation的技术,是目前大家常用的一个用于增强数据的方法。


用B)初始化后构建的一个词典,就可以从一种语言翻译为另外一种语言,哪怕是先基于词的翻译。然后,用另外一种语言的语言模型去对译文进行衡量。然后把得分高的句子挑出来,再翻译回去,这一过程称作Back Translation,然后再用原来那种语言的语言模型去衡量这个句子好还是不好。这样一轮一轮的迭代,数据就会变得越来越好,系统翻译质量也会越来越好。


第三个挑战就是引入知识,如何将更多丰富的知识引入翻译模型是机器翻译长期面临的挑战。这个例子中,中文句子中『横流』对应到目标语言端是没有翻译出来的,用一个特殊的记号叫UNK(Unknown Word)来标记。



那么我们做一个什么样的工作呢?我们引入了几种知识,第一种就是叫短语表或者叫词表。如果发现『横流』这个词没有被翻译出来,我们就去查这个词典,这个词典就作为一个外部知识被引入进来了。同时,那我们还引入了一个语言模型,语言模型去衡量目标语言的这个句子是不是流畅。同时,我们引入一个长度奖励特征去奖励长句子。因为句子越长,可能漏掉的信息就越少。这个工作首次将统计机器翻译中的特征引入神经网络翻译,可以作为引入知识的一个框架。


但是目前来说,引入知识还是比较表层的。知识的引入,还需要更多更深入的工作。比如说这个例子, 这个句子是存在歧义的。『中巴』 在没有给上下文的时候,是无法判断『巴』是哪个国家的简称。


但是下面的句子,有一个限定,“金砖框架”。这个时候,人们就知道该如何翻译了。但是,机器能不能知道?大家可以去翻译引擎上去验证。因为人是知道中国跟哪些国家是金砖国家,但是机器没有这个知识。怎么把这个知识交给机器去做,这是一个非常挑战的问题。


还有一个挑战,是可解释性:神经网络翻译到底是神还是神经?虽然人们可以设计和调整网络结构,去优化系统,提高质量。但是对于该方法还缺乏深入的理解。

也有很多工作去试图研究网络内部工作机理。清华大学有一篇文章从注意力的角度去进行研究。



比如左边的例子,出现了一个UNK,那个UNK是怎么产生的,它虽然没有被翻译出来,但是出现在正确的位置,占了一个位置。通过Attention对应关系,可以看到这个UNK对应到『债务国』。右边例子是一个重复翻译的现象。神经网络机器翻译除了经常漏翻译之外,还会经常重复翻译。比如说出现了两个“history”。那么通过这个对应关系我们就可以看到,第6个位置上的“history”是重复出现的,它的出现不仅跟第一个位置“美国人”和第二个位置“历史”相关,还跟第5个位置“the”相关。因为产生了一个定冠词“the”,模型认为这个地方应该出现一个“history”,这篇文章对这样的例子进行了大量的分析,并且给出了一些分析结果和解决方案。如需进一步了解,可以看原始论文。


还有第五个挑战 ,是机器翻译长期以来面临的挑战,语篇翻译。大部分的翻译系统现在所使用的翻译方法都是基于句子,以句子作为单位,一个句子一个句子的进行翻译。单看这三个句子翻译还可以接受。但是连起来看就觉得生硬不连贯。


我们的方法输出的结果。可以看到,定冠词、代词的加入提升了句子间的连贯性。




我们提出了一个两步解码的方法。在第一轮解码中单独生成每个句子的初步翻译结果,在第二轮解码中利用第一轮翻译的结果进行翻译内容润色,并且提出使用增强式学习模型来奖励模型产生更流畅的译文。这是我们系统输出的一个结果,整体上,流畅度提高了。 具体细节,可以去看论文。


如果觉得文章对你有帮助,请大家点赞、关注,升职加薪赢取白富美就靠你们了( ̄▽ ̄)~*

前面几位已经把基本原理讲得很透彻了,那我就来跟进一点最新的东西~

目前,目标语言端的无标注单语数据已被广泛应用于在机器翻译任务中。然而,目标语言端的无标注数据一旦使用不当,反而会给模型结果带来负面影响。为了有效利用大规模源语言端和目标语言端的单语数据,微软亚洲研究院在 EMNLP 2019 上发表的论文中,提出一种简单的语料数据使用流程,只需要四个步骤就能极大地提高模型翻译结果。

在机器翻译任务中,如何利用好大规模的单语语料数据来辅助翻译模型的训练是非常重要的研究方向。目前,目标语言端的无标注单语数据已经被证实能够极大的提升模型的翻译质量,并被广泛利用,最著名的就是反向翻译技术 BT(back-translation)。相比之下,源语言端的无标注单语数据则并没有被很好地利用。为此,我们在这个工作中进行了系统的研究,来阐明如何能够同时利用好源语言端和目标语言端的无标注单语数据,并且我们提出了一种非常有效的数据使用流程,只包括简单的四个步骤就能极大地提高模型翻译结果。通过在 WMT 英德互译和 WMT 德法互译任务上的实验,我们验证了所提出算法的有效性,同时取得了非常优越的性能。


我们首先尝试验证对于两个方向(源语言端 X、目标语言端 Y)无标注单语数据在大规模语料下的有效性,对于两种单语数据,常见的方法为:

1) 对于目标语言端的单语数据 y,常用的方法为反向翻译技术 BT(back-translation),即我们会使用一个 Y->X 的反向翻译模型来翻译 y 得到对应的结果 x',然后将(x', y)作为伪双语数据参与训练 X->Y 模型;

2) 而对于源语言端的单语数据 x,常用的方法为正向翻译技术 FT(forward-translation),即我们使用正向的翻译模型 X->Y 来翻译 x 得到对应的结果 y',然后将(x, y')作为伪双语数据参与训练 X->Y 模型。

我们在不同的大规模数据量(20M、60M、120M单语数据)下进行实验,发现了如下实验现象:

图1:单语数据量的增加导致翻译模型性能的变化


1) 当只有目标语言端单语数据的时候,随着单语数据的量越来越多,BT 所带来的模型性能呈现出先上升后下降的趋势,并且下降速度非常快(如图(a)所示)。

2) 当只有源语言端的单语数据的时候,随着单语数据的量越来越多,FT 所带来的模型性能呈现缓慢下降的趋势,不过下降速度比 BT 略小(如图(b)所示)。

这样的实验结果说明单独使用大量的某一端单语数据并不是一个好的策略,相反这样的方式反而会给模型结果带来负面影响。我们也分析了其中的部分原因,比如目标端单语数据产生的伪双语数据是来源于另一个方向的翻译模型,数据质量并不可控,所以大量的伪单语数据则会使得模型训练产生了偏差。因此,我们需要找到一种合适有效的方式来利用大规模的单语数据。


假设我们关注的是 X 和 Y 语言之间的互译,给定的有标双语数据集为 B,我们希望得到的是 X->Y 和 Y->X 两个翻译模型,分别记做 f 和 g。同时,我们需要准备两份无标注单语数据 Mx 和 My,分别对应 X 和 Y 两种语言。我们提出了一个清晰的数据使用和训练流程,将两端的无标注单语数据都进行了利用。我们提出的算法包括如下的四步:

图2:数据使用和训练流程

(1)有标双语模型预训练:我们首先在双语数据 B 上训练得到 X->Y 方向的翻译模型 f,和 Y->X 方向的翻译模型 g。同时我们会用不同的随机种子再次训练得到两个新模型 f' 和 g'(为了在第四步中使用)。

(2)无标注数据翻译:我们将 Mx 中的每一个句子 x 用模型 f 翻译到 Y 语言,对 My 中的句子 y 用模型 g 翻译到 X 语言,得到两个新的伪标注数据集合 Bs={(x, f(x))|x∈Mx}, Bt={(g(y),y)|y∈My}。

(3)有噪声训练:我们在数据集 B、Bs 和 Bt 的源语言端都加上噪声,加噪声的方式包括:a)随机将单词替换为<UNK>;b)随机丢弃句子中的某些词语;c)随机打乱句子中连续的 k 个单词顺序。在新的有噪声的数据集上,我们训练对应的模型 f1:X->Y 和 g1:Y->X。在此阶段,我们建议使用大规模的无标注数据。

(4)微调:最后,在得到 f1 和 g1 之后,我们用第一步中训练得到的新的双语模型 f' 和 g' 来重新翻译 Mx 和 My 中的部分无标注数据,得到新的 Bs' 和 Bt' 数据集,然后在这份数据上再将 f1 和 g1 微调成最终所需要的模型。


我们在 WMT 英语和德语的双向翻译,以及 WMT 德语和法语之间的互相翻译任务上进行了实验验证。我们采用的模型是 Transformer Big 模型,在第三阶段,我们选用了120M(两边分别60M)的无标注单语数据,第四阶段,使用40M(两边分别20M)无标注的单语数据进行微调。评测所采用的指标为 SacreBLEU score。我们得到的实验结果如表1和表2所示,具体结果如下:

表1:WMT 英德互译上的 SacreBLEU 结果
表2:WMT 德法互译上的 SacreBLEU 结果


可以看出,我们的模型在每一步训练阶段,结果都会有一定提高,如第三步有噪声训练阶段取得了2个点的 BLEU 提升,而在第四阶段微调阶段又取得了至少1.5个点的 BLEU 提升。

同时我们和目前已经存在的最好方案进行了对比,我们的模型取得了当下最好的翻译结果(表3和表4所示)。

表3:WMT 英德上方案比较
表4:WMT 德英上方案比较


最后我们对流程中的每一部分也进行了一定的分析,比如不同的语料使用的结果(图3(a)),有噪声数据和随机 sample 的数据上的训练结果(图3(b)),以及不同的数据微调方式的结果(图3(c)),得到的结论证明我们的使用方法确为最优方案。

图3:WMT 英德上针对不同流程的实验结果总结


在这篇文章中,我们提出了一种简单高效的无标注单语语料的数据使用和模型训练流程,只包含了简单的四个步骤,并且对不同的无标注单语语料的使用方案进行了详细的讨论和对比。另外我们还验证了如下结论:(1)只使用源语言端或者目标语言端无标注单语数据,效果不会随着数据量的增加而增加;(2)源语言端和目标语言端的无标注单语数据组合在一起使用时作用是最大的,实验效果会随着数据的增多而得到提升;(3)有噪声训练这一阶段对提升最终性能有明显的帮助。

了解更多技术细节,请点击论文链接查看原文:aka.ms/AA6i2nr


本账号为微软亚洲研究院的官方知乎账号。本账号立足于计算机领域,特别是人工智能相关的前沿研究,旨在为人工智能的相关研究提供范例,从专业的角度促进公众对人工智能的理解,并为研究人员提供讨论和参与的开放平台,从而共建计算机领域的未来。

微软亚洲研究院的每一位专家都是我们的智囊团,你在这个账号可以阅读到来自计算机科学领域各个不同方向的专家们的见解。请大家不要吝惜手里的“邀请”,让我们在分享中共同进步。

也欢迎大家关注我们的微博和微信 (ID:MSRAsia) 账号,了解更多我们的研究

古早的机器翻译方法,不管是找中介语这种非直接式的,还是开始说的字典式的直接翻译,它们本质上,都属于基于规则(rule-based)的机器翻译方法。 简单来讲,这种方法认为,一切语言,不管是东方的、西方的、高语境的、低语境的、书面的、口头的、现在的、甚至是未来的,都有规则。 基于规则的机器翻译,就是想建立一套万用的规则,或者说一套逻辑框架,希望,在实际的翻译中,只要把要翻译的内容填到这个框架中去,就能得到对应的结果。 但是,还有另一部分人认为,语言不是这样的: 它在很多时候,是不受规则限制的。 一句话,应该怎么解读,怎么翻译,是要根据当时的语境来决定的,而语境这种微妙的东西,恰恰常常处于规则之外。 比如这有一个最简单的例子: (昆汀给柯南解释“牛逼”) 还比如,很多时候我们津津乐道的语序问题。关于这一点,可能也不用多说吧我,身边有山东朋友的人平时,应该深有体会你们。 那对于这种不讲规则的情况怎么办呢? 其实,自机器翻译技术出现以来,这个领域里,就一直还存在着另一种不同的实现方案。 这种方法选择的根基,不是规则,而是统计学。 它把机器翻译,看成是一个噪声信道的问题。 具体解释起来就是: 一种语言A,因为经过了一个噪声信道而发生了扭曲变形,于是在这条信道的另一端,它就会呈现为另一种不同的语言,B; 而机器翻译的过程,实际上就是一个解码的过程:就是怎么根据观察到的语言B,把它最大程度地还原成进入信道之前的语言A。 这个怎么找呢?就得靠统计学了。 因为理论上,现在任何语言B中的一个句子,都可能是语言A中一个或几个句子的译文,所以我们要做的,就是从语言B中所有句子里,找出可能被还原成A中某个句子的、概率最大的那句。 在这个过程里,没有词典,也没有语法规则,只有喂给机器的语料库,里面放的是若干已经由别人一对一翻译好的,包含AB两种语言的样本——我们先拿它去给机器做一个“训练”,相当于让它去学习别人怎么翻,然后照猫画虎地一样去那么翻——这么一来,就能在很大程度上避开之前提到过的、基于规则的机器翻译会遇到的种种问题。 21世纪初的时候,基本上所有搞机器翻译的大厂,包括微软、谷歌、Yandex这些,使用的全都是基于统计的机器翻译方法;甚至有一部分公司,直到现在还在完全或者部分在自己的翻译服务商使用这种技术…… 而统计机器翻译的意义,除了让机器翻译的水平有了大幅度的提升,还在于它跟计算机、互联网一起,把翻译的权利,解放到了普通人的手里。 再后来,最近的几年时间里,机翻的水平在大幅提升,是毫无疑问的。只不过,因为它可能已经在真正地融入我们的生活,成为我们学习、工作、获取信息时不能缺少的工具,我们才会对它偶尔的异常表现格外地敏感——这其实刚好反过来,证明了现在的机翻水平,有了巨大的提升。 而所有这些提升,都来自同一个主题: (人工)神经网络。 这种方法具体解释起来其实比较麻烦,如果简单粗暴一点的话,那就是三个字:找特征。 这种神经网络模型,一般包含一个编码器和解码器。它会把源语言的一句话作为输入值,然后经编码器把它的意义映射成一个特征向量;之后,再通过解码器,从这个特征向量中还原出目标语言的句子。 当然,在能真正发挥作用之前,它也需要经过一定规模语料库的训练,才能掌握这种“找特征”的能力;而且,算法模型找到的这些特征,是一些通常无法人类描述、只有机器自己看得懂的特征,也因此,神经网络常常被人称作一个“黑箱”。 但从结果上来看,这种方法实现的翻译准确性,与之前使用的方法相比有了爆炸式的提升: 比如,刚刚提到的2016年谷歌第一次发布神经翻译系统的时候,他们在自己的官方博客上说,新系统比之前的系统在翻译的误差上降低了55%到85%;而且,这套系统还能考虑翻译对象所处的上下文语境。 这还是五年前的结果。现在,随着模型的进一步优化以及训练数据集规模的提升,神经机器翻译不光在翻译的准确度上继续猛增,它还逐渐掌握了一些奇奇怪怪的能力: 比如翻译古诗词—— 比如翻译克林贡语—— 除了这些之外,大家有空还可以关注一下国际上的机器翻译竞赛:其实在最近几年的比赛里,很多我们中国的队伍,包括腾讯、华为、字节跳动、滴滴、Oppo以及一些来自高校的队伍,都取得了非常优秀的成绩——而且可不光是在中英互翻上。

平台注册入口