做者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明。谢谢!git
本文主要是翻译及整理MSRA 刘铁岩团队在NIPS 2016 会议上发表的论文“Dual Learning for Machine Translation”。对于论文中的算法思想可能尚未理解透彻,还请诸位大牛多多指教。github
最早进的机器翻译系统,包括基于短语的统计机器翻译方法、最近出现的基于神经网络的翻译方法,严重依赖于对齐的平行训练语料。然而,实际收集这些平行语料数据的代价很是大,所以语料的规模也每每有限,这将会限制相关的研究和应用。算法
咱们知道在互联网中存在海量的单语数据,很天然的想到,可否利用它们去提高机器翻译系统的效果呢?实际上,基于这个想法,研究人员已经提出了许多不一样的方法,这里能够粗略的分为两类。第一类,目标语言的单语语料被用于训练语言模型,而后集成到翻译模型(从平行双语语料中训练出)中,最终提高翻译质量。第二类,经过使用翻译模型(从对齐的平行语料中训练)从单语数据中生成伪双语句对,而后在后续的训练过程当中,这些伪双语句对被用于扩充训练数据。尽管上述方法可以在必定程度上提高翻译系统的效果,可是它们依然存在必定的局限性。第一类的方法只使用了单语数据来训练语言模型,并无解决平行训练数据不足这个问题。尽管第二类方法能够扩充平行训练数据,可是并不能保证伪双语句对的质量。网络
在这篇文章中,刘铁岩团队提出了一种Dual-Learning(对偶学习)机制,能够有效地利用单语数据(源语言与目标语言)。经过使用他们提出的机制,单语数据与平行双语数据扮演着类似的角色,在训练过程当中,能够显著下降对平行双语数据的要求。对偶学习机制应用在机器翻译中,能够想象成两个agent(机器)在玩通讯游戏,以下图所示,框架
从上面的描述中,很容易发现,尽管两个机器可能没有对齐的双语语料,它们依然能够得到两个翻译模型的翻译质量方面的反馈,而后基于反馈持续提高模型的效果。这个游戏能够玩任意轮,两个翻译模型经过强化过程(例如,经过策略梯度方法)获得持续改善。经过这种方式,他们开发了一个通用的学习框架,经过对偶学习游戏,这个框架可用于训练机器翻译模型。机器学习
对偶学习机制很一些不一样的特色。首先,咱们经过强化学习从未标注数据中训练翻译模型。这个工做显著下降了对对齐双语数据的要求,它打开了一个新的窗口,能够从头开始(甚至不使用任何平行数据)学习一个翻译模型。实验结果显示,这个方法颇有前景。函数
其次,显示出深度强化学习(DRL)在复杂真实世界中的应用,而不只仅是在游戏这个领域。在最近几年,深度强化学习吸引了不少科研人员的注意力。可是,大部分应用仍是集中在视频或者棋盘游戏,将深度强化学习应用到更加复杂的应用(规则没有事先定义好,而且没有明确的奖励信号),依然存在很大挑战。对偶学习提供了一种颇有前景的方式,能够在真实世界应用中,例如,机器翻译,抽取出强化学习须要的奖励信号。工具
对偶学习框架能够应用到基于短语的统计机器翻译和神经机器翻译中。在这篇文章中,咱们主要聚焦在后者--神经机器翻译,由于它做为一个端到端的系统,很简单,不须要人工设计精巧的工程。学习
神经机器翻译系统一般是经过基于编码-解码框架的循环神经网络(RNN)来实现。这个框架从源语言句子 \(x = {x1,x2,...,x_{Tx}}\) 到目标语言 \(y = {y1,y2,...,y_{Ty}}\) 学习了一个几率映射 P(y|x),其中,xi 和 yt 分别是句子x的第i个词和句子y的第t个词。测试
更具体一些,神经机器翻译的编码器读取源语言句子 x ,而后基于RNN生成 \(T_{x}\) 个状态,
\(h_{i} = f(h_{i-1},x_{i})\ \ \ \ \ \ (1)\)
\(h_{i}\) 是时刻t的隐状态,函数f是循环单元,例如Long Short-Term Memory(LSTM)单元或者Grated Recurrent Unit(GRU)。而后,神经网络的解码器计算每一个目标词 \(y_{t}\) 的条件几率,对于 \(y_{t}\) ,已知它先前的词 \(y_{<t}\) 和源语言句子,例如, 基于几率链式法则, 使用 \(P(y_{t}|y_{<t},x)\) 来肯定 \(P(y|x)\) 。\(P(y_{t}|y_{<t},x)\) 以下列所示,
\(P(y_{t}|y_{<t},x) \varpropto exp(y_{t};r_{t},c_{t})\ \ \ \ \ \ (2)\)
\(r_{t}=g(r_{t-1},y_{t-1},c_{t})\ \ \ \ \ \ (3)\)
\(c_{t}=q(r_{t-1},h_{1},...,h_{T_{x}})\ \ \ \ \ \ (4)\)
其中, \(r_{t}\) 是解码器RNN在时刻t的隐状态,类似地,也是经过LSTM或者GRU进行计算; \(c_{t}\) 根据编码器的隐状态定义了生成词 \(y_{t}\) 的上下文信息。 \(c_{t}\) 能够是句子 x 的全局信息,例如 \(c_{1}=c_{2}=...=c_{T_{y}}=h_{T_{x}}\) , 或者是局部信息,局部信息经过注意力机制实现,例如 \(c_{t}=\sum_{i=1}^{T_{x}}\alpha_{i}h_{i},\alpha_{i}=\frac{exp\{a(h_{i},r_{t-1})\}}{\sum_{j}exp\{a(h_{j},r_{t-1})\}}\) , 其中, \(a(.,.)\) 是一个前馈神经网络。
咱们将神经网络中待优化的全部参数定义为 \(\Theta\) ,将用于训练的源语言-目标语言数据集定义为 D ,而后要学习的目标函数就是寻找最优的参数 \(\Theta^{*}\) 。
\(\Theta^{*}=argmax_{\Theta}\sum_{(x,y)\in{D}}\sum_{t=1}^{T_{y}}logP(y_{t}|y_{<t},x;\Theta)\ \ \ \ \ \ (5)\)
在这章中,咱们将会介绍对偶学习机制在神经机器翻译中的应用。注意到翻译任务常常是两个方向,咱们首先设计一个有两个机器人的游戏,包含前向翻译步骤和反向翻译步骤,即便只使用单语数据,也能够给两个对偶翻译模型提供质量反馈。而后咱们提出了对偶学习算法,称之为对偶神经机器翻译(简称dual-NMT),在游戏中,基于反馈回来的质量,提高两个翻译模型。
有两个单语语料 \(D_{A}\) 和 \(D_{B}\) ,分别包含语言A和语言B的句子。须要注意的是,这两个语料并不须要互相对齐,甚至互相之间一点关系都没有。假设,咱们右两个弱翻译模型,能够将句子从语言A翻译到语言B,反之亦然。咱们的目标是使用单语语料而非平行语料来提升两个模型的准确率。从任何一个单语数据的句子开始,咱们首先将其翻译为另外一种语言,而后再将其翻译回原始语言。经过评估这两个翻译结果,咱们将会了解到两个翻译模型的质量,并根据此来提高它们。这个过程能够迭代不少轮直到翻译模型收敛。
假设语料 \(D_{A}\) 有 \(N_{A}\) 个句子, \(D_{B}\) 有 \(N_{B}\) 个句子。定义 \(P(.|s;\Theta_{AB})\) 和 \(P(.|s;\Theta_{BA})\) 为两个神经翻译模型,这里 \(\Theta_{AB}\) 和 \(\Theta_{BA}\) 是它们的参数(正如第2章中所描述)。
假设咱们已经有两个训练好的语言模型 \(LM_{A}(.)\) 和 \(LM_{B}(.)\) (很容易得到,由于它们只须要单语数据),每一个语言模型获取一个句子做为输入,而后输出一个实数值,用于表示这个句子是它所属语言天然句子的自信度。这里,语言模型既可使用其余资源,也能够仅仅使用单语数据 \(D_{A}\) 和 \(D_{B}\)。
若是游戏是从 \(D_{A}\) 中的句子 s 开始 ,定义 \(s_{mid}\) 做为中间翻译输出。这个中间步骤有一个中间的奖励 \(r_{1} = LM_{B}(s_{mid})\) , 表示输出句子在语言 B 中的天然程度。已知中间翻译输出 \(s_{mid}\) ,咱们使用从 \(s_{mid}\) 还原过来的 s 的对数几率做为通讯的奖励(咱们将会交替使用重构和通讯)。数学上定义, 奖励 \(r_{2} = log P(s|s_{mid};\Theta_{BA})\) 。
咱们简单采用语言模型奖励和通讯奖励的线性组合做为总体奖励,例如, \(r = \alpha r_{1} + (1-\alpha) r_{2}\) , 这里 \(\alpha\) 是超参数。因为游戏的奖励能够视为s , \(s_{mid}\) 以及翻译模型 \(\Theta_{AB}\) 和 \(\Theta_{BA}\) 的函数,所以,咱们能够经过策略梯度方法来优化翻译模型中的参数,从而达到奖励最大化,这个方法在强化学习中应用很普遍。
咱们基于翻译模型 \(P(.|s;\Theta_{BA})\) 采样出 \(s_{mid}\) 。而后咱们计算指望奖励 \(E[r]\) 关于参数 \(\Theta_{AB}\) 和 \(\Theta_{BA}\) 的梯度。根据策略梯度定理,很容易获得,
\(\bigtriangledown_{\Theta_{BA}}E[r]=E[(1-\alpha)\bigtriangledown_{\Theta_{BA}}log P(s|s_{mid;\Theta_{BA}})]\ \ \ \ \ (6)\)
\(\bigtriangledown_{\Theta_{AB}}E[r]=E[r\bigtriangledown_{\Theta_{AB}}log P(s_{mid}|s;\Theta_{AB})]\ \ \ \ \ (7)\)
这里指望替换掉 \(s_{mid}\) 。
基于公式(6)和公式(7),咱们能够采用任何的采样方法来估计指望的梯度。考虑到随机采样将会带来很是大的方差,而且会致使机器翻译中出现不合理的结果,针对梯度计算,咱们使用束搜索来获取更加有意义的结果(更加合理的中间翻译输出),例如,咱们贪婪地产生top-K个高几率的中间翻译输出,而后使用束搜索的平均值来近似真实的梯度。若是游戏是在 \(D_{B}\) 中的句子 s 开始,梯度的计算就是一个对称,在此,咱们忽略掉它。
游戏能够重复不少轮。在每一轮中,一个句子从 \(D_{A}\) 中采样,另外一个句子是从 \(D_{B}\) 中采样,咱们基于游戏(分别从两个句子开始)来更新这两个翻译模型。具体的细节在算法1中给出。
咱们作了一系列实验来测试提出的对偶学习机制在机器翻译上的效果。
咱们使用两个基准系统和对偶机器翻译方法进行对比,1)标准神经机器翻译(简称NMT),2)最近提出的基于NMT的方法,经过单语语料生成伪双语句对用于辅助训练(简称pseudo-NMT)。咱们的全部实验都是使用Theano实现的辅助NMT系统来完成。
咱们评估这些算法在一对翻译任务上的效果,包括英语翻译为法语(En->Fr)和法语到英语(Fr->En)。具体地,咱们使用相同的双语语料,语料来源于WMT14,共有1200万句对。而后将newstest2012和newstest2013做为开发数据集,newstest2014做为测试数据集。WMT14 提供的“News Crawl:articles from 2012”做为单语数据。
咱们使用GRU网络并遵循论文1(D. Bahdanau, K. Cho, and Y. Bengio. Neural machine translation by jointly learning to align
and translate. ICLR, 2015.)中的实践来设置实验参数。对于每种语言,咱们用平行语料中最频繁的3万个词构造词汇表,将包含至少一个OOV单词的句子删除。每一个词被映射到620维的连续向量空间,循环单元的维度是1000。咱们将训练集中超过50个词的句子删除。batch的大小为80,每20个batch被预取,并按照句子长度排序。
对于基准的NMT模型,咱们彻底按照论文1提出的设置。对于基准的pseudo-NMT模型,咱们使用训练好的NMT模型从单语数据中生成伪双语句对,删除超过50个词的句子,将生成的数据与原始平行训练数据融合在一块儿,而后训练这个模型,并用于测试。每一个基准系统经过AdaDelta算法在K40m GPU进行训练,直到它们的效果在开发集上再也不提高为止。
对偶神经机器翻译(简称dual-NMT)模型须要每种语言的语言模型。咱们对于每种语言,使用相应的单语语料,训练了基于RNN的语言模型。实验中,语言模型就固定了,而后收到信息的对数似然做为通讯信道(例如,翻译模型)的奖励。
在玩游戏时,咱们使用暖启动翻译模型(已经从双语语料中训练出来的)来初始化信道,而后观察dual-NMT模型可否有效提高模型翻译准确率。在咱们的实验中,为了从双语数据训练的初始模型平滑过渡到彻底从单语数据训练的模型,咱们采用了如下软着陆策略。在每次对偶学习过程的开始,对于每一个mini batch,咱们使用单语数据一半的句子和双语数据(从数据中采样出来的用于训练初始模型)中一半的句子。目标就是基于单语数据最大化奖励(在第3部分定义的)的加权之和以及基于双语数据的似然度(在第2部分定义)。随着训练过程的持续,咱们逐渐在mini batch中增长单语数据的比例,直到彻底不使用双语数据。这里,咱们在实验中测试了两个测试:
对于每一个设置,咱们都是训练对偶机器翻译算法一周。咱们在中间翻译过程当中设置束搜索大小为2。实验中的全部超参数经过交叉验证来设置。咱们使用BLEU做为评估标准,由moses提供的 脚本工具 进行计算。遵循常规的实践,在测试阶段,如同先前许多的工做,咱们对于全部的算法均使用大小为12的束搜索。
咱们在这部分分析实验结果。回忆以前提到的两个基线系统,英语->法语和法语->英语是分别训练的,可是,dual-NMT系统一块儿训练这两个基线系统。咱们在表1中总结了全部系统的效果,在源语言句子的各个长度上的BLEU分值曲线在图1中画出。
从表1中,咱们能够看到dual-NMT系统在全部的设置中均超过了基线系统。在从英语翻译为法语的任务上,dual-NMT系统分别在第一种/第二种暖启动方式超过基线NMT系统大约2.1/3.4个百分点,超过pseudo-NMT大约1.7/3.1个百分点。在从法语翻译为英语的任务上,提高更加显著,dual-NMT系统在第一个/第二个暖启动方式上分别超过NMT大约2.3/5.2个百分点,超过pseudo-NMT大约2.1/4.3个百分点。使人惊讶的是,在只有10%的双语数据上法语翻译为英语的任务中,相比使用100%的常规NMT系统,dual-NMT取得了可比的翻译正确率。这些结果显示了dual-NMT算法的有效性。另外,咱们也观察到以下结果:
咱们在源语言句子的各个长度上的BLEU分值曲线在图1中画出。从这个图中,咱们能够看出dual-NMT算法在全部的长度上超过了基准系统。
咱们对dual-NMT算法作了一些更深刻的研究,如表2所示。咱们研究了各个算法的重构后的效果:对于测试集的每一个句子,咱们将它翻译到第4次并返回,而后使用BLEU分值来检查返回的翻译句子。咱们使用束搜索生成全部的翻译结果。很容易地从表2中观察到,dual-NMT的重构后的BLEU分数比NMT和pseudo-NMT更高。实际上,在从大规模平行数据上训练的暖启动模型上,dual-NMT超出NMT大约11.9/9.6,在10%数据上训练的暖启动模型上,dual-NMT超出NMT大约20.7/17.8。
咱们在表3上列出了几个例句,用于对比使用对偶学习以前和以后模型的重构结果。很明显,在对偶学习以后,重构的效果在两个方向(英语->法语->英语,法语->英语->法语)上都有很大提高。
总之,全部的结果均显示出对偶学习机器颇有前景而且能够更好地利用单语数据。
在这部分,咱们讨论对偶学习机制可能的扩展。
首先,尽管在咱们在这篇文章中集中在机器翻译任务上,可是对偶学习的基本思想具备通用的应用性:只要两个任务具有对偶形式,咱们就能够利用强化学习算法将对偶机学习机制应用到从未标注数据中同时学习两个任务。实际上,许多人工智能任务自然的是对偶形式,例如,语音识别和语音合成,图像抓取和图像合成,问题回答和问题生成,搜索(匹配查询词与文档的类似度)和关键词抽取(从文档中抽取关键字/查询词)等等。对于更多的对偶任务,而不只仅是机器翻译,设计和测试对偶学习算法将会颇有意义。
第二,尽管咱们将对偶学习集中在两个任务上,可是咱们的技术并不只仅局限在两个任务。实际上,咱们主要的想法是造成一个闭环,目的是咱们经过比较原始输入数据和最终输出数据,可以提取出反馈信号。所以,若是有多于两个相关的任务能够造成闭环,咱们能够应用这个技术来提高每一个任务在无标签数据的效果。例如,对于英语句子 x ,咱们能够先将它翻译为中文句子 y ,而后将 y 翻译为法语句子 z ,最终再将 z 翻译为英文句子 \(x^{'}\) 。句子 x 和 \(x^{'}\) 的类似度能够表示闭环中三个翻译模型的有效性,咱们基于闭环中的反馈信号能够再次使用策略梯度方法来更新和提高这些模型。咱们更愿意将这种通用的对偶学习命名为闭环学习,而且在将来会测试它的有效性。
咱们计划在后续探索以下的方向,第一,在实验中,咱们使用了双语数据用于暖启动dual-NMT的训练。更加激动的方向就是从头学习,例如,直接从两种语言的单语数据(可能须要词汇词典)开始学习。第二,dual-NMT是基于NMT系统的,咱们基本的想法也能够用于基于短语的统计机器翻译系统中,咱们将会探索这个方向。第三,咱们仅仅考虑一对语言,咱们将会进行扩展,使用单语数据,联合训练至少3种语言的翻译模型。
在第5章中,提到了对偶学习能够视为一个闭环学习。闭环学习的概念来源于反馈控制系统。反馈控制系统,输入信号通过控制器、执行器,获得输出信号,而后再将输出信号采集回来,输入信号减去采集回来的输出信号,获得偏差,根据偏差来调节控制器,使得输出可以跟随输入信号。
对偶神经机器翻译系统能够视为一个反馈控制系统,这里以中文翻译为英文,再将英文翻译为中文为例。
循环迭代,直到输出信号可以跟随输入信号。
在控制系统的设计中,须要考虑三个指标:
分别将这三个指标对应到对偶机器翻译系统中,
所以,咱们能够发现,对偶机器翻译系统是反馈控制系统的一个特例,对偶机器翻译系统在设计时,同反馈控制系统同样,须要考虑稳定性、准确性和快速性三个指标。很期待对偶学习以及其在机器翻译领域的发展。
Di He, Yingce Xia, Tao Qin, Liwei Wang, Nenghai Yu, Tie-Yan Liu, and Wei-Ying Ma , Dual Learning for Machine Translation , NIPS 2016.