Translating Translationese: A Two-Step Approach to Unsupervised Machine Translation

Translating Translationese: A Two-Step Approach to Unsupervised Machine Translation


这是2019年ACL上的一篇文章,是一篇关于无监督机器翻译的。

文章链接:

Translating Translationese: A Two-Step Approach to Unsupervised Machine Translation

论文点

  1. 生成了字典(跟以前的工作一样)。
  2. 通过生成的字典系统做逐词翻译,然后提出新的评分标准来筛选翻译结果。
  3. 将逐词翻译的结果再翻译为目标语言,通过训练得到的Transformer模型来实现。注意该翻译模型具有通用性,可以翻译为任意目标语言。
  4. 使用fastText来生成词嵌入。
  5. 没有用到BPE算法。

摘要

给出一个粗略的、逐字逐句的源语言解释,母语为目标语言的人就能发现翻译的潜在的、完全流畅的效果。在这项工作中,我们通过将翻译分为两个步骤来探索这种直觉:通过词典生成粗略的注释,然后生成伪翻译,或翻译成完全流利的译文。我们将目标语言共有的并行数据混合在一起,构建翻译解码器,然后使用无监督技术根据需要构建字典,从而为许多源语言快速生成无监督的神经机器翻译系统。我们将此过程应用于14种测试语言,与以前发布的无监督MT研究相比,在高资源语言上获得了更好或相当好的翻译结果,并在从未在无监督MT场景中使用的低资源语言获得了高质量的翻译效果。

从摘要可以大概了解到具体过程就是先构建一个翻译字典,根据字典生成一个初步的翻译(效果很差),然后使用构建的翻译系统逐步迭代,不断优化,生成最终的翻译系统。感觉跟面的文章套路一样啊,可能是效果比前面好吧。

方法介绍

本文介绍一个两步的无监督机器翻译系统。在第一步中,源文本被注释为伪翻译或翻译术语,而在第二步中,一个预先训练的模型将翻译术语翻译为目标语。我们介绍了一种完全无监督的方法来将源语言转换成Translationese,并展示了如何训练Translationese提前针对目标系统并将其应用于新的源语言。

整个流程可以简单的概括为:

  1. 生成字典,果然不出我所料,用的是Facebook小哥第一篇文章中的方法。
  2. 将源语言转换成Translationese(就是根据字典做字级别的翻译,作者自己起了个名字,显得高级些?)。
  3. Translationese翻译为目标语言。

生成字典

用了facebook小哥第一篇文章中的方法,前面博客中有讲,链接为:

Word Translation without Parallel Data

将源语言转换成Translationese

一旦我们在源词汇表中有了标记的翻译选项,我们就可以一个字一个字地将源翻译成Translationese。然而选择得分最高的译文作为源token的翻译结果并不是最好的选择,因为在不同的上下文语境中,单词应该有不同的翻译结果。我们使用一个5-gram的目标语言模型来查看源单词的不同翻译选项,并根据上下文选择一个。该语言模型是在大型目标单语数据上预训练得到的。为了将源句子翻译成Translationese,我们应用堆栈大小为100的波束搜索,并且通过公式 αPLM + βd(s, t) 来为每一个翻译选项 t 和源单词 s 评分,PLM语言模型评分,和d (s, t)是源语言和目标语言之间的余弦距离。我们设置α= 0.01,β= 0.5。

概括的讲就是设置了一个新的评分机制,《Word Translation without Parallel Data》译文中也是自己设置了一个评分机制,此文中是语言模型评分和余弦距离一起评分。余弦距离前面就已经讲过,语言模型评分就是根据生成的语言模型,把所有的翻译结果带到语境中得到一个分数,也就是看翻译结果是否符合语境。得到的翻译结果有很多个,这里会根据评分选择得分最高的一个。说白了还是借鉴facebook小哥哥的思想,只是提出了不同的方法而已。

Translationese翻译为目标语言

我们使用一套多样化的高级语言的平行数据训练了一个Transformer模型,用以将Translationese翻译为流利的目标语言。对于每种语言,我们将并行数据的源语言转换为2.2节中描述的Translationese。然后我们合并和清洗所有的 Translationese/target 平行数据,并在此结果上训练模型。一旦模型训练好,我们将其应用到来自任何源语言的Translationese。Transformer用的是tensor2tensor中的方法,总共有6层,隐藏层大小为512。

这一段概括起来就是用Transformer来训练模型,该模型可以将Translationese翻译为流利的目标语言。其实整篇文章的思路很简单,但确中了ACL,通过这篇文章大家有木有发现其实ACL也没那么难中,哈哈哈!

数据和参数

使用fastText训练得到词嵌入,得到的词嵌入用来训练双语字典。我们选用英语作为目标语言,为了避免训练系统偏向于一种语言或一种特定类型的并行数据,我们在不同的语言集合上使用不同的并行数据来训练Translationese翻译为英语的系统,所使用的训练语言有Arabic, Czech, Dutch, Finnish, French, German, Italian, Russian, and Spanish。

每种语言使用了200万个句子对,每个句子的长度限制为100个单词以内。我们在这九种语言上训练一个模型,并将它应用于测试不在这组语言中的语言。另外,为了测试每种训练语言,我们训练一个模型,其中该语言的并行数据被排除在训练数据之外。在每一个实验中,我们使用从组合并行数据中随机抽取的3000个盲句子作为开发集。

文中使用facebook第一篇文章中的默认参数来寻找跨语言词嵌入。为了创建字典,我们限制源语言和目标语言的单词个数在100K以内。对于每一个源token我们在目标语言中找到了20个最近邻。我们使用了在4亿个Gigaword单词上训练的5-gram语言模型来选择翻译结果。我们使用Moses scripts来分词和统一大小写。文中并没有使用BPE算法。为了与Kim等人(2018)的结果进行比较,我们只在newstest2016测试数据上做了德语复合词的拆分。为了达到这个目的,我们使用了 CharSplit3 的python包。每种语言在一个GPU上训练。

实验结果

结果部分是本文的模型跟以前的模型做对比,本文的结果并不是最好的,但是本模型通用性很强,模型一旦训练好适用于所有语言。而之前的工作只可用于目标语言的翻译。这应该是本文最大的创新点之一吧。

跟之前工作的对比:

在这里插入图片描述
在新的翻译数据上的结果:

在这里插入图片描述

发布了52 篇原创文章 · 获赞 7 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/weixin_38937984/article/details/102060942