论文
python代码
这是一篇不依赖于平行语料的无监督翻译模型。
传统的翻译模型需要大量的平行语料,近来一个神经网络翻译模型NMT+统计翻译模型SMT的翻译系统只用一种语料就能进行机器翻译,旨在减少对平行语料的依赖。
早期尝试用单语言语料进行机器翻译的系统,可以追溯到统计解密的方法(2011,2012年)。这类方法将源语言视为由嘈杂的通道模型产生的密文,该模型首先生成原始英语文本,然后概率性地替换其中的单词。英文生成过程是用n-gram语言建模,并且使用期望最大化或贝叶斯推断来估计通道模型参数。这类方法后来通过整合句法信息(2013)和词嵌入信息(2015)得到改进。然而,这类方法仅在有限的环境中工作,通常在单词级翻译中进行评估。
最近,2018 word translation without parallel data与2018 Phrase-based & neural unsupervised machine translation对无监督的单语言翻译模型进行了改进。这两种方法都建立在最近关于无监督的跨语言嵌入映射的工作的基础上,这些映射以两种语言独立地训练单词嵌入,并通过自学习或对抗训练学习线性变换以将它们映射到共享空间。生成的跨语言嵌入用于初始化两种语言的共享编码器,整个系统使用去噪自动编码,反向翻译和对抗训练的组合进行训练。2019年Lample表示使用跨语言模型初始化无监督翻译系统有助于取得好的翻译效果。
在无监督NMT的初步工作之后,有人认为基于短语的SMT的模块化架构更适合于这个问题,并且Lample等人(2018b)和Artetxe等人(2018b)采用了上面讨论的相同原理来训练 无监督的SMT模型,比原始的无监督NMT系统获得了很大的改进。更具体地说,两种方法都是基于前面讨论的映射方法从单语语料库中学习跨语言n-gram嵌入,并使用它们来引出与n-gram语言模型和失真模型相结合的初始短语表。然后通过术语反向翻译,对该初始系统进行细化。该论文的工作是识别了这些先前系统中的一些缺陷,并提出了一种更有原则的方法(其中包含了子字信息,使用了理论上更好的无监督调整方法),并应用了联合重新细化程序,改进后优于这些先前的系统。
最近,一些作者试图将SMT和NMT结合起来构建混合型无需监视的机器翻译系统。Lample等人(2018b)已经探索过这个想法,他们通过将标准反向翻译与无监督SMT生成的合成并行数据相结合,帮助训练他们的无监督NMT系统。Marie和Fujita(2018)进一步使用来自无监督SMT的合成并行数据从头开始构建传统的NMT系统。然后使用所得到的NMT模型通过反向翻译来增强合成平行语料库,并且从头开始在其上训练新的NMT模型,迭代地重复该过程。Ren等人(2019)遵循类似的方法,但在每次迭代中使用SMT作为后验正则化。
为什么可以不再使用双语平行语料?答:利用双语词向量映射vecmap
代码:
安装第三方依赖
./get-third-party.sh
运行代码
python3 train.py --src SRC.MONO.TXT --src-lang SRC \
--trg TRG.MONO.TXT --trg-lang TRG \
--working MODEL-DIR
·SRC.MONO.TXT是源语言原始文本
·TRG.MONO.TXT是目标语言原始文本
·SRC是源语言代号(如:'en', 'fr', 'de')
·TRG是目标语言代号(如:'en', 'fr', 'de')
·MODEL-DIR是保持输出模型的文件夹
一个平行语料库