天天看点

无监督神经机器翻译(UNSUPERVISED NEURAL MACHINE TRANSLATION)学习笔记无监督神经机器翻译学习笔记

无监督神经机器翻译学习笔记

几个月前MikelArtetxe和KyunghyunCho等人提出了一种极具潜力的无监督神经机器翻译(UNSUPERVISED NEURAL MACHINE TRANSLATION)模型,这个模型突破了原有的神经机器翻译需要有足够大的平行语料库的限制,创造了一种可以使用两个单语语料库进行训练的翻译模型,克服了平行语料库不足的难题。同时翻译过程应用到了识别语义的思想,可以被广泛的应用于多语言的翻译系统中。在此对于该文章的学习做一下简单的记录原文

对语义的理解

先来考虑一下婴儿学习一种语言的过程。首先他的父母会在他的面前指这自己不断的说“爸爸”“妈妈”,然而一开始婴儿肯定无法理解什么是“爸爸”,什么是“妈妈”对于他而言这不过是两个特殊的声音或者图像而已。然而随着婴儿不断长大,他们终将会有一天明白站在他面前的那个男人叫“爸爸”,那个女人叫“妈妈”,至于婴儿是怎么样完成这个对应关系的,我们无需理解,可能是长时间的生物进化和婴儿自身的生长把大脑里的一些参数(神经元)进行修改的结果。不管怎么样这个婴儿成功的理解了“爸爸”和“妈妈”这个概念,并可以应用到以后的对话中去。对于中国婴儿而言他们学到的是“爸爸”和“妈妈”,然而对于一个英国人而言他学到的是“father”和“mother”,对于日本人而言他学到的是“父さん”和“母さん”,事实上无论他是哪国人他学到的都是相同的概念,即爸爸和妈妈和对应的是一个男人和一个女人的概念,并且能够理解这两概念有所区别。而当他学会了一种语言后,在去学习第二种语言的时候,别人指者妈妈的图像在告诉他那叫“mother”他就很自然而然的能够把”妈妈“翻译成“mother”,同时如果他也学习日语他就可以吧“妈妈”对应成为“母さん”,这样就可以很快的学习到不同的语言。对于计算机而言,人们一直设想去重复这一过程,不过很不幸,一个良好的语义概念并不容易学到,即便是在这篇文章中,翻译模型所学到的“语义”也仅仅是两种语言之间的语义,对于第三种语言可能并不能完美的表示。究其原因,可能是在学习语义的过程中没有使用图像或者声音等第三方条件去标注这个语义概念,然而在机器翻译过程中这个工作是很难实现的(需要图像-文本对应数据)也是没有必要的(处理图片和语音比单纯处理文字更加耗时)。在这篇文章中使用了Google提出的seq2seq模型(一种利用大量单语语料学习出一种encoder)并加以改进实现了对两种语言之间的“语义”概念的构建。

encoder的构建方法

首先定性的理解一下这个encoder的作用,这个encoder可将文本映射到一个特殊的空间上的一个向量,这个向量就表示了这个词的可以将它与其他词区分开来的特征也就是某种“语义”例如:

”mother“==>[0.1,0.2,0.3,0.6,0.1,0.7,0.9,0.8]

” father “==>[0.1,0.3,0.5,0.7,0.8,0.6,0.9,0.8]

需要说明的是这种映射并不是按照某种已知的”语义“去构建的,它只是一个词的一种标号在词表中,用以区分这个词与其他词的一种标识,也可以用这个向量作为神经网的输入信息。那么如何去在单语语料库中学习得到这样的一个encoder呢? 其实,可以把这个过程想像为在大量的语料中找”长得像的词“的一个过程,所谓”长得像”可以通过某个词的上下文关系,出现的频率等信息加以区分即假设在语料库中一个出现了如下次数:

A->B->X->C->D

A->E->B->X->C->D

A->B->F->G->X

可以发现X始终出现在AB的后边,那么这个特征便可以用来标识X这个词这样就可以用一个向量来表示X,这个学习的过程中,我们并不知道这些向量中的参数是什么意思,也很难理解这些参数,这是属于机器的“思维“但是我们也并不需要知道这些参数的意思,只要机器能够用这些向量对词进行很好的区分,我们就可以认为机器学习到了词汇的”语义“。当然区分词语的因素有很多很多,不局限于语序一种,事实上上面提到的区分词语的方式很简单也很清晰,但是在这个翻译模型中应用语序关系进行词汇区分是一个不好的选择,后面会有详细的解释。

有了词的语义概念了就可以根据这个词的“语义”去学习句子的语义,毕竟翻译需要以句子为单位进行,在学习句子语义的时候可以将词向量作为输入通过一个两层的双向RNN神经网进行学习,学习的到的结果就可以用来将句子映射到一个由数字所代表的”语义“空间上去。

当然只是用一种语言的语料库进行encoder的训练只能得到对应于这种语言的”语义“,如果用两种语言的单语语料库同时进行训练,就可以得到一个可以同时将两种语言的词汇分开的encode方法,根据这个方法就可以得到一个能够同时表述两种语言的”语义“的encoder。通过这个encoder可以将两种语言的词映射到同一个向量空间,作为这两种语言的共同“语义”。训练的具体过程可以参考论文中所引用的论文,和论文附带的源码,在此不做更多赘述

个人认为,这个共同encoder的训练是整个翻译过程的核心,它很大程度上决定了翻译模型的好坏,而其中蕴含的思想更是值得研究的,即试想如果能够使用世界上所有的语言进行共同训练,那就可能得到一个人类语言的共同的encoder他能够将语言映射到一个表示了所有语言的共同语义的向量空间,这样便可以使机器真正学到自然语言中的语义,做到理解自然语言,同时如果可以对这个共同训练得到的向量空间加以分析,甚至可能得到以语言为依托的智能,当然这已经是一个玄学问题,就不再更深入的讨论了。。

