当前位置: 首页 > 编程日记 > 正文

EMNLP 2019 | 大规模利用单语数据提升神经机器翻译

BDTC大会官网:https://t.csdnimg.cn/q4TY

作者 | 吴郦军、夏应策
来源 | 微软研究院AI头条(ID:MSRAsia)
编者按:目前,目标语言端的无标注单语数据已被广泛应用于在机器翻译任务中。然而,目标语言端的无标注数据一旦使用不当,反而会给模型结果带来负面影响。为了有效利用大规模源语言端和目标语言端的单语数据,微软亚洲研究院在 EMNLP 2019 上发表的论文中,提出一种简单的语料数据使用流程,只需要四个步骤就能极大地提高模型翻译结果。
在机器翻译任务中,如何利用好大规模的单语语料数据来辅助翻译模型的训练是非常重要的研究方向。目前,目标语言端的无标注单语数据已经被证实能够极大的提升模型的翻译质量,并被广泛利用,最著名的就是反向翻译技术 BT(back-translation)。相比之下,源语言端的无标注单语数据则并没有被很好地利用。为此,我们在这个工作中进行了系统的研究,来阐明如何能够同时利用好源语言端和目标语言端的无标注单语数据,并且我们提出了一种非常有效的数据使用流程,只包括简单的四个步骤就能极大地提高模型翻译结果。通过在 WMT 英德互译和 WMT 德法互译任务上的实验,我们验证了所提出算法的有效性,同时取得了非常优越的性能。

无标注单语数据的有效性
我们首先尝试验证对于两个方向(源语言端 X、目标语言端 Y)无标注单语数据在大规模语料下的有效性,对于两种单语数据,常见的方法为:

1) 对于目标语言端的单语数据 y,常用的方法为反向翻译技术 BT(back-translation),即我们会使用一个 Y->X 的反向翻译模型来翻译 y 得到对应的结果 x',然后将(x', y)作为伪双语数据参与训练 X->Y 模型;

2) 而对于源语言端的单语数据 x,常用的方法为正向翻译技术 FT(forward-translation),即我们使用正向的翻译模型 X->Y 来翻译 x 得到对应的结果 y',然后将(x, y')作为伪双语数据参与训练 X->Y 模型。

我们在不同的大规模数据量(20M、60M、120M单语数据)下进行实验,发现了如下实验现象:

图1:单语数据量的增加导致翻译模型性能的变化

1) 当只有目标语言端单语数据的时候,随着单语数据的量越来越多,BT 所带来的模型性能呈现出先上升后下降的趋势,并且下降速度非常快(如图(a)所示)。

2) 当只有源语言端的单语数据的时候,随着单语数据的量越来越多,FT 所带来的模型性能呈现缓慢下降的趋势,不过下降速度比 BT 略小(如图(b)所示)。

这样的实验结果说明单独使用大量的某一端单语数据并不是一个好的策略,相反这样的方式反而会给模型结果带来负面影响。我们也分析了其中的部分原因,比如目标端单语数据产生的伪双语数据是来源于另一个方向的翻译模型,数据质量并不可控,所以大量的伪单语数据则会使得模型训练产生了偏差。因此,我们需要找到一种合适有效的方式来利用大规模的单语数据。

算法与流程
假设我们关注的是 X 和 Y 语言之间的互译,给定的有标双语数据集为 B,我们希望得到的是 X->Y 和 Y->X 两个翻译模型,分别记做 f 和 g。同时,我们需要准备两份无标注单语数据 Mx 和 My,分别对应 X 和 Y 两种语言。我们提出了一个清晰的数据使用和训练流程,将两端的无标注单语数据都进行了利用。我们提出的算法包括如下的四步:
图2:数据使用和训练流程
(1)有标双语模型预训练:我们首先在双语数据 B 上训练得到 X->Y 方向的翻译模型 f,和 Y->X 方向的翻译模型 g。同时我们会用不同的随机种子再次训练得到两个新模型 f' 和 g'(为了在第四步中使用)。

