原文来源:buZZrobot
作者:Harshvardhan Gupta
「雷克世界」编译:KABUDA、嗯~阿童木呀
深度学习正在被广泛地运用于各项日常任务当中,尤其是涉及到一定程度“ 人性化”的领域,例如,图像识别。与其他机器学习算法不同,深度网络最突出的特点是随着获得数据的增多,其性能可以不断提高。因此,如果可以获得更多的数据,那么预期的性能也会变得更好。
深度网络最擅长的任务之一是机器翻译。目前,它是能够完成此项任务的最先进的技术,并且具有足够的可行性,甚至谷歌翻译(Google Translate)也在使用它(https://en.wikipedia.org/wiki/Google_Neural_Machine_Translation)。在机器翻译中,需要句子级(sentence-level)的并行数据对模型进行训练,即对于源语言中的每个句子来说,都需要是目标语言中被翻译的语言。不难想象为什么这会成为一个问题。因为,对于一些语言对来说,很难获得大量的数据(因此可以使用深度学习的这种能力)。
本文是如何构建的
本文是基于Facebook近期发表的一篇名为“仅使用单语语料库进行的无监督机器翻译”(Unsupervised Machine Translation Using Monolingual Corpora Only)(https://arxiv.org/abs/1711.00043)的文章而撰写的。本文并没有完全遵循论文的结构,我添加了一些自己的解读,进而让文章更加通俗易懂。
阅读本篇文章需要具备一些最关于神经网络的基本知识,比如损失函数、自动编码器等。
机器翻译的问题
如上所述,在机器翻译中使用神经网络的最大问题是,它需要两种语言的句子对数据集。它适用于英语和法语等被广泛使用的语言,而对于其他语言的句子对则不适用。如果语言对数据可用,那么这将成为一个受监督性的任务。
解决方案
这篇论文的作者想出了如何将这一任务转换为无监督任务的方法。在这一任务中,唯一需要的是两种语言中每一种语言的任意两个语料库,如任意一部英语小说和任意一部西班牙语小说。需要注意的一点是,这两部小说不一定是相同的。
从最直观的角度来讲,作者发现了该如何学习一种介于两种语言之间的潜在空间(latent space)的方法。
自动编码器概述
自动编码器是一种用于无监督任务的广泛的神经网络类别。它的工作原理是重新创建一个和最初输入相同的输入。完成这一操作的关键是网络中间有一个名为瓶颈层(bottleneck layer)的网络层。该网络层被用以捕捉所有关于输入的有用信息,并摒弃无用信息。
概念型自动编码器,中间模块是存储压缩表示的瓶颈层
简言之,在瓶颈层中,瓶颈层中输入(现在由编码器转换)所在的空间被称为潜在空间(latent space)。
降噪自动编码器
如果一个自动编码器被调教成完全按照输入的方式重建输入,那么它可能什么都做不了。在这种情况下,输出将得到完美的重建,但是在瓶颈层中没有任何有用的特性。为了解决这一问题,我们使用了降噪自动编码器。首先,实际输入因为增加了一些噪声而受到轻微干扰。然后,使用网络重建原始图像(并非含噪版本)。这样一来,通过学习什么是噪声(以及其真正有用的特征是什么),网络可以学习图像的有用特征。
一个降噪自动编码器的概念实例。利用神经网络对左图进行重建,生成右图。在这种情况下,绿色的神经元共同构成了瓶颈层
为什么要学习一个共同的潜在空间?
潜在空间可以捕捉数据的特征(在我们所举的例子中,数据就是句子)。因此,如果有可能获得一个空间,即当输入语言A时,就会产生与输入语言B相同的特征,那么我们就有可能在它们之间进行翻译。由于该模型已经拥有了正确的“特征”,因此由语言A的编码器进行编码,由语言B的解码器进行解码,这将使二者进行有效的翻译工作。
或许正如你想到的那样,作者利用降噪自动编码器学习一个特征空间。他们还想出了该如何使自动编码器学习一个共同潜在空间的方法(他们将其称之为一个对其潜在空间(aligned latent space)),进而执行无监督的机器翻译。
语言中的降噪自动编码器
作者用降噪编码器以一种无监督的方式学习特征。他们所定义的损失函数为:
方程1.0 自动去燥编码器损失函数
解读方程1.0
I是语言(对于这一设定,可能有两种语言)。X是输入,C(x)是给x添加噪声后的结果。我们将很快得到噪声所创建的函数C。e()是编码器,d()是解码器。最后一项Δ(x hat,x)是标记级(token level)的交叉熵误差值之和。由于我们有一个输入序列,并且我们得到了一个输出序列,因此我们要确保每个标记(token)的顺序都是正确的。因此使用这种损失函数。我们可以将它视为多标签分类,其中将第i个输入的标记与第i个输出标记进行比较。其中,标记(token)是一个不能被进一步破坏的基本单位。在我们的例子中,标记(token)是一个单词。方程1.0是一个损失函数,使得网络最小化输出(当给定一个噪声输入时)与原始、未受影响的句子之间的差别的损失函数。
□与~的符号表示
□是我们期望的表示,在这种情况下,这意味着输入的分布取决于语言l,并且采用损失的平均值。这只是一个数学形式,运算过程中的实际损失(交叉熵之和)将如往常一样。
这个特殊符号〜意味着“来自概率分布”。
在本文中我们不详细讨论这个细节,你可以在Deep Learning Book(http://www.deeplearningbook.org/contents/optimization.html)一文的第8.1章中详细了解这个符号。
如何添加噪声
对于图像而言,只需在像素上添加浮点数就可以增加噪声,而对于语言而言,则需采用其他方法。因此,作者开发了自己的系统来制造噪声。他们把他们的噪声函数表示为C()。它将句子作为输入,并输出该句子的含噪版本。
有两种不同的方法添加噪声。
首先,可以简单地以P_wd的概率从输入中删除一个单词。
其次,每个单词都可以使用下面这个约束进行原始位置的移位:
σ表示第i个标记的移位位置。因此,方程2.0意味着:“一个标记(token)可以最多向左或向右移动k个标记(token)的位置”
作者将K值设为3,将P_wd值设为1。
跨域训练
为了学习两种语言之间的翻译,应该通过一些处理将输入句子(语言A)映射到输出句子(语言B)。作者将这个过程称为跨域训练(cross domain training)。首先,输入句子(x)被采样。然后,使用先前迭代中的模型(M())生成翻译后的输出(y)。把它们放在一起,我们便得到了y=M(x)。随后,使用上述相同的噪声函数C()干扰y,得到C(y)。语言A的编码器对这一被干扰的版本进行编码,语言B的解码器对语言A编码器的输出进行解码,并重新构建一个纯净版的C(y)。使用与方程1.0中相同的交叉熵误差值之和(sum of cross entropy error)对模型进行训练。
运用对抗式训练学习一个共同的潜在空间
到目前为止,还没有提到如何学习共同潜在空间。上面提到的跨域训练有助于学习一个相似空间,但需要一个更强的约束来推动模型学习一个相似的潜在空间。
作者使用对抗式训练。他们使用了另一个模型(称为鉴别器),该模型接受每一个编码器的输出,并预测编码后的句子属于哪一种语言。然后,从鉴别器中提取梯度,并对编码器进行训练,以欺骗鉴别器。这在概念上与标准的GAN(生成对抗网络)没有什么不同。鉴别器接收每个时间步的特征向量(因为使用了RNN),并预测它来自哪种语言。
将它们结合在一起
将上述3种不同的损失(自编码器损失、翻译损失和鉴别器损失)相加,所有模型的权重同时更新。
由于这是一个序列到序列的问题,因此作者使用了一个长短期记忆网络(LSTM),需要注意的是,这里存在两个基于LSTM的自动编码器,每种语言各含一个。
在较高级别上,训练这个架构需要三个主要步骤。它们遵循一个迭代训练过程。训练循环过程看起来有点像这样:
1.使用语言A的编码器和语言B的解码器获得翻译。
2.训练每个自动编码器,使其能够在给定一个损坏的句子时重新生成一个未损坏的句子。
3.通过破坏步骤1中获得的翻译来改进翻译并重新创建翻译。对于这一步,语言A的编码器和语言B的解码器一起进行训练(语言B的编码器和语言A的解码器一起训练)。
值得注意的是,即使步骤2和步骤3被分开列出,权重也会一起进行更新。
如何启动这个框架
如上所述,该模型使用之前的迭代过程中自身的翻译来提高其翻译能力。因此,在循环过程开始之前,拥有一定翻译能力是很重要的。作者使用FastText来学习词级双语词典。请注意,这种方法非常简单,仅需要给模型一个起点即可。
整个框架在下面的流程图中给出
整个翻译框架的高层次工作
本文解读了一种可以执行无监督机器翻译任务的新技术。它使用多个不同的损失改进单个任务,同时使用对抗式训练增强对体系结构行为的约束。
原文:https://buzzrobot.com/machine-translation-without-the-data-21846fecc4c0
未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能,互联网和脑科学交叉研究机构。由互联网进化论作者,计算机博士刘锋与中国科学院虚拟经济与数据科学研究中心石勇、刘颖教授创建。
未来智能实验室的主要工作包括:建立AI智能系统智商评测体系,开展世界人工智能智商评测;开展互联网(城市)云脑研究计划,构建互联网(城市)云脑技术和企业图谱,为提升企业,行业与城市的智能水平服务。
如果您对实验室的研究感兴趣,欢迎加入未来智能实验室线上平台。扫描以下二维码或点击本文左下角“阅读原文”