机器之心专栏
本专栏由机器之心SOTA!模型资源站出品,每周日于机器之心公众号持续更新。
本专栏将逐一盘点自然语言处理、计算机视觉等领域下的常见任务,并对在这些任务上取得过 SOTA 的经典模型逐一详解。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
本文将分 3 期进行连载,共介绍 18 个在机器翻译任务上曾取得 SOTA 的经典模型。
- 第 1 期:RNNsearch、Multi-task、attention-model、Convolutional Encoder、Attention、Value-Network
- 第 2 期:Unsupervised NMT、PBSMT、coarse-to-fine、two-pass decoder translation、XLMs、MASS
- 第 3 期:FlowSeq、mBART、BERT-fused、mRASP、mRASP2、CeMAT
您正在阅读的是其中的第 1 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
第 1 期回顾:RNNsearch、Multi-task、attention-model…你都掌握了吗?一文总结机器翻译必备经典模型(一)
本期收录模型速览
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
Unsupervised NMT | https://sota.jiqizhixin.com/project/unsupervised-nmt 收录实现数量:2 支持框架:PyTorch |
Unsupervised Neural Machine Translation |
PBSMT | https://sota.jiqizhixin.com/project/pbsmt 收录实现数量:13 支持框架:PyTorch、TensorFlow |
Phrase-based & Neural Unsupervised Machine Translation |
coarse-to-fine | https://sota.jiqizhixin.com/project/coarse-to-fine-2 | Addressing the Under-translation Problem from the Entropy Perspective |
two-pass decoder translation | https://sota.jiqizhixin.com/project/two-pass-decoder-translation | Modeling Coherence for Discourse Neural Machine Translation |
XLMs | https://sota.jiqizhixin.com/project/xlm 收录实现数量:4 支持框架:PyTorch |
Cross-lingual Language Model Pretraining |
MASS | https://sota.jiqizhixin.com/project/mass 收录实现数量:2 支持框架:MidSpore、PyTorch |
MASS: Masked Sequence to Sequence Pre-training for Language Generation |
机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。
一般而言,RBMT分析一段文字,通常会先建立目标语言中介的、象征性的表义字词。再根据中介的表义字词来决定使用人工国际语言(interlingual)化的机器翻译,或是使用转化原则法的机器翻译(transfer-based machine translation)。这些方法都必须拥有具备足够形态学的、语句学的以及语义学的资讯以及大量的字词规则所建构的辞汇。常见RBMT的难处在于无法给于适当且足够庞大的资讯,来满足不同领域或是不同法则的机器翻译法。
统计机器翻译(SMT)的首要任务是为语言的产生构造某种合理的统计模型,并在此统计模型基础上,定义要估计的模型参数,并设计参数估计算法。早期的基于词的统计机器翻译采用的是噪声信道模型,采用最大似然准则进行无监督训练,而近年来常用的基于短语的统计机器翻译则采用区分性训练方法,一般来说需要参考语料进行有监督训练。
2014年Dzmitry Bahdanau和Yoshua Bengio等学者提出了神经机器翻译。神经机器翻译(NMT)基于深度神经网络,为机器翻译提供了端到端的解决方案,在研究社区中受到了越来越多的关注,且近几年已被逐渐应用到了产业中。NMT 使用基于 RNN 的编码器-解码器框架对整个翻译过程建模,编码器是把源语言经过一系列的神经网络的变换之后,表示成一个高维向量。解码器负责把这个高维向量再重新解码(翻译)成目标语言。在训练过程中,它会最大化目标语句对给定源语句的似然度。在测试的时候,给定一个源语句 x,它会寻找目标语言中的一个语句 y,以最大化条件概率 P(y|x)。由于目标语句的可能数目是指数量级的,找到最优的 y 是 NP-hard 的。因此通常会使用束搜索(beam search)以找到合理的 y。束搜索是一种启发式搜索算法,会以从左向右的形式保留得分最高的部分序列扩展。特别是,它保存了一群候选的部分序列。在每个时间步长上,该算法都会通过添加新词的方法扩展每一个候选部分语句,然后保留由 NMT 模型评分最高的新候选语句。当达到最大解码深度或者所有的语句都完全生成的时候(即所有的语句都包含 EOS 符号后缀的时候),算法就会终止。
我们在这篇报告中总结了神经机器翻译中的经典TOP模型。
Unsupervised NMT
Unsupervised NMT完全消除了对平行数据的需求,并提出以完全无监督的方式训练NMT系统,且只依靠单语语料库。该模型建立在关于无监督嵌入映射的工作基础上,由一个稍加修改的注意力编码器-解码器模型组成,可以使用去噪和回译(Back-translation)的组合在单语语料库上单独训练。具体架构见图1。
图11. Unsupervised NMT系统架构
对于语言L1的每个句子,交替进行两个步骤的训练:去噪,优化用共享编码器对句子的噪声版本进行编码的概率,并用L1解码器对其进行重建;即时回译,在推理模式下对句子进行翻译(用共享编码器进行编码,用L2解码器进行解码),然后优化用共享编码器对该翻译句子进行编码的概率,用L1解码器恢复原句。训练在L1和L2的句子之间交替进行,对后者采取类似的步骤
在编码器中使用一个两层的双向RNN,在解码器中使用另一个两层的RNN。所有的RNN都使用具有600个隐藏单元的GRU单元,设置嵌入维度为300。使用具有一般对齐功能的全局注意力方法。该系统在三个重要方面与标准NMT不同:
- 双重结构。虽然NMT系统通常是为特定的翻译方向而建立的(例如,法语→英语或英语→法语),但该方法利用机器翻译的双重性质,同时处理两个方向(例如,法语→英语)。
- 共享的编码器。该系统使用一个也是唯一的一个编码器,由相关的两种语言共享。例如,在法语和英语使用完全相同的编码器。这个通用的编码器旨在生成一个独立于语言的输入文本表示,然后每个解码器将其转换为相应的语言。
- 编码器中的固定嵌入。大多数NMT系统随机地初始化它们的嵌入,并在训练中更新它们,而我们在编码器中使用预先训练好的跨语言嵌入,在训练中保持固定。这样,编码器就得到了独立于语言的词级表征,它只需要学习如何组合这些表征来建立更大的短语表征。请注意,即使嵌入是跨语言的,也为每种语言使用单独的词汇表。这样一来,在法语和英语中都存在的单词chair(在前者是指 "肉体"),在每种语言中都会得到不同的向量,尽管它们都在一个共同的空间中。
由于NMT系统通常被训练来预测平行语料库中的翻译,这种监督训练程序在只能获得单语语料库的场景中是不可用的。可以使用以下两种策略以无监督的方式训练整个系统。
(1)去噪(Denoising)。由于使用了共享编码器,并利用了机器翻译的双重结构,模型可以直接被训练来重建自己的输入。更具体地说,整个系统可以被优化,以接受一个特定语言的输入句子,使用共享编码器对其进行编码,并使用该语言的解码器重建原句。鉴于我们在共享编码器中使用了预先训练好的跨语言嵌入,这个编码器应该学会以独立于语言的方式组成两种语言的嵌入,而每个解码器应该学会将这种表示分解为他们相应的语言。在推理时,只需将解码器替换成目标语言的解码器,这样它就能从编码器给出的独立于语言的表示中生成输入文本的翻译。
然而,这种理想的行为由于所产生的训练程序本质上是一个简单的复制任务而受到严重影响。因此,这项任务的最佳解决方案不需要掌握任何有关语言的真正知识,因为会有许多退化的解决方案,盲复制输入序列中的所有元素。如果是这样的话,那么在推理的时候,系统在用于从一种语言翻译到另一种语言时,最多只能进行非常直白的逐词替换。为了避免这种退化的解决方案,并使编码器真正以独立于语言的方式学习其输入词的构成性,建议在输入句子中引入随机噪声。这个想法是利用去噪自动编码器的基本原理,即训练系统重建被破坏的输入句子的原始版本。为此,通过在相邻的词之间进行随机交换来改变输入句子的词序。更具体地说,对于一个有N个元素的序列,进行N/2次这样的随机交换。这样一来,系统就需要了解相关语言的内部结构,以便能够恢复正确的词序。
(2)即时回译( On-the-fly backtranslation )。尽管采取了去噪策略,上述训练程序仍然是一个带有一些合成改变的复制任务,最重要的是,每次都涉及一种语言,而没有考虑在两种语言之间翻译的最终目标。为了在真正的翻译环境中训练系统,同时又不违反只使用单语语料库的约束,引入回译方法。
更具体地说,给定一种语言的输入句子,在推理模式下用贪婪解码的方法将其翻译成另一种语言(即应用另一种语言的共享编码器和解码器)。这样,我们就得到了一个伪平行的句子对,并训练系统从这个合成翻译中预测原句。不过,与标准的回译相反(使用一个独立的模型来一次性回译整个语料库),该方法利用所提出的架构的双重结构,使用正在训练的模型本身来即时回译每个小批次(minibatch)。这样,随着训练的进行和模型的改进,它将通过回译生成更好的合成句子对,这将有助于在接下来的迭代中进一步改进模型。
具体描述这一过程如下:首先L1 decoder和L2 decoder分别为两个语言的语料库的Language Modeling(语言模型)。
左边的shared encoder是两个语料库公用的encoder,并且它的嵌入是fixed cross-lingual embedding(交叉语言的vocabulary)。
回译的过程如下:
- L1 sentence→shared encoder(L1)→L2 decoder→predict L2 sentence
- predict L2 sentence→shared encoder(L2)→L1 decoder→L1 sentence
这样就算完成了一个回译过程,这个过程会去调整fixed cross-lingual embedding的值。
当前 SOTA!平台收录 Unsupervised NMT 共 2 个模型实现资源。
项目 | SOTA!平台项目详情页 |
Unsupervised NMT | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/unsupervised-nmt |
PBSMT
PBSMT是指phrase-based statistical machine translation(基于短语的机器翻译),即,使用基于短语的统计机器翻译(PBSMT)系统进行无监督机器翻译(Unsupervised NMT)。当从x翻译到y时,PBSMT根据以下情况对y进行评分:argmax_y P(y|x) = argmax_y P(x|y)P(y),P(x|y)来自所谓的 "短语表(phrase-based table)",而P(y)是由语言模型分配的分数。给定一个bitexts数据集,PBSMT首先推断出源语言和目标语言短语之间的对齐情况。然后,填充短语表,其条目存储了源/目标语言中某个n-gram映射到目标/源语言中另一个n-gram的概率。在无监督的情况下,可以很容易地在单语数据上训练语言模型,但如何填充短语表却不太清楚,而短语表是良好翻译的必要组成部分。
初始化。使用从单语语料库中推断出的双语词典来填充初始短语表(从源语言到目标语言以及从目标语言到源语言)。在下文中,我们把短语称为单字,但同样的论证也适用于更长的n-grams。使用源词翻译成的分数来填充短语表:
其中,t_j是目标词汇中的第j个词,s_i是源词汇中的第i个词,T是用于调整分布峰值的超参数,W是将源嵌入映射到目标嵌入的旋转矩阵,e(x)是x的嵌入。
语言建模。在源域和目标域,都使用KenLM(kenlm.code.Kenneth Heafield)学习平滑的n-gram语言模型。这些模型在整个训练迭代过程中保持固定。
迭代回译(Back-translation)。为了启动迭代过程,使用无监督短语表和目标方的语言模型来构建一个种子PBSMT。然后用这个模型将源单语语料库翻译成目标语言(回译步骤)。一旦生成数据,在监督模式下训练一个PBSMT,将生成的数据映射到原始来源的句子上。接下来,同时进行生成和训练过程,但方向相反。根据需要多次重复这些步骤。如下述Algorithm 2所示。直观地说,短语表中的许多条目是不正确的,因为在训练过程中任何给定点的PBSMT的输入都是有噪声的。尽管如此,语言模型依然能够在生成时修复其中的一些错误从而确保较好的效果。
当前 SOTA!平台收录 PBSMT 共 13 个模型实现资源。
项目 | SOTA!平台项目详情页 |
PBSMT | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/pbsmt |
coarse-to-fine
为了解决高熵词( high-entropy words)的回译问题,提出了一个从粗到细的框架( high-entropy words)。在粗粒度阶段,构建伪目标句子以减少熵。在细粒度阶段,利用得出的伪句子来改进神经模型。
Coarse-grained Phase
在粗粒度阶段,构建伪目标句子,以减少高熵词的熵值。图12给出一个方法示例。词s1是一个高熵词,包含四个候选词t1、t2、t3和t4,概率分布均匀。假设训练中的双语数据集D_xy包含以下三对。在第m对(X^m, Y^m)中,s1应该被翻译成t1。在第n对(X^n, Y^n)中,t2是s1的正确翻译。在第p对(X^p, Y^p)中,s1需要同时翻译成t3和t4。图12(a)给出方法过程。在伪目标句中,用一个特殊的伪标记stoken_4s1代替候选词t1、t2、t3和t4,而其他目标词则保持不变。通过这样处理,改变概率分布,如图12(b)所示,同时,s1的熵急剧减少。假设有M个高熵词,首先生成M个特殊的伪标记。然后,通过用相应的特殊标记stoken_4sm替换sm的所有候选翻译来构建伪目标句子。
图12. 构建方法的说明
(a)通过用stoken_4s1替换t1、t2、t3和t4来构建伪目标句子。(b)显示了概率分布的变化
Fine-grained Phase
与原始目标句Y相比,得出的伪目标句Z是粗粒度的,它减少了高熵词的熵,也降低了翻译难度。现在的任务是用伪句子Z改进细粒度的神经模型。具体提出了三种方法,如图3所示。预训练方法利用得出的伪句子来实现更好的参数启动;多任务(Multitask)方法通过两个翻译任务同时训练神经模型θ;双通道Two-pass 方法将整个翻译过程分为两个步骤,即翻译步骤和消歧义步骤。
图13. 在细粒度阶段提出的三种方法:(a)预训练法,(b)多任务法,(c)双通道法
项目 | SOTA!平台项目详情页 |
coarse-to-fine | 前往SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/coarse-to-fine-2 |