[文献阅读]——Google’s Multilingual Neural Machine Translation System: Enabling Zero-Shot Translation

前言

在这里插入图片描述

论文地址:https://arxiv.org/pdf/1611.04558v1.pdf

代码地址:无233

前人工作&存在问题

前人实现multilingual NMT的方法:

  • 为每一个target语言定义一个单独的decoder和attention(one2many)
  • 为每一个source语言定义一个单独的encoder和attention(many2one)
  • 为每一个source语言定义一个encoder,每一个target语言定义一个decoder,使用一个shared attention(many2many)
  • 没有使用attention,使用多个encoder和decoder来完成多任务、多语种
  • 还有一些使用单个模型完成多语言任务,但不是NMT任务的工作

与本文类似的(指增加一个language signal)

  • 为source句子添加一个特殊的token来控制生成的target的礼貌程度
  • 使用相同的方法来控制生成的target的主动、被动

存在问题:

  • 要么不是multilingual NMT的范畴
  • 要么需要定义多个encoder\decoder

本文贡献

本文的方法有以下四个优点:

  • 简单:仅使用单个模型来完成多种语言对的翻译,训练时对于不同的语种不需要额外的操作,避免了其它方法分别训练各个语言所带来的灾难性遗忘(section4.1)。
  • 对于低资源语言有改善:一般的,把不同语言混合在一起训练时,高资源语言的加入,能够改善低资源语言的性能。
  • zero-shot:只要训练A->B,B->C,就能够翻译A->C(直接翻译,而不是通过pivot的中间翻译)。而且,只要增加很少的A->C并行语料,性能会大幅度上升。
  • (?)方法仅在source端指定了target的语种,而没有指定source端的语种,有效应对code-switching的情况(一句话,用多个语种说)

具体方法

使用和Neural machine translation of rare words with subword units一样的、和BPE类似的分割方法,对于合并的语种,来得到合并的分词词表。
训练时,对于A->B语言对,在A序列的开头加上<2B>token。
训练模型和Google’s neural machine translation system: Bridging the gap between human and machine translation一致,如图1所示:在这里插入图片描述

图1 模型

模型大致有以下特点:

  • source句子是反着输入的
  • 第一层的encoder LSTM是双向的,得到前向和后向的h之后,拼接得到h’,然后输入的上层的单向LSTM中
  • 第二层开始的LSTM使用残差网络,来让网络变深
  • decoder部分的attention策略是(大概):让前一个时间部的最底层隐藏向量去和encoder的所有位置计算分数,对encoder的所有位置进行加权求和得到context vector,然后…?

具体实验


使用单个模型分别完成many2one, one2many, many2many的实验

many2one:

扫描二维码关注公众号,回复: 13232681 查看本文章

如图2所示,single是为语言对单独训练一个模型,oversampling是对于multi模型而言的,即,对于不同的语言对,把其它语言对数量上采样到数量最多的语言对的数量。另外,由于是many2one,source句子不需要加入target specific token。主要有两个结论:

  • 所有的multi效果都更好,可能的原因是,这样的模型在训练时,能够得到更多的target端(en)的语料,而该实验中source端的语言又属于同一个语言家族,所以模型泛化性好。
  • 对于低资源语言对(de->en),上采样有利于它的性能;对于相对较高的语言对(fr->en),上采样会损害它的性能。

在这里插入图片描述

图2 many2one

one2many:

如图3所示,与many2one实验不同的是,one2many情境下,输入同一种source,需要提示模型翻译的target是属于什么语言的,因此需要加入target specific token。主要有两个结论:

  • 这种情景性能有所下降,可能的原因是decoder的能力不足。
  • 同样的,对于低资源语言对,上采样有利于它的性能;对于相对较高的语言对,上采样会损害它的性能。

在这里插入图片描述

图3 one2many

many2many:

如图4所示,同样的,对于低资源语言对,上采样有利于它的性能;对于相对较高的语言对,上采样会损害它的性能。虽然在这种情境下,总体性能比不过single,但multi依然有一些优势:

  • multi降低了训练和产业化(productionization)的难度。
  • 随着multi模型参数的上升,能够逼近single(下一节)。
  • multi能够有效地完成zero-shot translation(下下节)。

