前言
论文地址:https://arxiv.org/pdf/2105.09259v1.pdf
代码地址:https://github.com/NLP-Playground/LaSS
前人工作&存在问题
前人发现:多语言NMT的一大问题是模型容量的不足(参数冲突(parameter interference)),特别是高资源的语言对的性能会下降。对于这个问题有以下改善策略:
- 扩大模型容量
- 定义language-aware的模型组成部分
- 把隐藏层细胞分成共享的、语言独立的
- 适应层(adaption layers)
- language-aware的层正则化和线性变换
- 隐式网络(latent layers)
本文贡献
本文提出了一种通过对模型参数做部分mask(属于一种模型裁剪(model pruning)),来为不同的语言对构造模型子网络的方式。具有以下优点:
- 不需要额外的可训练参数
- 缓解了参数冲突
- 和之前的方法中使用的language specific token\embeddings不同,模型的参数本身就是language specific的,导致模型拥有很强的1. 对从未见过的语种的泛化能力(需要额外训练,额外构造子网络); 2. zero-shot translation能力。
具体方法
Initialization(这里的一个batch中包含了多种语言):
首先训练初始的multilingual NMT model(θ),对于每一种语言对,模型的训练pair为:source=XXX, target=XXX,在所有语言对的所有pair上做训练。
Finetune:
然后对于每一个语言对,让Θ在它上面进行finetune(个人理解finetune过后的模型只是用于寻找mask,找完舍弃),文章说:在特定语言对上的finetune会扩大该语言对所对应的模型参数的数量级(大小还是数量级?后面要做排序的话,应该是大小)。因此,总的模型参数有|θ|个,finetune之后,可以对所有的参数进行排序,然后通过设定一个阈值,保留α比例的参数。具体就是设置一个|θ|大小的{0,1}mask向量,被保留的参数的对应位置为1,其它为0。带来的结果就是,不同的语言对所对应的模型参数,既有重叠,又有特别。如图1所示。
Further Train(这里的一个batch中包含了一种语言):
对于一个batch(语言对),计算loss,然后利用该语言对所对应的mask,只对mask为1的对应参数进行更新。
Inference:
推理阶段,也需要使用语言对特定的mask,来对模型参数进行掩膜,再进行计算。
具体实验
实验使用了较大数据集WMT(语言对数量较不平衡,分成了low(<1M)\medium(1-10M)\rich(>10M)三种),和较小数据集IWSLT。
直白的翻译结果
IWSLT:
图2中的lang所对应的BLEU,指的是EN->lang 和 lang->EN的平均BLEU。
WMT:
图3中的WR指的是win rate,也不知道是什么意思。
从图3中可以得到两个结论:
- 更小的模型通过LaSS方法,能够得到更大的性能提升,可能的原因是,小容量的模型参数干扰(parameter interference)问题更为严重。
- 使用LaSS方法,模型在更高资源的语言对上的性能提升更大,这和以前的观察切合(multilingual NMT model对于高资源的语言对更容易性能下降),而LaSS能够环节这一问题。
泛化能力如何?
考虑两种情形:
- 完全没有见过的语言对,需要额外训练。
- 训练集中出现过X->En和En->Y,模型推理X->Y。
情形一:完全没有见过的语言对
大概的做法是:对于一个新的语言对,首先进行训练(理解为finetune)得到finetune过后的模型,以及对应的mask。然后舍弃finetune过后的模型,利用这个mask,来对finetune前的模型做几步子网络的训练。
如图4所示,绿色的bilingual指的是对应这个语言对额外训练的一个基准模型性能;橙色的baseline指的是普通的multilingual NMT transformer,其对于新加入的新的语言对,也就是直接训练几步。可以得到以下结论:
- 不管是LaSS方法,还是普通的multilingual NMT transformer,在训练几步之后,在新语言对上的性能都能够超过baseline。LaSS所需要的训练步数更少。
- 随着新语言对的性能不断上升,LaSS对于其它语言对的性能下降不明显。甚至新语言对的性能到达绿色的bilingual性能时,LaSS对于其它语言对的性能都基本没有下降。
- 总的来说,LaSS在新语言对上能够取得很好的性能,且不会损害原先语言对的性能。
情形二:zero-shot
大概的做法是:原先的训练集中包含了X->En和En->Y这两种语言对,它们各自拥有自己的mask。现在对于X->Y,由于X之前出现在source端,对应模型的encoder,而Y之前出现在target端,对应模型的decoder,所以就把X->En的encoder部分的mask和En->Y的decoder部分mask结合起来使用,得到X->Y的mask。
如图6、7所示,可以得到以下结论:
- LaSS在zero-shot的情境下,不管是BLEU,还是翻译出的target语言准确率,都很好。这种"on-target"优势可能的原因是:LaSS方法使得模型本身的参数是language specific的,带有很强的语种信号!!!
zero-shot的情形中,对于X->Y的mask取法一定是最好的吗?
文中对应X->Y的mask的取法是,取X->En的encoder mask和En->Y的decoder mask,图7中试着把encoder mask更换成别的语言,decoder mask更换成别的语言。发现:
- 文中X->Y的mask取法更好
- encoder mask更换成其它语言,性能下降不明显,说明decoder > encoder
既然LaSS的模型参数是language specific的,那么相似的语种,对应的模型参数是否相似?
如图8所示,文章中使用的不同语言对所对应的模型参数相似度度量是基于mask,具体计算过程为:语言对1所对应的mask1和语言对2所对应的mask2,共有的1的数量,除以语言对1所对应的mask1拥有的1的数量。
图9展示了8种不同语言的语系关系,图10中的(a)指的是En->8种语言这8种语言对互相之间的模型参数相似度;(b)指的是8种语言->En这8种语言对互相之间的模型参数相似度;(c)指的是8种语言->En这8种语言对和En->8种语言这8种语言对之间的模型参数相似度;结论如下:
- (a)和(b)呈现出较为明显的上矩形、下矩形的现象,说明相似的语言所对应的语言对之间的模型参数更为相似。
- ( c )没有这样的效果,个人的理解是,X->En和En->Y比较时,没有控制变量,即,不仅是语种变量改变了,source端和target端的位置也改变了,对应的encoder和decoder的参数情况也是颠倒了的,造成了混乱。文章中的解释是,模型参数的相似度和source和target同时有关,颠倒了s和t的方向就完全不一样了。
整个模型中哪些层的模型参数,是更加language specific的?
如图11所示,实验给6个层,都取了5种不同的参数。虽然文章没有细说,但某一个点代表的应该是:某一层上的某一种参数,对于很多很多种不同的语言对所分配的mask相似度的平均,平均相似度越低,代表这一层的这一种参数更加language specific。可以得到以下结论:
- bottom和top层更加language specific,可能的原因是,它们更加靠近输入和输出端。
取mask时,比例α如何设置?
如图12所示,结论为:
- 对于较小的数据集,为了防止过拟合,模型参数一般取少一点,那么α取更大,保留更多的模型参数;
- 对于较大的数据集,为了提升性能,模型参数一般取多一点,那么α取更小,保留更少的模型参数;
问题
- 问:win ratio指的是什么?
- 答: 图3中的WMT被分为了low\medium\rich三种,每种里面有多种语言对,win ratio指的是LaSS方法在某一种里面,在多少个语言对上战胜了baseline。
- 文章附录中说,embedding层,layer normalization层不做mask
WHY?- 答:在问
- 在评价模型泛化能力的情形一中,虽然语言对整体没有出现过,但source端或者target端总有一个En语言存在,是否能够在source和target都没有出现过的语言对上做实验?
- 答:错了,从附录中可以看到,情形一使用的WMT数据集中,不存在En\It\Ar。
- 在评价模型泛化能力的情形二中,为X->Y取mask的策略是english centric的,是不是可以尝试以其他语言为中间语言?甚至说,这种中间语言都不一定是一种真实存在的语言?
- 答:暂时不想了,毕竟english centric是资源最丰富的,大家都这么做。