(2)无标注数据翻译:我们将 Mx 中的每一个句子 x 用模型 f 翻译到 Y 语言,对 My 中的句子 y 用模型 g 翻译到 X 语言,得到两个新的伪标注数据集合 Bs={(x, f(x))|x∈Mx}, Bt={(g(y),y)|y∈My}。

(3)有噪声训练:我们在数据集 B、Bs 和 Bt 的源语言端都加上噪声,加噪声的方式包括:a)随机将单词替换为<UNK>;b)随机丢弃句子中的某些词语;c)随机打乱句子中连续的 k 个单词顺序。在新的有噪声的数据集上,我们训练对应的模型 f1:X->Y 和 g1:Y->X。在此阶段,我们建议使用大规模的无标注数据。

(4)微调:最后,在得到 f1 和 g1 之后,我们用第一步中训练得到的新的双语模型 f' 和 g' 来重新翻译 Mx 和 My 中的部分无标注数据,得到新的 Bs' 和 Bt' 数据集,然后在这份数据上再将 f1 和 g1 微调成最终所需要的模型。

实验及结果
我们在 WMT 英语和德语的双向翻译,以及 WMT 德语和法语之间的互相翻译任务上进行了实验验证。我们采用的模型是 Transformer Big 模型,在第三阶段,我们选用了120M(两边分别60M)的无标注单语数据,第四阶段,使用40M(两边分别20M)无标注的单语数据进行微调。评测所采用的指标为 SacreBLEU score。我们得到的实验结果如表1和表2所示,具体结果如下:

表1:WMT 英德互译上的 SacreBLEU 结果
表2:WMT 德法互译上的 SacreBLEU 结果

可以看出,我们的模型在每一步训练阶段,结果都会有一定提高,如第三步有噪声训练阶段取得了2个点的 BLEU 提升,而在第四阶段微调阶段又取得了至少1.5个点的 BLEU 提升。

同时我们和目前已经存在的最好方案进行了对比,我们的模型取得了当下最好的翻译结果(表3和表4所示)。

表3:WMT 英德上方案比较
表4:WMT 德英上方案比较

最后我们对流程中的每一部分也进行了一定的分析,比如不同的语料使用的结果(图3(a)),有噪声数据和随机 sample 的数据上的训练结果(图3(b)),以及不同的数据微调方式的结果(图3(c)),得到的结论证明我们的使用方法确为最优方案。
图3:WMT 英德上针对不同流程的实验结果

总结
在这篇文章中,我们提出了一种简单高效的无标注单语语料的数据使用和模型训练流程,只包含了简单的四个步骤,并且对不同的无标注单语语料的使用方案进行了详细的讨论和对比。另外我们还验证了如下结论:(1)只使用源语言端或者目标语言端无标注单语数据,效果不会随着数据量的增加而增加;(2)源语言端和目标语言端的无标注单语数据组合在一起使用时作用是最大的,实验效果会随着数据的增多而得到提升;(3)有噪声训练这一阶段对提升最终性能有明显的帮助。

了解更多技术细节,请点击阅读原文查看论文。

论文链接:https://aka.ms/AA6i2nr

