0. 导言
本博客源自本学期研究生的课程作业,需要针对某个指定的领域做Presentation,在写此博客之前,我对机器翻译一无所知,如后续出现任何错误,欢迎各位大佬不吝指正。本文大概分为三大部分,第一部分简单介绍机器翻译和无监督机器翻译。第二部分介绍最先取得良好效果的无监督机器翻译模型。第三部分会介绍近两年无监督机器翻译发表在顶会的进展。
1. 概述
1.1 机器翻译
所谓机器翻译,就是利用机器的力量来做从一种自然语言(源语言)到另一种自然语言(目标语言)的自动翻译。传统的机器翻译算法依赖于对齐的平行语料库,比如AI Challenger和UN Parallel Corpus语料库,这两个数据集中包含着数以千万计的以句子为单位的平行的语料。
机器翻译问题存在一个很大的难题,就是如何对机器翻译的效果进行评测。最合理的方式当然是让人去评价翻译的好还,但是这样的成本实在是太高了。在实际中,我们使用最多的是BLEU,用于评估模型生成句子和实际句子差异的指标。BLEU具体的使用方法不是本文重点,详见一种机器翻译的评估方法。但是BLEU不考虑文本意思和句子结构,可以作为评测标准,但是不能作为唯一标准,关于机器翻译的评测,还有METEOR,ROUGE,CIDEr等测评指标。
机器翻译的发展历程如下图所示,可以看到机器翻译经历了从统计机器翻译(SMT)到神经网络机器翻译(NMT)的变革。
神经网络机器翻译的baseline是一个encoder-decoder+attention的模型,如下图所示
Encoder:依次输入到RNN 或 transformer或CNN中
Decoder:将encoder最后一个unit的输出,输入到decoder中,同时输入<s>,每次计算attention,将得到的context和当前单词一起送入decoder,不断输出,选取概率最大的一项,用index2word映射为单词,直到出现</s>
如何训练:不断输入GT的前一个词,强迫其预测后一个词。
如何inference:只输入<s>,使用beam search来得到最终的输出。
1.2 无监督机器翻译
传统的机器翻译都是依赖于平行的语句的,但是对于小语种,往往平行的语料是十分有限的,但是大量的非平行语料库是易得的,那么有没有办法去使用非平行的语料库做机器翻译呢?
实现无监督的机器翻译,需要解决许多问题。在没有平行语料的情况下,能否建议一个双语词典?没有人工翻译做参考,怎么才能保证机翻的流畅性?在后面的章节中,我们会解决这两个问题。通过寻找不同语种词向量之间的映射,来构建双语词典,通过去噪自编码器来模拟句子不通顺的情况。
2. 无监督机器翻译的实现
2.1 构建词典
本节的内容来自WORD TRANSLATION WITHOUT PARALLEL DATA
首先,针对各自的语料库,我们要根据Word Embedding来构建各自的词向量,将离散的单词映射到一个连续的高维空间。之后,我们的目标是将两种语言的词映射到同一个潜在空间,我们应该让语义相近的词距离更近。
如下图所示,为了实现源语言到目标语言的词向量映射,我们先通过一个GAN网络,去学习这样的一个映射关系。
通过这种方式,我们就粗略的得到了一个W。但是这个W的效果依然不够理想。针对这种构建词典的问题,我们参考有监督学习是怎么做的。在有监督学习中,我们可以选择一些已知的高质量的对应词作为“锚点”,我们根据锚点的情况,做变换,得到一个整体的映射,这个过程通过procrustes分析可以做到,具体的procrustes分析可以参考普式分析。
下面的问题就是,在无监督学习中,我们应该如何找到这样高质量的锚点。在这里,我们基本的思想是如果两个单词互为最邻近词,那么这两个词应该是同义的,即所谓的锚点。但是最近邻是一个不对称的概念,A点的最近邻是B,但是B的最近邻不一定是A。这里面会产生一个问题,有些点可能是其他很多点的最近邻,有些点可能不是任何一个点的最近邻。
在这里,作者提出了一种叫cross-domain similarity local scaling的方法来寻找更多的最近邻点。
T点到S的距离定义为
,S到T的距离定义rS(T)类似。如果一个单词和很多另一语言的单词都很接近,那么r的值就很高。定义CSLS距离为
。这个定义抑制了某些单词是很多单词的最近邻的情况,因为对于这种情况通过上文中定义的距离进行了惩罚。
以通过CSLS定义的距离找到互为最邻近词,以这些词作为锚点,通过procrustes分析,我们就得到了
2.2 构建机器翻译模型
本节的内容来自UNSUPERVISED MACHINE TRANSLATION USING MONOLINGUAL CORPORA ONLY和Phrase-Based & Neural Unsupervised Machine Translation
有了2.1的基础,我们来看看怎么实现无监督的句子级别的翻译。
在这篇论文中,作者认为,所有的语言可以共享一个编码空间(latent space)。如果这么想的话,我们可以用一套encoder和decoder来做这个事情。encoder可以把语言编码成一种通用的表示,而decoder则可以把编码还原成任意一种语言。如上图所示,在训练过程中,我们要训练encoder-decoder的两种能力:(1)从加噪声的句子中还原句子。(2)从加噪声的译文中还原原文。
在这里要解释一下,为什么我们要在所有的训练过程中都给加个噪声(加噪声的手段很简单,小概率的丢一些词,或者改变某些词的位置)。首先针对第一个任务,如果不加噪声,那么encoder-decoder只需要学会逐词复制就可以了。对于翻译这个任务来说,初始的翻译模型,比如通过字典进行逐字逐句翻译的模型,质量是比较低的,可以理解成有很大的噪声。
上文中的损失函数
和
都是基于交叉熵损失函数构建的。另外参考2.1的内容,我们使用GAN网路,对encoder得到的latent space进行限制,提高模型的表现。
后一篇文献Phrase-Based & Neural Unsupervised Machine Translation感觉就是前两篇文献的总结和改进。
在这篇文献中,作者总结无监督机器学习主要划分为三个步骤
(1)词到词的初始化
(2)语言建模
(3)迭代回译
作者在这篇论文中用phrase-based statistical machine translation(PBSMT)+NMT,取得了无监督机器翻译的最好效果。
3. 无监督机器学习翻译的进展
3.1 Cross-lingual Language Model Pretraining
在第2节介绍的模型,涉及到一个模型的初始化问题,初始模型的好坏对最终翻译结果具有很大的影响。这里通过跨语言的pretraining直接训练encoder-decoder。
Pretraining模型主要涉及到三点:(1)Shared sub-word vocabulary:通过Byte Pair Encoding (BPE)构建字典。(2)Causal Language Modeling (CLM):使用Transformer在给定前序词语的情况下预测下一个词的概率。(3)Masked Language Modeling (MLM)
3.2 Unsupervised Neural Machine Translation with SMT as Posterior Regularization
这篇论文针对的是回译模型噪声多,翻译质量差的问题,这些问题会在训练的过程中积累,影响到最终的翻译效果。
左侧是模型初始化,右侧是论文方法的主体部分。在这里同时用到了基于统计的机器翻译和基于神经网络的机器翻译。“初始的 SMT 模型翻译一批单语数据,构成的伪数据作为初始 NMT 模型的训练数据。在训练得到初始的 NMT 模型后,将继续进行交替回译(右下,iterative back-translation NMT),并用收敛的 NMT 模型翻译出一批新的伪数据。此时产生的伪数据含有大量的噪音,可以通过这批伪数据训练新的 SMT 模型(右上,SMT as PR)。SMT 模型通过构造质量更高的基于片段的翻译概率表(phrase translation table),将伪数据中的噪音过滤掉,并通过翻译新的一批单语数据,得到互译性更好的一批伪数据。这一批伪数据便可以用于调整(fine-tune)之前的 NMT 模型,之后 NMT 模型再次进行交替回译。我们将训练 NMT 和 SMT 的过程集成在一个 EM 训练框架中,两个过程进行交互迭代直到最终收敛。”—