没有数据也能翻译?一文读懂「无监督」机器翻译


原文来源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


欢迎个人分享,媒体转载请后台回复「转载」获得授权,微信搜索「BOBO_AI」关注公众号


中国人工智能产业创新联盟于2017年6月21日成立,超200家成员共推AI发展,相关动态:

中新网:中国人工智能产业创新联盟成立

ChinaDaily:China forms 1st AI alliance

证券时报:中国人工智能产业创新联盟成立 启动四大工程搭建产业生态“梁柱”

工信部网站:中国人工智能产业创新联盟与贵阳市政府、英特尔签署战略合作备忘录


点击下图加入联盟


下载中国人工智能产业创新联盟入盟申请表


关注“雷克世界”后不要忘记置顶

我们还在搜狐新闻、雷克世界官网、腾讯新闻、网易新闻、一点资讯、天天快报、今日头条、雪球财经……

↓↓↓点击阅读原文查看中国人工智能产业创新联盟手册

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的移动操作系统,主要应用于移动设备,如智能手机和平板电脑。该系统最初由安迪·鲁宾开发,后被Google公司收购并注资,随后与多家硬件制造商、软件开发商及电信营运商共同研发改良。 Android操作系统的特点包括: 开放源代码:Android系统采用开放源代码模式,允许开发者自由访问、修改和定制操作系统,这促进了技术的创新和发展,使得Android系统具有高度的灵活性和可定制性。 多任务处理:Android允许用户同时运行多个应用程序,并且可以轻松地在不同应用程序之间切换,提高了效率和便利性。 丰富的应用生态系统:Android系统拥有庞大的应用程序生态系统,用户可以从Google Play商店或其他第三方应用市场下载和安装各种各样的应用程序,满足各种需求。 可定制性:Android操作系统可以根据用户的个人喜好进行定制,用户可以更改主题、小部件和图标等,以使其界面更符合个人风格和偏好。 多种设备支持:Android操作系统可以运行在多种不同类型的设备上,包括手机、平板电脑、智能电视、汽车导航系统等。 此外,Android系统还有一些常见的问题,如应用崩溃、电池耗电过快、Wi-Fi连接问题、存储空间不足、更新问题等。针对这些问题,用户可以尝试一些基本的解决方法,如清除应用缓存和数据、降低屏幕亮度、关闭没有使用的连接和传感器、限制后台运行的应用、删除不需要的文件和应用等。 随着Android系统的不断发展,其功能和性能也在不断提升。例如,最新的Android版本引入了更多的安全性和隐私保护功能,以及更流畅的用户界面和更强大的性能。此外,Android系统也在不断探索新的应用场景,如智能家居、虚拟现实、人工智能等领域。 总之,Android系统是一种功能强大、灵活可定制、拥有丰富应用生态系统的移动操作系统,在全球范围内拥有广泛的用户基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值