(*本文为AI科技大本营转载文章,转载联系作者


精彩推荐



开幕倒计时15天|2019 中国大数据技术大会(BDTC)即将震撼来袭!豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读。6.6 折票限时特惠(立减1400元),学生票仅 599 元!

推荐阅读
  • 日均350000亿接入量,腾讯TubeMQ性能超过Kafka

  • 从基本组件到结构创新,67页论文解读深度卷积神经网络架构

  • 知识图谱从哪里来:实体关系抽取的现状与未来

  • MobileNets进化史

  • 三位物理学家与陶哲轩证明的惊天定理,原来早在教科书里?

  • 程序员大厂十年:我的三段职业经历和八条建议!

  • 小米 9 年,雷军开启 AIoT 与 5G 超级互联网时代!

  • 金山办公上市,雷军心愿了却!

  • 他的公司1年令比特币暴跌数次,上榜福布斯捐10亿美元的跨界传奇

  • 你点的每个“在看”,我都认真当成了AI

相关文章:

swift 3.0 json解析、字典转模型三种方案

swift3.0发布有一段时间了&#xff0c;发现很多朋友在swift3.0json解析上上遇到很多问题&#xff0c;我这边为大家提三种常见的json方案。 1.第一种是自带的字典转模型&#xff0c;自带的需要实现系统的setValue方法&#xff0c;然后自己还要实现dictToModel方法即可解析&…

海思3559A上编译GDB源码操作步骤及简单使用

1. 从http://ftp.gnu.org/gnu/gdb/ 下载最新稳定版8.3&#xff0c;即gdb-8.3.tar.gz&#xff0c;解压缩&#xff1b; 2. 在gdb-8.3目录下&#xff0c;创建一个build.sh脚本文件&#xff0c;内容如下&#xff1a; ./configure \--prefix"$PWD/install" \--targetaar…

Hibernate之继承映射

Hibernate的继承映射可以理解为两个持久化类之间的继承关系 例如老师和人之间的关系 持久化类 Person类 public class Person { private Integer id; privvate String name; private String sex; public Person (){} // 无参构造器 p…

AutoML未来可期,工程师的明天何去何从?

人工智能和机器学习建模专业技术人才紧缺&#xff0c;即使是高水平的人工智能专家&#xff0c;在大数据智能分析机器学习建模时&#xff0c;主要依靠人工经验&#xff0c;建模过程费时费力&#xff0c;缺少有效方法。为了解决这一突出问题&#xff0c;国内外出现了一种用机器学…

海思3559A上编译Valgrind源码操作步骤

注&#xff1a;按照以下步骤可以在海思板子上正常编译valgrind源码并生成valgrind可执行文件,但可能还不能在海思板子上正常使用。 1. 从http://valgrind.org/downloads/?srcwww.discoversdk.com 下载Valgrind 3.15.0即valgrind-3.15.0.tar.bz2&#xff1b; 2. 在valgrind-3…

Swift之SDWebImage第三方框架

在学习Swift过程中&#xff0c;最害怕的使用了OC的第三方框架 好不容易配置成功了&#xff0c;却出现了意外的Bug [UIImageView setImageWithURL:]: unrecognized selector sent to instance解决办法 第一次配置的时候&#xff0c;因为百度了教程&#xff0c;所以一次性成功…

文件分区格式化及挂载

创建一个5G的分区&#xff0c;文件系统为ext2&#xff0c;卷标为DATA&#xff0c;块大小为1024&#xff0c;预留管理空间为磁盘分区的8%&#xff1b;挂载至/backup目录&#xff0c;要求使用卷标进行挂载&#xff0c;且在挂载时启动此文件系统上的acl功能&#xff1b;在虚拟机创…

iOS开发swift版异步加载网络图片(带缓存和缺省图片)

iOS开发之swift版异步加载网络图片 与SDWebImage异步加载网络图片的功能相似&#xff0c;只是代码比较简单&#xff0c;功能没有SD的完善与强大&#xff0c;支持缺省添加图片&#xff0c;支持本地缓存。 异步加载图片的核心代码如下&#xff1a; func setZYHWebImage(url:NSStr…

2097352GB地图数据,AI技术酷炫渲染,《微软飞行模拟器》游戏即将上线

整理 | 若名出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;“只要是真实存在的地方&#xff0c;你都能抵达。”作为即将成为第一款将整个地球化作虚拟世界来供玩家玩的游戏&#xff0c;微软的《微软飞行模拟器》&#xff08;Microsoft Flight Simulator&#xff09;…

开源库nothings/stb的介绍及使用(图像方面)

GitHub上有个开源的stb库&#xff0c;Star数已过万&#xff0c;地址为https://github.com/nothings/stb&#xff0c;为何叫stb&#xff0c;是用的作者名字的缩写Sean T. Barrett。此库仅包含头文件&#xff0c;除stretchy_buffer.h外&#xff0c;其它所有文件以前缀stb开头&…

git stuff

git stuff trick git bash 无法标记复制解决办法 git bash窗口左上角图标点击,选择属性->选项->快速编辑模式 确定就ok了 Usual Commands 创建分支git branch branch-namegit push origin branch-name 删除分支git branch -r -d origin/branch-name 删除远程分支git push…

swift3.0之闭包

Swift 相比原先的 Objective-C 最重要的优点之一&#xff0c;就是对函数式编程提供了更好的支持。 Swift 提供了更多的语法和一些新特性来增强函数式编程的能力&#xff0c;本文就在这方面进行一些讨论。 Swift 概览 对编程语言有了一些经验的程序员&#xff0c;尤其是那些对多…

Linux下gdb attach的使用(调试已在运行的进程)

在Linux上&#xff0c;执行有多线程的程序时&#xff0c;当程序执行退出操作时有时会遇到卡死现象&#xff0c;如果程序模块多&#xff0c;代码量大&#xff0c;很难快速定位&#xff0c;此时可试试gdb attach方法。 测试代码main.cpp如下&#xff0c;这里为了使程序退出时产生…

一行Python代码能实现这么多丧心病狂的功能?(代码可复制)

最近看知乎上有一篇名为《一行 Python 能实现什么丧心病狂的功能&#xff1f;》&#xff08;https://www.zhihu.com/question/37046157&#xff09;的帖子&#xff0c;点进去发现一行Python代码可以做这么多丧心病狂的功能&#xff01;整理了一下知乎上这篇文章的内容&#xff…

一步一步写算法(之图结构)

原文:一步一步写算法&#xff08;之图结构&#xff09; 【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 图是数据结构里面的重要一章。通过图&#xff0c;我们可以判断两个点之间是不是具有连通性…

FFmpeg中可执行文件ffprobe用法汇总

从https://ffbinaries.com/downloads 下载最新的4.1版本的Windows 64位FFprobe&#xff0c;FFprobe用于从多媒体流中获取相关信息或查看文件格式信息&#xff0c;并以可读的方式打印&#xff0c;FFprobe可以作为一个命令行程序单独使用。 通过执行以下命令将FFprobe信息重定位…

CocoaPods导入的库其头文件导入的方法

尽管CocoaPods使用十分方便,但其导入的第三方框架还是要经过几步操作,才能供项目使用; 第一步:导入库 1>-在终端进入项目的根目录; 2>-输入:touch Podfile,则项目文件夹会创建一个空的Podfile,这时,你可以将你想要导入的库写在里面.如: platform :ios, 6.0 pod RESid…

Google、微软、阿里、腾讯、百度这些大公司在GitHub上开源投入排名分析 | CSDN原力计划...

扫码参与CSDN“原力计划”作者 | 村中少年来源 | CSDN原力计划获奖作品现在有越来越多的公司都参与了开源&#xff0c;其背后有各自的目的所在&#xff0c;姑且不予讨论。本文是从多个方面分析各大公司在开源上的投入情况。由于全世界绝大多数的开源项目都有发布到Github上&…

jquery源码解析:each,makeArray,merge,grep,map详解

jQuery的工具方法&#xff0c;其实就是静态方法&#xff0c;源码里面就是通过extend方法&#xff0c;把这些工具方法添加给jQuery构造函数的。 jQuery.extend({ ...... each: function( obj, callback, args ) { //$.each(arr , function(i,value){}),第三个参数用于…

swift实现提示框第三方库:MBProgressHUD

GitHud的下载地址是&#xff1a;https://github.com/jdg/MBProgressHUD/ 下载完成后&#xff0c;将MBProgressHUD.h和MBProgressHUD.m拖入已经新建好的Swift项目。因为使用的swift语言&#xff0c;所以拖入项目的时候会提示是否新建一个桥接objective-c与swift的文件&#xff…

这段Python代码让程序员赚300W,公司已确认!网友:神操作!

Python到底还能给人多少惊喜&#xff1f;笔者最近看到了这两天关于Python最热门的话题&#xff0c;关于《地产大佬潘石屹学Python的原因》&#xff0c;结果被这个回答惊到了&#xff1a;来源&#xff1a;知乎 https://www.zhihu.com/question/355880221笔者翻了翻那些回答&…

FFmpeg中可执行文件ffmpeg用法汇总

从https://ffbinaries.com/downloads 下载最新的4.1版本的Windows 64位FFmpeg&#xff0c;FFmpeg是一个快速的音频/视频转换工具&#xff0c;FFmpeg可以作为一个命令行程序单独使用。 通过执行以下命令将FFmpeg信息重定位到ffmpeg_help.txt文件中便于查看&#xff0c;其内容如…

下载Ext JS 5.1 gpl版本的方法

先进入官网&#xff1a;http://www.sencha.com然后在导航的Products中选择Sencha Ext JS&#xff0c;会看到以下页面&#xff1a;这时候不要单击Download按钮&#xff0c;而是要单击导航中的DETAILS&#xff0c;页面切换后&#xff0c;就可在底部看到GPL版本的下载按钮了&#…

对MBProgressHUD进行封装并精简使用

几个效果图&#xff1a; 以下源码是MBProgressHUD支持最新的iOS8的版本&#xff0c;没有任何的警告信息 MBProgressHUD.h 与 MBProgressHUD.m MBProgressHUD.hMBProgressHUD.m以下是本人在MBProgressHUD基础上封装的类&#xff0c;觉得部分的使用基于block ShowHUD.h 与 Show…

基于Hash的消息认证码HMAC简介及在OpenSSL中使用举例

HMAC(Hash-based Message Authentication Code)&#xff1a;基于Hash的消息认证码&#xff0c;是一种通过特别计算方式之后产生的消息认证码(MAC)&#xff0c;使用密码散列函数&#xff0c;同时结合一个加密密钥。它可以用来保证数据的完整性&#xff0c;同时可以用来作某个消息…

英特尔发布oneAPI软件计划及beta产品,面向异构计算提供统一可扩展的编程模型

近日&#xff0c;在2019年超级计算大会上&#xff0c;英特尔发布了一项全新软件行业计划oneAPI&#xff0c;助力充分释放高性能计算与人工智能技术融合时代多架构计算的潜力&#xff0c;同时发布了一个oneAPI beta产品。 英特尔oneAPI行业计划&#xff0c;为跨多种包括CPU、GP…

Mac下配置Maven

1.Java环境变量设置就不说。 但是配置Maven需要检查下Java环境变量的设置。需要检查JAVA_HOME环境变量以及Java命令 wanyakundeMacBook-Pro:Library wanyakun$ echo $JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_60.jdk/Contents/Home wanyakundeMacBook-Pro:Librar…

UIAlertAction的用法

let alertController UIAlertController(title:"系统提示", message:"您确定要退出程序吗&#xff1f;", preferredStyle: .alert) let cancelAction UIAlertAction(title:"取消", style: .cancel, handler:nil) let okAction UIAlertAction(tit…

在Windows和Linux上编译gRPC源码操作步骤(C++)

gRPC最新发布版本为v1.23.0&#xff0c;下面以此版本为例说明在Windows和Linux下编译过程。 Windows7/10 vs2103编译gRPC源码操作步骤&#xff1a; 1. 需要本机已安装Git、CMake、Perl、Go、yasm&#xff1b; 2. 依次执行如下命令&#xff1a; git clone https://github.co…

这些算法工程师,他们真的是太难了!

现在的算法工程师真的是太难了&#xff01;要让AI会看人眼都分辨不清的医疗影像数据又不够&#xff0c;还得用前沿技术好不容易学会看片&#xff0c;还要让AI会分析病理赋予AI诊断疾病的使命然后几十种模型&#xff0c;N次计算只给一张显卡Boss就问&#xff1a;你打算怎么做&am…