在这里插入图片描述

图4 many2many

随着multi模型参数的上升,能够逼近single

如图5所示,实验使用了12个语言对,训练了12个single model,和一个multi model。结论为:

  • 随着模型规模的增大,性能提升。
  • multi模型的训练差不多是所有single模型的1/12,话句话说,训练一个multi和训练一个single的时间差不多,这还可以理解为:在multi中,每一种语言对被关注(训练)的时间是这个语言对所对应的single的1/12。

在这里插入图片描述

图5 大规模multi模型的性能

我可以做zero-shot translation,你行吗?

考虑了以下几种模型策略:

  • 训练一个Portuguese ( P ) ->English( E ),和一个English( E )->Spanish( S )的PBMT,以E为中间语言,完成pivot based的P->S translation(?)
  • 同上,但训练的是NMT
  • 直接训练P->S的NMT
  • 使用P->E,E->S的混合语料,训练model1
  • 使用P<->E,E<->S的混合语料,训练model2
  • 在model2的基础上,使用少量P->S的并行语料,完成增量训练(incremental training)

结果如图6所示,结论有二:

  • model2优于model1,比较可以发现,相较于model1,model2不过是让P出现在了target端一次,让S出现在了source端一次,和推理时的P->S并不一致,所以效果更好的原因可能是增加了语言对的训练,模型学到了一种国际语(interlingua)。
  • 少量直接并行的语言的训练,能够大幅度提高性能。

在这里插入图片描述

图6 zero-shot translation

P和S属于同一个语系,图7试验了在不同语系(Spanish\Japanese)上的结果,发现性能有下降。

在这里插入图片描述

图7 zero-shot translation on unrelated languages

图6中的(f)表明:直接并行的语言能够大幅度提升multilingual model的性能,下面进行了更加详细的实验。非直接并行语料为:En<->{BE,RU,UK},直接并行语料为:RU<->{BE,UK}。并考虑三种训练策略: - 不使用直接并行语料,直接做zero-shot - 在训练集中,直接添加直接并行语料(from-scratch) - 不使用直接并行语料训练multi,训练完毕之后,使用from-scratch中的部分并行语料,来做增量学习(incremental)

结果如图8所示,结论有二:

  • 虽然from-scratch直接把所有直接并行语料加入训练集,但由于需要对低资源语料进行上采样,使得En<->X的性能有所下降。
  • Incremental在zero-shot的基础上,使用了少量的训练资源、时间,就可以达到和from-scratch差不多的效果。

在这里插入图片描述

图8 直接并行语料的使用效果

multilingual model到底有没有学到国际语?—可视化!

使用74个语义一致的三语种元组(english,japanese,korean)。对于74个元组中的某一个元组,中的某一个语种,比如:english,使用在english<->japanese,english<->korean语料上训练好的multilingual model,输入<2japanese>XXX,和<2korean>XXX。对于<2japanese>XXX的推理翻译而言,平均需要翻译得到22.4个单词长度的序列,视作22.4个时间步,每一个时间步,都会使用attention加权求和得到一个context vector,视作一个点,所以一共有:74 x 3 x 2 x 22.4 = 9978个点。图9有三个子图:

  • 子图a:对于所有的点,不管source是什么语言,翻译成什么语言,只要是同一个三元组的,标为同一种颜色。另外(?),对于某一个source-target的翻译过程中产生的点,使用线相连。
  • 子图b:某一个聚类
  • 子图c:来自于同一个source所产生的点,标为同一个颜色。

如图9所示,可能可以得到两个结论:

  • 不管是什么语言,只要语义相似,就会聚在一起。
  • 在语义相似的一个聚类中,不同source所产生的点有差别,同一个source产生的点也有差别,但同一个source分别翻译成两种不同语种的target,形成的两条轨迹,比较相似。

在这里插入图片描述

图9 可视化

TO BE CONTINUED!

猜你喜欢

转载自blog.csdn.net/jokerxsy/article/details/121269285