张 文,冯 洋,刘 群
(1. 中国科学院 计算技术研究所 智能信息处理重点实验室,北京 100190;2. 中国科学院大学,北京 100049; 3. 都柏林城市大学 ADAPT中心 计算学院,都柏林)
近十年来,随着深度学习技术的发展,许多研究人员逐渐把机器翻译当作是序列到序列的任务,并使用编码器—解码器的神经网络框架对其进行建模,给机器翻译质量带来了很大的飞跃,大幅超过了传统方法[1-2]。基于编码器—解码器的神经机器翻译模型凭借其简单有效的优势脱颖而出,已成为当今主流的翻译模型之一。随后,注意力机制[3]的引入又给基于编码器—解码器的神经翻译模型带来了另一次飞跃。近几年,许多研究人员在基于注意力机制的神经机器翻译模型基础之上,从不同角度进行了后续的研究工作,使神经翻译模型得到了许多方面的优化[4-7]。
目前,主流的基于注意力机制的神经翻译模型的编码器和解码器多数使用门控循环单元或长短期记忆网络(long short-term memory, LSTM[8])。GRU和LSTM类似,均是顺序地以词为单位对序列进行循环展开,然后通过内部精心设计的门控机制来控制每一个循环步骤中输入和输出的信息量。这一机制促使模型可以存取序列中更远的上下文信息,同时也缓解了普通循环神经网络在过长序列上存在的梯度消失问题。GRU单元或LSTM解决了普通循环神经网络的诸多问题,但即便如此,在基于GRU单元的神经网络机器翻译模型中仍然存在着一些显而易见和令人棘手的问题。对于卷积神经网络来说,增加神经网络的层数会使模型的能力增强[9-11],这也是符合人们直观想法的。然而,当我们试图增加基于GRU单元的神经网络翻译模型中编码器和解码器的深度,来优化翻译模型的性能时发现,翻译的质量并没有随之增加,有时反而有所下降。我们猜想这是由于增加模型深度所导致梯度消失问题使得模型难以收敛,进而影响最终译文的质量。另外,层数的叠加会严重地影响训练速度。
本文中,我们在基于注意力机制的神经网络翻译模型中引入简单循环单元(simple recurrent unit, SRU[12])并替换编码器和解码器中门控循环单元。在小规模德语到英语和大规模维语到汉语翻译任务上的实验表明,通过堆叠编码器和解码器的层数,我们获得了相比基线系统有显著提升的翻译性能,甚至优于融合残差连接的基线系统。而且在1~10层之内,翻译质量与层数是成正比的。同时不像GRU单元那样,编码器和解码器中SRU层数的增加对训练速度的影响并不大。
本文组织结构为: 第1节对相关工作做一个简要的介绍;第2节对基于注意力机制的神经网络翻译模型以及简单循环单元进行数学形式化;第3节重点描述网络层堆叠方式以及如何替换基于注意力机制的神经网络翻译模型中的GRU单元;第4节我们在三个数据集上设计了六组实验验证所提出方法的有效性;最后把所得出的结论以及对未来工作方向的阐述放到第5节里。
国内外有许多学者试图探索一些有效的方法来增加模型的深度,以改进模型的性能。由于比较深层的神经网络模型往往难以训练,不容易收敛,Kaiming He等[10]提出残差连接,把前一层的输入信息通过直连边与当前层的输出相连,疏通梯度传播,减轻网络的训练难度,他们在图像识别的任务上证明了残差网络使模型更加容易优化,通过加深模型获得非常好的效果;Alexis Conneau等[11]提出了一种新的网络架构,该架构仅使用卷积和池化操作,使得模型的能力会随着模型深度的增加而增强,他们将模型的卷积层增加到29,在一些公共文本分类任务上取得最好的效果。
另外,也有一些研究人员尝试改进卷积神经网络中的残差连接。赵朋成等[13]对传统残差网络进行改进,通过在池化层使用重叠池化方案有效地保留上一层的有用信息,从而有效地提高手写体识别率,而且训练时间大幅度降低。王一宁等[14]使用一种多阶段级联残差卷积神经网络模型,能更好地重建出图像的细节和纹理,避免了经过迭代之后造成的图像过度平滑,获得更高的峰值信噪比和平均结构相似度。
学者们也在尝试使用神经翻译模型改进少数民族语言的翻译。哈里旦木等[15]从词语切分粒度的角度,分析并对比了多个翻译模型在维汉翻译任务上的性能,证明维语采用恰当的子词切分且中文端基于字符能够使模型获得最佳性能。Lei等[12]提出了简单循环单元,并将其引入到多个任务上的神经网络模型中,通过增加模型深度提升了模型性能,同时保证了训练速度。
我们借鉴前人的相关工作,使用SRU单元替换基于注意力机制的神经网络翻译模型中的GRU单元,解决加深模型所导致的梯度消失问题。然后通过加深模型中编码器和解码器的层数,稳定地提升模型的性能,产生比基线模型更加准确的译文。基于简单循环单元的深度模型性能还要优于同层数的引入残差网络的基线模型。
(1)
解码器通过最大化目标待预测词汇的似然来优化整个翻译模型,如式(2)所示。
(2)
,sj-1,αj)
(3)
其中αj是每个解码步都动态更新的源端上下文表示,即每个源端词语状态的加权和,如式(4)所示。
(4)
αi,j可被看作是源端第i个词语与目标端第j个词语之间的对齐概率,如式(5)所示。
f(·)是一个前馈神经网络,图1展示了基于注意力机制的神经网络翻译模型。其中Dj表示模型在第j步所预测词语的概率分布,极大似然估计表示计算损失的方法。
图1 基于注意力机制的神经翻译模型
简单循环单元的主要思想是避免GRU中状态计算和门控机制的复杂程度,消除门状态对前一步隐状态的依赖性,从而提高门计算单元的可并行性以加快训练速度。同时引入高速网络(highway network)使得模型能自主控制从前一层的输入中选择多少信息量不经过任何非线性变换,直接输入到下一层。这样做确保在加深模型深度时,尽量避免梯度消失的问题。
主流循环神经单元(比如GRU或LSTM)利用门机制来控制同一层不同时序状态中信息流的输入和输出量,从而有效地避免了序列过长时所产生的梯度消失问题。第t步循环计算单元的内部存储单元ct是通过式(7)计算得到:
ct=ft*ct-1+it*gt
(7)
其中,“*”表示按元素相乘。在循环计算单元的原生定义中,忘记门ft、输入门it以及候选隐状态gt的计算均需要依赖于当前步的输入xt和前一步的输出隐状态ht-1,分别是xt和ht-1加权和的非线性变换。这里对原生计算进行简化操作,gt是对当前输入xt的一个线性变换:gt=Wxt。输入门it使用一个耦合版本,如式(8)所示。
it=1-ft
(8)
下一步内部存储单元ct的计算改变,如式(9)所示。
ct=ft*ct-1+(1-ft)*(Wxt)
(9)
(10)
其中,zt是当前步的重置门。另外,所有门状态的计算仅仅依赖于当前步骤的输入xt,取消对前一个输出状态ht-1的依赖,所以对一个第t步输出,SRU的整个计算过程如式(11)~式(14)所示。
其中W、Wf、Wz为SRU中的参数矩阵,bf和bz为偏置单元向量。从上述公式可以看出,对于一个输入序列x={x1,x2,…,xls},忘记门和重置门单元的计算仅依赖于输入序列,所以它们可以在序列长度的维度上实现并行计算。但是,GRU中的门控状态的计算必须依赖于前一步的隐状态,所以在前一步隐状态没有计算完成的情况下,当前步的门控状态向量是无法获得的。这一局限性使GRU的中间门控状态计算的可并行性受到约束。
图2 基于GRU的深层循环单元示意图
图3 基于SRU的深层循环单元示意图
图4 多层双向循环神经网络计算单元堆叠示意图
我们在三个翻译任务上进行实验,分别是小规模的德语到英语翻译任务、大规模的维语到汉语翻译任务和大规模的汉语到英语翻译任务。
德英数据来自于2014年IWSLT评测竞赛中德英翻译任务,该语料主要是由TED演讲中双语对齐的字幕所组成。我们使用摩西的工具包[16]对德语源端和英语目标端进行标记化,标记化之后源端或目标端句子长度大于50的平行句对被过滤掉。开发集是从训练集中抽取的6 969个平行句对,训练集除去开发集部分一共是153 326个平行句对,测试集是dev2010,dev2012,tst2010,tst2011和tst2012的合并,一共包含6 750句[注]IWSLT2014德英翻译方向数据集的下载链接: http://wit3.fbk.eu/archive/2014-01/texts/de/en/de-en.tgz。
对于维汉翻译方向,我们使用新疆大学收集的新闻领域语料,训练语料包含289万左右的平行句对。新闻领域的开发集和测试集采用2017年CWMT上新疆大学所提供的数据,其中开发集包含900个维语句子,每句对应4个汉语参考译文,测试集包含861句,每句同样也有4个汉语参考译文。维语端做32 000次操作的字节对编码(Byte Pair Encoding, BPE[17]),中文端以字为单位解码。语料前处理后,源端或目标端句子长度大于80的平行句对被过滤掉。
汉英训练语料是从LDC语料抽取出来的1.25MB的双语平行句对,我们使用NIST 2002(MT02)数据集作为开发集选取模型,使用NIST 2003(MT03)、NIST 2004(MT04)、NIST 2005(MT05)和NIST 2006(MT06)作为测试集。源端或目标端句子长度大于50的平行句对被过滤掉。
三个翻译任务中语料规模的统计结果和词表大小见表1。由于汉英任务包括四个测试集,所以我们没有在表1中列出。
表1 语料数量和词典大小统计
对于德英翻译方向,我们使用大小写敏感的4元BLEU[18]值作为评价指标(摩西开源的multi-bleu.perl脚本)。而对于维汉翻译任务,我们使用基于字的大小写不敏感的4元BLEU值作为评价指标(摩西开源的mteval-v11b.pl脚本)。汉英翻译任务使用基于词的大小写不敏感的4元BLEU值。
RNNsearch*模型的训练参数和细节如下所述。所有的参数矩阵和向量都使用[-0.1,0.1]上的均匀分布进行初始化,所有的模型参数都使用批随机梯度下降算法进行优化,批大小设定为80,学习率使用Adadelta[19]算法进行自动调节,算法的衰减常数ρ=0.95,分母常数ε=1E-6。源端和目标端的词向量维度都设为512,所有隐状态和输出状态神经元的大小也均设定为512。为了避免梯度爆炸,如果所有梯度的L2范数大于预先设定的阈值1.0,则每个梯度都除以L2范数以限定在阈值内。我们仅在模型最终输出层使用dropout策略,dropout率为0.5。测试时我们使用柱搜索算法进行解码,柱大小设置为10,在进行柱搜索时,句子级别的负对数似然除以句长进行归一化。
另外,为了保证对比的公平性,对于GRU和SRU的隐状态,我们使用相同大小的神经元。所有实验在GeForce GTX TITAN X单块GPU上运行。我们使用Collins等人[20]提出的方法做显著性差异的检验。
4.4.1 GRU深层翻译模型
在基线系统中,RNNsearch*模型的编码器中使用两个方向的GRU,而解码器中使用了两层单向的GRU。我们尝试增加基线系统的编码器和解码器中GRU的层数,然后观察随着GRU层数的增加,翻译性能和训练速度的变化情况。表2给出了德英任务上的实验结果,其中“训练速度”的单位是小时/轮。
表2 深度GRU模型在德英翻译任务上的实验结果
我们将编码器和解码器层数从1增加至10,开发集和测试集上的翻译性能并没有提升。相反,层数从1增加到4的过程中,RNNsearch*的翻译质量迅速地下降,从第6层开始,其性能开始急剧退化。经过分析,原因是RNNsearch*的解码器中使用两个门控循环单元,层数的增多使模型在训练过程中反向求导时更加容易产生梯度消失而无法更新参数的现象。此外,实验表明,模型的深度越大,越难以收敛。如表2所示,当模型深度到达10层时,RNNsearch*几乎已经无法收敛,翻译性能也急剧下降。另外,层数堆叠也使模型的参数随之增多,系统的训练速度变得越来越慢。
4.4.2 SRU深层翻译模型
从4.4.1节的实验结果可以看出,对于基线系统,堆叠编码器和解码器中的GRU计算单元,会使模型的性能退化,特别是层数增加到6层之后。我们使用SRU替换第二个基线系统RNNsearch*中的GRU,然后以同样的堆叠方式尝试增加模型的深度,观察模型性能和训练速度的变化情况,表3显示了基于SRU的深层模型在德英翻译任务上的BLEU结果。其中“训练速度”的单位是小时/轮,“参数量”的单位是兆,粗体表示最好模型,“”表示在99%的置信区间显著优于基线模型。为了保证实验对比的公平性,深层GRU模型和深层SRU模型的堆叠均不使用残差连接。
表3 德英任务翻译结果
对比表2右边部分RNNsearch*与表3的实验结果可以发现,我们基于SRU的模型在增加层数之后表现出了明显的优势。只有在层数为1的情况下,基于SRU的系统性能不如基于GRU的系统;随着层数的增加,不管是在开发集还是在测试集上,SRU系统的翻译质量均不断提升,而且在对应层数上都要优于基于GRU的系统。基于GRU的系统在层数超过6之后就会由于梯度消失导致翻译质量急剧退化,而我们的系统依然保持很好的性能并不断提升。在训练速度方面,随着层数的增加,SRU模型的参数量也会有所增加,但是对训练速度的影响并不大,不像GRU系统的训练速度受到层数的很大影响。在IWSLT德英翻译任务上,基于SRU的深度模型比基线系统提升0.94个BLEU值,表现出显著优势。
我们尝试继续加深基于SRU的深度模型,翻译性能的变化基本保持一个平稳的趋势,但由于参数量的增加,训练速度会有所下降。
我们又尝试在维汉翻译任务上验证SRU模型的性能。表4给出了基于SRU的深层模型在维汉翻译任务上与基线模型的BLEU对比结果。其中粗体表示最好模型,“*”表示在95%的置信区间内比基线模型有显著性提高。从表4可以看出,深度模型随着层数的增加,翻译的质量在整体上呈现上升趋势,最好的单模型比基线模型要高3.31个BLEU值。由此可见,基于SRU的深度模型不仅可以有效地解决梯度消失的问题,而且增加编码器和解码器的层数稳定地提升了翻译性能,比基线系统有非常显著的提升。
表4 维汉任务翻译结果
4.4.3 对比深层SRU模型与融合残差网络的深层GRU模型
从表2的实验结果可以看出,随着模型深度的增加,基于GRU的模型RNNsearch*会出现梯度消失而退化的问题。为了解决这一问题,残差网络连接被提出,通过在一个浅层网络基础上叠加恒等映射层,将前一层的输出信息直接与当前层的输出信息相加作为下一层的输入,使得低层的信息有效地与高层建立直连,可以让模型性能随深度的增加而不退化。而基于SRU的深度模型是从另外一个角度去解决梯度消失的问题。我们在德英翻译任务上分别训练4层和8层的不引入和引入残差连接的深层GRU模型以及深度SRU模型,对比它们之间的性能。如表5所示,其中粗体表示SRU模型优于GRU+Res,“”表示在99%的置信区间上比GRU+Res有显著性提升。
表5 深度模型在德英翻译任务上的对比实验
表5中的实验结果表明,加入残差接连后,基于GRU的模型RNNsearch*的翻译性能相比于不加入残差连接有明显的优势,而且在使用超过6层的编码器和解码器时并没有出现梯度消失而导致模型退化;在使用8层的编码器和解码器时,性能大幅度超过不引入残差连接的模型。然而,在使用相同层数的编码器和解码器的情况下,基于SRU的深度模型的性能要明显优于融合残差连接的GRU深度模型,并有非常显著的提升。
4.4.4 对比深层SRU模型与深层LAU模型
非线性循环激活函数使基于GRU的神经网络翻译模型的编码器和解码器在训练过程中遇到梯度消失的问题,进而促使优化过程难以收敛。为了缓解这一问题,Wang等[7]从减少循环单元内部梯度传播长度的角度,提出了线性联合单元(LAU)。LAU将每一个循环单元的输入和输出进行线性关联,允许信息在空间和时间方向上无障碍流通。而SRU引入高速网络使模型自主控制从前一层输入的信息中选择多少不经过非线性变换直接输入到下一层,在加深模型深度时,能够缓解梯度消失的问题。另外,不像GRU和LAU,SRU中忘记门和重置门单元的计算仅依赖于输入序列,不需要前一步的隐状态,所以可有效地实现时间方向上的并行计算。
深层SRU和LAU在NIST汉英测试集上的对比实验结果如表6所示,表中第一列括号中的内容分别表示编码器和解码器的层数。Wang等人没有列出LAU(8,6)在各个测试集上的结果[7]。从表中可以看出,2层的SRU模型并没有超过4层的LAU模型,但是当SRU模型的层数增加到与LAU模型相同时,在平均水平上超过了4层LAU 0.48个BLEU值。当SRU模型的编码器和解码器层数分别增加至10时,达到了最好效果,超过8层编码器和6层解码器的深层LAU模型0.71个BLEU值。由此可见,不论是在缓解梯度消失,还是提升翻译性能方面,深层SRU模型均占有明显优势。
表6 NIST测试集上深度SRU与LAU的对比实验
4.4.5 在不同句子长度上对比SRU和GRU
为了验证SRU在提升长距离依赖的处理能力方面是否有所帮助,我们将德英翻译任务的测试集源端按照句子长度划分为8份,使用7个模型分别对每一份特定句长范围内的测试集进行解码,然后计算每一个解码结果的BLEU分数。图5展示了不同句长范围内的测试集分别使用7个模型翻译所得译文的BLEU曲线。其中L4表示4层编码器和4层解码器,res表示层与层之间有残差连接。从图中可以看出,在不加残差连接的情况下,增加层数使GRU模型在所有句长范围上的翻译性能均明显下降。GRU模型的性能在引入残差连接后有所提升。深层SRU模型在所有句长范围内均超过了浅层GRU模型和引入残差连接的深层GRU模型,而且在超长句子上尤为明显。长度在70和80之间的句子上,12层SRU模型比浅层GRU模型高5.46个BLEU点,超过带残差连接的8层GRU模型2.88个BLEU值。
图5 德英任务不同句长上SRU和GRU的对比
实验部分的结果表明,对于使用GRU单元的翻译模型来讲,当编码器和解码器的深度增加得少于6层时,基线系统RNNsearch*的性能会有所下降,使翻译质量微弱地变差。但是,当编码器和解码器超过6层之后,就会导致模型无法收敛。原因在于RNNsearch*模型的解码器使用了两层的GRU,深度过大导致反向求导过程失败而无法更新参数。两个翻译方向上的实验结果均表明,基于SRU的深度模型有效地解决了这一问题,并且随着深度增加,模型性能也稳定地得以提升,显著地超过了基线模型。与GRU相比,SRU保留门控机制特性的同时,计算上避免了对前一步隐状态的依赖,能够在一定程度上实现并行,所以深度的增加并没有对训练速度产生很大影响。而基于GRU的基线模型随着层数增加,训练速度变得非常慢。在不使用残差连接的情况下,我们模型的性能显著地超过了引入残差连接的基线模型。
另外,在NIST汉英翻译任务上,与同样解决梯度消失问题的深度LAU模型相比,我们同深度的深层SRU模型具有明显优势,持续加深SRU模型,优势更加明显。在不同句长上的各模型对比实验结果表明,深层SRU模型在超长句子翻译上的性能提升非常显著。
对于基于门控循环单元的神经网络机器翻译模型而言,编码器和解码器的堆叠达到一定深度时,会出现梯度消失和模型无法收敛的问题,使得模型性能急剧恶化,译文质量大幅下降。为解决该问题,在本文中,我们将简单循环单元引入到基于注意力机制的神经网络翻译模型当中,通过堆叠的方式加深了编码器和解码器的结构。我们在2014年IWSLT德英和2017年CWMT维汉两个翻译任务上进行了实验。实验结果表明,基于SRU的深度模型有效地解决了层数增加到一定程度所导致的梯度消失问题,其性能不仅随着深度的增加而得到逐步地强化,而且比基线模型有非常显著的提升。另外,当基于GRU的深度模型使用残差连接时,梯度消失的问题也可以在一定程度上得以缓解;在层数相同的情况下,基于SRU的深度模型比使用残差连接的GRU深度模型还要有非常显著的优势。在NIST汉英翻译任务上的对比实验说明,深层SRU模型要优于同样解决梯度消失问题的深度LAU模型。最后,针对不同句长范围内的测试集,我们对比深度SRU和GRU模型后发现,深度SRU模型在翻译超长句子时有明显优势,可见,SRU有利于提升模型长距离依赖的处理能力。
我们将在下一步的工作中,探索如何更好地堆叠简单循环单元,以进一步改进模型性能。另外,维语端词语的切分粒度,对翻译性能的影响比较大,我们考虑在维语端基于字符进行操作。