文章目录
- 0. 摘要
- 1. 介绍
- 2. 无监督神经机器翻译
-
- 2.1 神经机器翻译
- 2.2 模型的概述
- 2.3 去噪自编码器
- 2.4 回译技术(交叉域训练)
- 2.5 对抗训练
- 3. 训练
-
- 3.1 迭代训练
- 3.2 无监督模型选择准则
- 4. 实验
- 5. 相关工作
- 6. 结论
0. 摘要
大规模的并行语料库是的机器翻译取得了很好的性能。但是,对于一些语言,并行语料库的获取是需要耗费大量人力和物力的,因此,如何仅仅使用单语料库进行机器翻译成为一个亟待解决的研究方向。本文我们把这个研究方向发挥到极致,研究是否可以在没有任何平行数据的情况下学习翻译。本文提出了一种从两种不同语言的单语语料库中提取句子并将其映射到同一潜在空间的模型。通过学习从共享的特征空间中重构两种语言,该模型有效地学习了不使用任何标记数据的翻译。
本文的实验结果:在两个广泛使用的数据集和两个语言对上运行模型,报告了在Multi30k和WMT英法数据集上BLEU得分为32.8和15.1,在训练时甚至不使用一个平行的句子
1. 介绍
我们研究在没有任何形式监督的情况下,是否有可能训练一个通用的机器翻译系统。我们唯一的假设是每种语言都有一个单语语料库。这种设置之所以有趣,有两个原因。首先,当遇到没有注释的新语言对时,这是适用的。其次,它提供了一个强大的下界性能,任何良好的半监督方法都有望产生这样的性能。
核心思想是:将两种不同语言的语料库中的句子映射到相同的潜在空间,通过从共享特征空间中学习重现两种语言
两个原则:1. 模型必须能够从噪声版本中译给定语言重构句子(去噪自编码器)2. 模型还学习了在目标域中对同一句子进行有噪声的翻译时能重构任何源语句(回译技术)。
除了这些重构目标,我们使用一个对抗的正则项限制了源和目标句子潜在表示具有相同的分布,从而模型试图欺骗鉴别器,同时对鉴别器进行训练以识别给定潜在句子表示的语言。然后,这个过程被反复地重复,从而产生了质量不断提高的翻译模型。
算法流程为:首先通过自编码器学习共同潜在空间,然后在两种语言中重构翻译,然后使用鉴别器识别被编码的语句所属于的语言。
潜在空间捕捉数据特征 如果可以学习对语言 A 和语言 B 馈送的输入 来输出相同特征的空间,那么就可以实现这两种语言之间的翻译。由于该模型已经学会了正确的「特征」,那么利用语言 A 的编码器来编码,得到潜在空间的表示,利用语言 B 的解码器解码就可以使该模型完成翻译。鉴别器用来判断得到的潜在空间表示是来自源语言的还是目标语言的。模型的目标是欺骗鉴别器,让它分别不出来。然后迭代地重复这个过程,从而产生高质量的翻译模型。
为了保证我们的方法完全不受监督,我们通过使用na¨?ve无监督的翻译模型来初始化算法,该模型基于逐字翻译的句子,带有来自相同的单语数据的双语词典。因此,通过使用单语数据,我们可以将两种语言的句子编码到相同的特征空间中,从那里,我们也可以解码/翻译这些语言中的任何一种,见图1说明。
2. 无监督神经机器翻译
在本节中,我们首先描述翻译系统的体系结构,然后解释如何训练。
2.1 神经机器翻译
我们提出的翻译模型由编码器和解码器组成,分别负责将源语句和目标语句编码到一个潜在空间,并将该潜在空间解码到源或目标域。我们为两个域使用单个编码器和单个解码器。将这些模块应用于不同的语言时,惟一的区别是查找表的选择。
WSW_SWS?:源域中与(已学习的)单词嵌入ZS=(z1s,....,z∣Ws∣s){Z^S} = (z_1^s,....,z_{|{W_s}|}^s)ZS=(z1s?,....,z∣Ws?∣s?)相关联的单词集
WTW_TWT?:目标域中与嵌入ZT=(z1t,....,z∣Ws∣t){Z^T} = (z_1^t,....,z_{|{W_s}|}^t)ZT=(z1t?,....,z∣Ws?∣t?)相关联的单词集
ZZZ:所有嵌入的集合
给定一种语言lll,l∈{src,tgt}l \in \{ src,tgt\}l∈{
src,tgt},lll中的含有mmm个单词的一句话x=(x1,x2,...,xm)x = ({x_1},{x_2},...,{x_m})x=(x1?,x2?,...,xm?),编码器eθenc,z(x,l){e_{
{\theta _{enc}},z}}(x,l)eθenc?,z?(x,l)通过使用对应的词嵌入向量【即如果l=srcl=srcl=src,用ZSZ_SZS?; 如果l=tgtl=tgtl=tgt,用ZTZ_TZT? 】,计算mmm个隐藏状态的序列z=(z1,z2,...,zm)z = ({z_1},{z_2},...,{z_m})z=(z1?,z2?,...,zm?),另外一个参数θenc\theta _{enc}θenc?是在源语言和目标语言之间的共享参数。
note:为了方便,eθenc,z(x,l){e_{
{\theta _{enc}},z}}(x,l)eθenc?,z?(x,l) 简写为:e(x,l)e(x,l)e(x,l)。这些隐藏状态是RnR^nRn空间的向量,nnn是潜在空间的维度。
解码器dθdec,z(z,l){d_{ {\theta _{dec}},z}}(z,l)dθdec?,z?(z,l),取输入为zzz和语言lll,生成输出y=(y1,y2,...,yk)y = ({y_1},{y_2},...,{y_k})y=(y1?,y2?,...,yk?),yiy_iyi?对应着词表WlW^lWl , 这个解码器利用相应的词向量,它还可由一个向量θdecθ_{dec}θdec?参数化并不依赖于语言的输出,可由d(z,l)d(z,l)d(z,l)表示。为了生成输出yiy_iyi?,解码器迭代地将先前生成的字yi?1y_{i-1}yi?1?(y0y_0y0?是依赖于语言的开始符)作为输入,更新它的内部状态,并返回最有可能成为下一个状态的单词。这个过程重复进行,直到解码器生成一个表示序列结束的停止符号。
在本文中,我们使用了一个带有注意力气的序列到序列模型,但没有喂输入。编码器是一个双向LSTM,返回隐藏状态序列z=(z1,z2,...,zm)z=(z_1,z_2,...,z_m)z=(z1?,z2?,...,zm?)。在每一步中,解码器也是一个LSTM,输入是:先前的隐藏状态,当前字和由编码器状态上的加权和给出的上下文向量。在我们考虑的所有实验中,编码器和解码器都有3层。LSTM层在源和目标编码器之间共享,也在源和目标解码器之间共享。我们还共享源和目标解码器之间的注意力的权重。嵌入和LSTM隐藏状态维度都设置为300。用贪心解码算法生成句子。
2.2 模型的概述
DsrcD_{src}Dsrc?:源域中句子的数据集
DtgtD_{tgt}Dtgt?:目标域中句子的数据集
DtgtD_{tgt}Dtgt?和DsrcD_{src}Dsrc?中的句子不相互对应。训练编码器和解码器的方法是:给定在相同或在另一个域内一句的带噪声(嘈杂)版本,重建这个句子。
在较高级别上,该模型从无监督的naive翻译模型开始,该模型是通过使用以无监督方式学习的并行字典对句子进行逐词翻译而获得的。然后,在每次迭代中,通过最小化目标函数来训练编码器和解码器,该目标函数用以衡量其从输入训练语句的嘈杂版本重建和翻译的能力。在自动编码任务的情况下,此噪声输入是通过删除和交换单词获得的,而在翻译任务的情况下,这是在先前迭代中使用模型进行翻译的结果。为了促进句子在源域和目标域中的潜在分布的对齐,我们的方法还同时学习了对抗环境中的判别器。然后在下一次迭代中使用新学习的编码器/解码器生成新的翻译,直到算法收敛为止。在测试时,尽管训练时缺少并行数据,但编码器和解码器可以组成一个标准的机器翻译系统。
2.3 去噪自编码器
无约束的情形下,自编码器可以很快地学习只逐个复制每个输入单词,但是这样的模型无法学习到任何有用的结构。为了解决这个问题,采用去噪自编码器。
语言域l=srcl=srcl=src或l=tgtl=tgtl=tgt,随机噪声模型表示为CCC,定义目标函数为:
其中,x^?d(e(C(x),l),l)\widehat x \sim d(e(C(x),l),l)x
?d(e(C(x),l),l)意思是x^\widehat xx
是xxx的噪声版本的重构,xxx从单语言数据集DlD_lDl?中取得。在这个等式中,Δ\DeltaΔ两个序列之间差异的度量,在我们的例子中是token级交叉熵损失的总和。
将加上噪声的源语句通过自编码器中的encoder映射到潜在空间,然后通过自编码器的decoder从潜在空间恢复源语句,然后比较源语句和重构的结果,训练目标是让它们之间的差别最小。
加噪声的两种方法:
- 以pwdp_{wd}pwd? 的概率删除句子中的任意一个单词
- 稍微打乱输入语句,为输入句子应用一个随机排列σσσ,σσσ是第iii个单词偏移后的位置,含义是一个单词最多可以偏离原来位置kkk个单词的距离,?i∈{1,n},∣σ(i)?i∣≤k\forall i \in \{ 1,n\} ,|\sigma (i) - i| \le k?i∈{ 1,n},∣σ(i)?i∣≤k,其中nnn是输入句子的长度,kkk是可调参数。
2.4 回译技术(交叉域训练)
我们方法的第二个目标是:限制模型能够将来自域 l1l_1l1? 的句子映射到 l2l_2l2?,采样一个输入语句 xxx,x∈Dl1x \in {D_{
{l_1}}}x∈Dl1??,并产生一个有错误的这个句子在l2l_2l2?中的翻译,即 使用前一次迭代后的模型 M()M ( )M() 生成翻译后的输出 yyy,即 y=M(x)y=M ( x )y=M(x) 。之后,使用上述的噪声函数 C()C ( )C() 应用到 yyy 上,得到 C(y)C ( y )C(y) 。语言 A 的编码器将 C(y)C ( y )C(y) 编码,得到潜在空间的表示,然后由语言 B 的解码器将其解码,重构出 C(y)C ( y )C(y) 的无噪声版本xxx。训练模型时使用的是所有的交叉熵误差总和。
Δ\DeltaΔ两个序列之间差异的度量,在我们的例子中是token级交叉熵损失的总和。
2.5 对抗训练
直观地说,神经机器翻译系统的解码器只有当它的输入是由它所训练的编码器产生的时候才能工作得很好,或者至少当输入的分布非常接近它的编码器所产生的分布的时候。因此,我们希望编码器在相同的空间中输出特性,而不管输入语句的实际语言是什么。如果满足这种条件,我们的解码器就可以用某种语言解码,而不管编码器输入语句的语言是什么。
但是请注意,在目标域中生成有效句子时,解码器仍可能产生错误的翻译,因为限制编码器在同一特征空间中映射两种语言并不意味着句子之间的严格对应。 幸运的是,先前在等式2中为跨域训练引入的损失减轻了这种担忧。 另外,最近有关双语词汇归纳的研究表明,这种约束在单词层面上非常有效,这表明它也可以在句子层面上发挥作用,只要这两个潜在表示在特征空间中表现出强大的结构即可。
为了增加这样一个约束,我们训练了一个神经网络,我们称之为鉴别器,来对源句的编码和目标句的编码进行分类。
鉴别器训练:以每个编码器的输出作为输入,该输出即潜在向量序列(z1,....,zm)({z_1},....,{z_m})(z1?,....,zm?);继而产生一个二值预测,预测被编码的语句所属于的语言,编码器学习欺骗鉴别器,鉴别器通过每个时间步的特征向量预测输入所属的语言种类:
pD(l∣z1,...,zm)∝∏j=1mpD(l∣zj){p_D}(l|{z_1},...,{z_m}) \propto \prod\limits_{j = 1}^m {
{p_D}(l|{z_j})}pD?(l∣z1?,...,zm?)∝j=1∏m?pD?(l∣zj?),其中 pD:Rn→[0;1]{p_D}:{R^n} \to [0;1]pD?:Rn→[0;1],其中000对应源域,111对应目标域。
通过最小化交叉熵损失来训练鉴别器以预测语言,
其中(xi,li)(x_i,l_i)(xi?,li?)对应从两个单语语料库均匀采样得到的句子-语言id对。θD\theta_DθD?是鉴别器的参数,θenc\theta_{enc}θenc?是编码器的参数, ZZZ是编码器词嵌入向量。
相反,编码器被训练用来欺骗鉴别器:
最终的目标函数:最终的目标函数为:源自编码器损失函数+目标自编码器损失函数+源->目标交叉域损失+目标->源交叉域损失+鉴别器损失
λautoλ_{auto}λauto?, λcdλ_{cd}λcd?, λadvλ_{adv}λadv? 是超参数,衡量自编码器,交叉域和对抗的损失的重要性。同时,通过最小化鉴别器损失LDL_DLD?来更新鉴别器。
3. 训练
3.1 迭代训练
算法背后直观来看,只要初始翻译模型M(1)M^{(1)}M(1)至少保留输入句子的一些信息,编码器会把这样的翻译映射到特征空间的表示中,特征空间也对应着输入的更清洁的版本。同时解码器进行训练,根据有噪声的特征预测无噪声输出。将这两个部分放在一起将产生更少的噪声翻译,这将在下一次迭代中实现更好的反向翻译,等等。
图2 顶部(自编码):该模型学习在每一个域中对句子进行降噪。底部(翻译):像以前一样,使用另一种语言编码,使用上一次迭代时模型生成的翻译作为输入(浅蓝色方框)。绿色函数表示损失函数中的项。
训练过程迭代进行,训练循环分为以下三个步骤:1.使用语言 A 的编码器和语言 B 的解码器进行翻译;2. 给定一个带噪语句,训练每个自编码器重新生成一个去噪语句;3. 给步骤 1 中得到的翻译语句添加噪声然后重新生成,以提升翻译能力。这一步中,语言 A 的编码器和语言 B 的解码器(以及语言 B 的编码器和语言 A 的解码器)需要一起训练。
注意虽然步骤 2 和步骤 3 是分开的,但权重是同步更新的
算法步骤:
从初始翻译模型M(1)M^{(1)}M(1)开始的迭代算法,在每一次迭代中,通过最小化最终目标函数中的损失函数,来训练新的编码器和解码器(第七行),然后通过组合编码器和解码器得到一个新的翻译模型Mt+1M^{t+1}Mt+1。
3.2 无监督模型选择准则
对于模型的评分BLEU与传统的NMT也有所不同:把域l1l_1l1?中的句子翻译到域l2l_2l2?中,然后将翻译好的结果句子翻译回l1l_1l1?。模型的质量通过计算原始句子和经过两步翻译得到的句子的BLEU得分来评估,然后将表现平均在两个方向上,选择拥有最高平均分数的模型。
给定编码器eee,解码器ddd,两个非平行语料DsrcD_{src}Dsrc?和DtgtD_{tgt}Dtgt?,Msrc→tgt(x)=d(e(x,src),tgt){M_{src \to tgt}}(x) = d(e(x,src),tgt)Msrc→tgt?(x)=d(e(x,src),tgt)是从srcsrcsrc到tgttgttgt的翻译模型,Mtgt→srcM_{tgt\to src}Mtgt→src?是反向模型。我们的模型选择标准MS(e,d,Dsrc,Dtgt)MS(e,d,D_{src},D_{tgt})MS(e,d,Dsrc?,Dtgt?)是:
无监督模型选择标准用于
a)确定何时停止训练,
b)在不同实验中选择最佳超参数设置。
在前一种情况下,提出的标准与测试集上的BLEU之间的Spearman相关系数平均为0.95。 在后一种情况下,该系数的平均值为0.75,这很好,但差强人意。 例如,使用无监督条件选择的模型的测试集上的BLEU分数有时比使用500个并行句子的小型验证集选择的模型的分数低1或2个BLEU点。
4. 实验
详见文章
5. 相关工作
详见文章
6. 结论
我们提出了一种新的神经机器翻译方法,其仅使用单语数据集学习翻译模型,而句子或文档之间没有任何对齐。 我们方法的原理是从简单的无监督逐词翻译模型开始,并基于重构损失来迭代地改进此模型,并使用鉴别器来对齐源语言和目标语言的潜在分布。 我们的实验表明,我们的方法无需任何形式的监督就能学习有效的翻译模型。