前言
论文地址: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所示:
模型大致有以下特点:
- source句子是反着输入的
- 第一层的encoder LSTM是双向的,得到前向和后向的h之后,拼接得到h’,然后输入的上层的单向LSTM中
- 第二层开始的LSTM使用残差网络,来让网络变深
- decoder部分的attention策略是(大概):让前一个时间部的最底层隐藏向量去和encoder的所有位置计算分数,对encoder的所有位置进行加权求和得到context vector,然后…?
具体实验
使用单个模型分别完成many2one, one2many, many2many的实验
many2one:
如图2所示,single是为语言对单独训练一个模型,oversampling是对于multi模型而言的,即,对于不同的语言对,把其它语言对数量上采样到数量最多的语言对的数量。另外,由于是many2one,source句子不需要加入target specific token。主要有两个结论:
- 所有的multi效果都更好,可能的原因是,这样的模型在训练时,能够得到更多的target端(en)的语料,而该实验中source端的语言又属于同一个语言家族,所以模型泛化性好。
- 对于低资源语言对(de->en),上采样有利于它的性能;对于相对较高的语言对(fr->en),上采样会损害它的性能。
one2many:
如图3所示,与many2one实验不同的是,one2many情境下,输入同一种source,需要提示模型翻译的target是属于什么语言的,因此需要加入target specific token。主要有两个结论:
- 这种情景性能有所下降,可能的原因是decoder的能力不足。
- 同样的,对于低资源语言对,上采样有利于它的性能;对于相对较高的语言对,上采样会损害它的性能。
many2many:
如图4所示,同样的,对于低资源语言对,上采样有利于它的性能;对于相对较高的语言对,上采样会损害它的性能。虽然在这种情境下,总体性能比不过single,但multi依然有一些优势:
- multi降低了训练和产业化(productionization)的难度。
- 随着multi模型参数的上升,能够逼近single(下一节)。
- multi能够有效地完成zero-shot translation(下下节)。
随着multi模型参数的上升,能够逼近single
如图5所示,实验使用了12个语言对,训练了12个single model,和一个multi model。结论为:
- 随着模型规模的增大,性能提升。
- multi模型的训练差不多是所有single模型的1/12,话句话说,训练一个multi和训练一个single的时间差不多,这还可以理解为:在multi中,每一种语言对被关注(训练)的时间是这个语言对所对应的single的1/12。
我可以做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)。
- 少量直接并行的语言的训练,能够大幅度提高性能。
P和S属于同一个语系,图7试验了在不同语系(Spanish\Japanese)上的结果,发现性能有下降。
图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差不多的效果。
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,形成的两条轨迹,比较相似。
TO BE CONTINUED!