翻译模型结构

在上一步的工作中我们得到了一个很好的encoder,下面就需要将这个encoder应用到 这个无监督的翻译模型中。这个翻译模型使用了一个共同的encoder来将两种不同的语言文本映射到相同的向量空间中去。

无监督神经机器翻译(UNSUPERVISED NEURAL MACHINE TRANSLATION)学习笔记无监督神经机器翻译学习笔记

然后再同时训练两个由向量空间到L1和L2的decoder训练的过程使用了两层的RNN进行训练。再翻译的时候首先用共用的encoder对源语言语言进行映射,映射到一个相同的向量空间中去,得到再使用目标语言的decoder去对映射后的向量进行decode得到翻译结果。

训练过程

训练这个翻译模型需要两个步骤 (1)denoising (2)backtranslation

首先来解释一下denoising 的含义,这里边的noise是人为添加的,用来减小语序对于翻译结果的影响来提高翻译质量。这里应用了一个假设,即翻译过程中的语义不依赖于词语顺序,但是在实际操作的过程中词语的顺序又很大程度上影响了embedding和encode的结果。词语在句子中的位置可以很直接也很清晰的将一个词汇与其他词汇分开,在seq2seq模型中语序很大程度上影响了映射的结果,这对于区分词汇来说是一件好事,然而对于理解语义来说却并不好。为了解释这个问题可以考虑小学时候常见的把字句和被字句的转换问题,无论是把字句还是被字句他们表示的是同一个意思,但是他们的主语和宾语的位置是完全相反的,如果对把字句和被字句分别进行embedding 获得的结果会对相同的词汇产生区别很大的结果,这显然不是我们所想要的。在举另一个例子,任何一个人看到一个句子的时候,并不会主动的分析这个句子是否符合语法结构,就好比我写的这篇博客中,一定是充满了语法错误,但是读者依然可以这篇博客其中的含义,这是因为我们人类有通过词汇获得信息的能力,或者说人类在获取语言信息时更多的使用的是词汇信息而不是句子结构信息。在这个假设的基础上,人为的消解掉语序对于理解语义的影响就很有必要。要消除这个影响很简单的一个想法便是,人为调整句子中的词语顺序使得到的embedding结果中表示词语顺序的部分是错误的,这样就无法根据语序信息来区分词汇,迫使机器通过其他信息来对词语进行区分,而这些信息无疑能够更好的表示“语义”。文章在denoising过程假设有N个词汇,那么便可以将N/2个词语顺序对调,进行认为打乱,而通过对打乱后文本进行encoder的训练可以消除人为噪声的影响,得到的结果就是符合我们要求的表示“语义”的encoder结果。

再来解释一下back translation的含意,back translation是指将源语言L1经过翻译系统翻译成L2,再根据翻译得到的L2翻译回L1new,根据比对L1和L1new的差异来进行学习。我们知道,机器学习的过程需要对模型中的参数进行化,使训练后的模型能够尽可能的符合客观事实,根据模型得到的输出也符合预期结果。为了实现这个优化我们就必须将模型得到的结果与预期结果进行比对从而知道如何更新参数,使学习能够进行。但是再只能使用单语语料库的条件限定下,一个源语言的句子是没有与其对应的目标语言的句子,因此要使学习能够进行,就必须采用一种对照手段来对模型进行优化,而backtranslation正好可以实现这一目的。在这里由于两个decoder是同步训练的,我们便可以根据现有的模型将一个源语言句子先翻译到目标语言,再将目标语言通过共同的encoder和源语言的decoder翻译成源语言的句子,这样便可以根据对比原始句子和翻译后的句子进行优化,当原句和翻译后的句子差异达到可以接受的范围时便可以认为两个decoder同步训练完成。这样的训练过程没有使用平行语料库进行有监督学习,因此可以称这个翻译模型为一个无监督机器翻译模型。在文章的训练过程中采取了,teacher-student方法和注意力模型等方法对训练进行优化,在这里不加赘述可以参考

注意力模型

teacher-student方法

玄学问题

在最后说一些玄学问题,仅仅为个人猜想无理论证明。个人认为人类能从动物中脱颖而出,其最主要的原因是语言的产生,有了语言便可以存储知识构建社会结构,从而使人类得以发展。考虑一下人类学习知识产生智能的过程。最初在婴儿阶段需要通过各种感官来感受客观世界,记住种种不同的事物的直观信息,随着大脑的不断发育所记录的直观信息不断增加,以及对自然语言的学习,人的大脑渐渐学会了将客观事物的直接信息与学到的语言信息进行联系,转而倾向于使用语言来储存这些学到的信息。为了证明这一点,可以考虑学习英文单词的时候,看到了一个写在纸上的一个单词,最初我们回想起来的肯定是他的图像信息,记住了其字母顺序,大小,字体甚至纸的颜色,但是随着重复学习的进行我们不会再记得第一次看见这个单词时的图像信息而仅仅记住了他的语言语言信息,因此可以推测出语言是人脑中存储信息的形式。这样做也有很大的优点,语言信息所占用的空间更小,表达的含义更加精确,更易于交换信息等。在这篇文章里提出的构建共同encoder的过程可以看作是一个从两种语言中学习语义的过程,试想如果可以实验更多种语言构建一个多语encoder获得多种语言的共同语义,那么这个语义就很接近与人类所理解的语义,或者说可以与人类语义进行对应,这样也就提供了一个人类探知智能的一种方式。

继续阅读