我暮阳朝升们都知道并喜欢谷歌翻译,这个网站可以即时翻译100种不同的人类语言,就好像通过魔法一样。它甚至可以在我们的手机和智能手表上使用:

Google Translate背后的技术称为机器翻译。它通过允许人们在不可能的情况下进行交流来改变世界。

但我们都知道,高中生一直在使用谷歌翻译...嗯... 协助他们的西班牙语作业15年。这不是旧闻吗?

事青楼悲秋实证明,在过去两年中,深度学习完全改写了我们的机器翻译方法。对语言翻译几乎一无所知的深度学习研究人员正在将相对简单的机器学习解决方案放在一起,这些解决方案击败了世界上最好的专家构建的语言翻译系统。

这一突破背后的技术称为序列到序列学习。这是用于解决多种问题的非常强大的技术。在我们看到它如何用于翻译之后,我们还将学习如何使用完全相同的算法来编写AI聊天机器人并描述图片。


基于规则的计算机翻译

那么我们如何编程计算机来翻译人类语言呢?

最简单的方法是用目标语言中的翻译单词替换句子中的每个单词。这是一个从西班牙语到英语逐字翻译的简单示例:

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

这很容易实现,因为您只需要一本字典来查找每个单词的翻译。但结果很糟糕,因为它忽略了语法和语境

因此,你可能要做的下一件事是开始添doubt,干将莫邪,熹妃传加特定于语言的规则以改善结果。例如,你可以将常见的双字短语翻译为单个组。你可以交换命令名词和形容词,因为它们通常以西班牙语的相反顺序出现在英语中:

那很极道混元有效!如果我们只是继续添加更多规则,直到我们能够处理语法的每一部分,我们的程序应该能够翻译任何句子,对吧?

这是最早的机器翻译系统的工作方式。语言学家提出了复杂的规则,并逐一编程。世界上一些最聪明的语言学家在冷战期间多年来一直努力创建翻译系统,以此更轻松地解释俄语交流。

不幸的是,这只适用于简单、结构清晰的文档,如天气预报。它对于真实世界的文档并不可靠。

问题是人类语言不遵循一套固定的规则。人类语言充满了特殊情况,区域变化,并且只heavyr是破坏了规则。我们讲英语的方式更多地受到几百年前入侵者的影响影响,不是那些坐下来定义语法规则的人。

统计机器翻译

在基于规则的系统失败之后,使用基于概率和统计而不是语法规则的模型开发了新的翻译方法。

构建基于统计的翻译系统需要大量的训练数据,其中完全相同的文本被翻译成至少两种菜温斯基语言。这种双翻译文本称为并行语料库。就像19世纪科学家使用Rosetta Stone从希腊人中找出埃及象形文字一样,计算机可以使用平行语料库来猜测如何将文本从一种语言转换为另一种语言。

幸运的是,有许多双翻译文本已经在奇怪的地方坐着。例如,欧洲议会将其诉讼程序翻译成21种语言。因此研究人员经常使用这些数据来帮助构建翻译系统。

训练数据通常令人兴奋!但这只是数以百万计的干政府文件......

引入概率

与统计翻译系统的根本区别在于,他们不会尝试生成一个精确的翻译。相反,它们会产生数千种可能的翻译,然后他们按照这些翻译的顺序排列。他们通过与训练数据的相似程度来估计“正确”的东西。以下是它的工作原理:

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

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

第2步:查找每个块的所有可能的翻译

接下来,我们将通过查找人类在训练数据中翻译相同块词的所有方法来翻译每个块

值得注意的是,我们不只是在一个简单的翻译词典中查找这些块。相反,我们看到实际的人们如何在现实世界的句子中翻译这些相同的词块。这有助于我们捕捉它们在不同环境中使用的所有不同方式:

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

其中一些可能的翻译比其他翻译更常用。根据每个翻译在我们的训练数据中出现的频率,我们可以给它一个分数。

例如,有人说“Quiero”的意思是“我想要”而不是“我试试”,这更常见。所以我们可以使用“Quiero”在我们的训练数据中翻译成“我想要”的频率更高。

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

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

仅从我们在步骤2中列出的块翻译,我们已经可以通过以不同方式组合块来生成近2,500种不同的句子变体。这里有些例子:

但是在现实世界的系统中,将会有更多可能的块组合,因为我们还会尝试不同的单词排序和不同的分块方式:

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

为此,我们将每个生成的句子与用英语写成的书籍和新闻故事中的数百万个真实句子进行比较。我们可以获得的英语文本越多越好。

采取这种可能的翻译:

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

很可能没有人用英语写过这样的句子,所以它与我们数据集中的任何句子都不太相似。我们将为这种可能的翻译提供低概率分数。

但看看这个可能的翻译:

I want to | go to | the most beautiful beach.

这句话与我们训练集中的某些内容类似,因此它会获得高概率分数。

在尝试了所有可能的句子之后,我们将选择具有最可能的块翻译的句子,同时也是与真实英语句子最相似的句子。

我们的最终翻译将是“情尘风月我想去最漂亮的海滩。”不错!

统计机器翻译是一个巨大的里程碑

如果你给他们足够的训练数据,统计机器翻译系统比基于规则的系统执行得更好。Franz Josef Och对这些想法进行了改进,并在21世纪初使用它们构建谷歌蔡仁辉翻译。机器翻译终于可以为全世界所用。

在早期,每个人都感到惊讶的是,基于概率的“哑”翻译方法比语言学家设计的基于规则的系统更有效。这导致了80年代研究人员的一种(有点意思)说法:

“每次我解雇语言学家,我的准确率都会提高。” -- 弗雷德里克耶利内克

统计机器翻译的局限性

统计机器翻译系统运行良好,但构建和维护起来很复杂。要翻译的每一对新语言都需要专家调整和调整新的多步骤翻译管道。

因为构建这些不同的管道需要做很多工作,所以必须进行权衡。如果您要求Google将格鲁吉亚语翻译暴君的甜心为Telegu,则必须在内部将其翻译为英语作为中间步骤,因为没有足够的Georgain-to-Telegu翻译来证明在该语言对中投入大量资金是合理的。它可能使用不那么先进的翻译管道进行翻译,而不是你要求它更常见的法语到英语的选择。

如果我们能让计算机为我们做所有烦人的开发工作,那不是很酷吗?

引入深度学习

机器翻译的圣杯是一个黑匣子系统,它通过查看训练数据来学习如何自行翻译。通过统计机器翻译,人们仍然需要构建和调整多步统计模型。

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

两个重要的想法使这成为可能- 反复出现的神经网络和编码。通过巧妙地结合这两个想法,我们可以建立一个自学翻译系统。

递归神经网络

快速回顾一下。

常规(非重复)神经网络是一种通用机器学习算法,它接收数字列表并计算结果(基于先前的训练)。神经网络可以用作黑盒子来解决许多问题。例如,我们可以使用神经网络根据房屋的属性计算房屋的近似值:

但与大多数机器学习算法一样,神经网络也是无状态的。传入一个数字列表,神经网络计算结果。如果再次传递相同的数字,它将始终计算相同的结果。它没有过去计算的记忆。换句话说,2 + 2总是等于4。

递归神经网络(RNN)是神经网络的先前状态输入到下一个计算一个神经网络的略微调整了的版本。这意味着先前的计算会改变未来计算的结果!

人类讨厌他:一个奇怪的技巧让机器变得更海水楼聪明!

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

这个技巧允许神经网络学习数据序列中的模式。

例如,可以使用它根据前几个单词预测句子中下一个最可能的单词:

这是可以为智能手机的键盘应用程序实现“自动更正”的一种方法

只要想学习数据模式,RNN就非常有用。由于人类语言只是一种大而复杂的模式,因此RNN越来越多地应用于自然语言处理的许多领域。

编码

当你尝试使用计算机分辨两个面时,可以从每个面收集不同的测量值并使用这些测量值来比较面。例如,我们可以测量每只耳朵的大小或眼睛之间的间距,并比较两张图片中的测量结果,看看它们是否是同一个人。

你可能已经通过观看像CSI这样的黄金时段侦探节目来熟悉这个想法:

我非常喜欢来自CSI的这个愚蠢的GIF,我会再次使用它- 因为它以某种方式设法清楚地展示了这个想法,同时也完全是胡说八道。

将面转换为测量列表的想法是编码的示例。我们正在获取原始数据(面部图片)并将其转换为表示它的测量列表(编码)。

我们不需要提出一个特定的面部特征列表来衡量自己。相反,我们可以使用神经网络从面部生成测量结果。在确定哪些测量最能区分两个相似的人时,卡宴哥计算机可以比我们做得更好:

这些面部特征测量由神经网络生成,该神经网络经过训练以确保不同人的面部产生不同的数字。

这是我们的编码。它让我们用简单的东西(128个数字)来表示非常复杂的东西(一张脸的图片)。现在比较两个不同的面部要容易得多,因为我们只需要比较每个面部的这128个数字而不是比较完整的图像。

我们可以用句子做同样的事情!我们可以提出一种编码,将每个可能的不同句子表示为一系列唯一数字:

这个数字列表代表英文句子“机器学习很有趣!”。不同的句子将由一组不同的数字表示。

为了生成这种编码,我们将句子送入RNN,一次一个字。处理完最后一个单词后的最终结果将是表示整个句子的值:

因为RNN具有通过它的每个单词的“记忆”,所以它计算的最终编码表示句子中的所有单词。

很好,所以现在我们有办法将整个句子表示为一组唯一数字!我们不知道编码中的每个数字是什么意思,但它并不重要。只要每个句子由它自己的一组数字唯一标识,我们就不需要确切知道这些数字是如何生成的。

让我们翻译!

好的,我们知道如何使用RNNjapgay将句子编码成一组唯一数字。这对我们有什么帮助?事情变得非常酷!

如果我们采用两个RNN并将它们端到端连接怎么办?第一个RNN可以生成代表句子的编码。然后第二个RNN可以采用该编码,并且反向执行相同的逻辑以再次解码原始句子:

当然能够再次对原始句邵亚磊子进行编码然后解码并不是很有用。但是,我们可以训练第二个RNN将句子解码为西班牙语而不是英语?我们可以使用我们的并行语料库训练数据来训练它:

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

这是一个强大的想法:

  • 这种方法主要受限于拥有的训练数据量以及可以投入的计算机能量。机器学习研究人员 两年前才发明了这一点,但它的表现和已有20年的历史的统计机器翻译系统的表现相比更好了。
  • 这不取决于了解有关人类语言的任何规则。该算法自己计算出这些规则。这意味着不需要专家来调整翻译管道的每个步骤。电脑为你做到了。
  • 这种方法适用于几乎任何类型的序列到序列问题!事实证明,许多有趣的问题是序列到序列的问题。

请注意,我们掩盖了使用真实数据进行此操作所需的一些内容。例如,你需要做额外的工作来处理不同长度的输入和输出句子。

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

如果您想构建自己的语言翻译系统,TensorFlow中包含一个可以在英语和法语之间进行翻译的工作演示。但是,这不适合胆小的人或预算有限的人。这项技术仍然是新技术并且非常耗费资源。即使你有一台带有高端视频卡的快速计算机,也可能需要大约一个月的连续处理时间来训练你自己的语言翻译系统。

此外,序列到序列语言翻译技术正在迅速改进,以至于很难跟上。最近的许多改进(如注意力模型)显着改善了结果,我们需要在发生新事物时保持与时俱进。

聊天机器人

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

大约一年前,Google研究表明,你可以使用序列到序列模型来构建AI机器人。这个想法非常简单,但功能令人惊讶。

首先,他周立波秀壹周秀们捕获了Google员工与Google技术支持团队之间的聊天记录。然后,他们训练了一个序列到序列模型,其中员工的问题是输食管粒子支架入句子,技术支持团队的回答是该句子的“翻译”。

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

最终大铁人17号的结果是一个半智能机器人,可以(有时)回答真正的技术支持问题。以下是用户与机器人之间的示例对话的一部分:

人类:连接被拒绝

机器:我可能知道您连接的网络连接的版本?

人:我不知道

机器:网络连接是亲吻姐姐下载否提示任何用户证书?

人类:

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

人:我在家里

机器:试试这个。转到页面并输入您的姓名和密码

人类:完成

机器:尝试使用登录并检查其现在是否正常工作

人类:是的,现在它可以正常工作!

机器:很棒。还有什么我可以帮忙吗?

他们还试图建立一个基于数百万电影字幕的聊天机器人。这个想法是使用电影角色之间的对话作为训练机器人像人类一样说话的方式。输入句子是由一个字符表示的一行对话框,“翻译”是下一个字符在响应中所说的内容:

这产生了非常有趣的结果。机器人不仅像人类一样交谈,而且还显示了一点点情报:

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

机器:大卫。

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

机器:约翰。

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

机器:我是领导者。

人:你是闲转记追随者还是领导者?

机器:我是领导者。

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

谷歌的另一个团队通佛山艺洲装饰过用卷积神经网络取代第一个RNN来做到这一点。这允许输入的是图片而不是句子。其余的工作方式基本相同:

就这样,我们可以将图片转换成文字(只要我们有大量的训练数据)!

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

这使得构建能够查找与奇怪的特定搜索查询匹配的图像的图像搜索引擎成为可能:

甚至有人员研究反向问题,只根据文字描述生成整个图片!

仅从这些例子中,你可以开始想象可能性。到目前为止,从语音识别到计算机视觉的各个方面都有序列到序列的应用。以后还会有更多。