前言
代码地址:https://github.com/ictnlp/NA-MNMT
论文地址:https://aclanthology.org/2021.acl-long.445.pdf
前人工作&存在问题
在多语言上训练的MNMT描述了常识(general knowledge),而忽略了语言独立的知识。为了达到平衡,前人:
- language-specific模块(缺点:1. 增加了模型参数;2. 需要人工定制化,所以可用性不强):
- attention模块
- 解耦的encoder、decoders
- 轻量级的language adapters
本文贡献
提出模型参数不随语言对数量增加而增加、也不需要定制化的language specific方法。
关键词:language specific based on language pairs、neurons、预训练模型
具体方法
第一步:在完整的平行语料上预训练
第二步:再利用所有语言对数据,给模型参数(neuron?)进行重要性评估,提出了两种参数重要性评估方式:
- Taylor Expansion:
考虑一对语言对s-t,把s输入进模型的encoder,decoder端输出predicted_t,然后和t计算交叉熵损失。此时为了衡量参数i的重要性,文中做法是将它进行裁剪,通过裁剪前后损失函数的变化(如公式1)来衡量参数的重要性。Taylor Expansion将模型参数当作是自变量(也有可能是参数所对应的模型输出,暂时不太理解,需要看代码),然后进行泰勒展开(如公式2)。然后将式子中的a取0,阶数取1,就可得到公式3。最后,R1(拉格朗日余项,如公式4)是损失函数的二阶导,而由于模型中relu函数的存在,所有R1等于0,最终得到模型参数在单个语言对、单个句子上的重要性评估(如公式5)。接着,公式6是模型参数在单个语言对、所有句子上的language-specific重要性评估,公式7是模型在所有语言对、所有句子上的general重要性评估。
- Absolute Value:
这种方法用模型参数输出的激活值的绝对值作为重要性评估,如公式8所示:
第三步:根据重要性,给模型分配general、language specific等角色
- general:首先根据公式7得到的general重要性评估,对模型参数进行排序,前p的参数被认为对所有语言对都重要,是general neurons。
- language specific:对于后p的language-specific参数,它们在所有语言对上的总体重要性较低,但也存在两种情况:1. 重要性低,重要性方差也小,意味着它既不是general的、也不是language-specific的;2. 重要性低,重要性方差大,意味着它不是general的,但是服务于特定的语言。总的来说,对于某一个参数,用它对所有语言对的重要性的最大值 乘上 一个超参数k,作为阈值。本文认为该参数对于大于该阈值的语言对是specific的。
第四步:最后在完整的平行语料上finetune,对于语言对A,只更新general和对该语言对specific的模型参数。
具体实验
many 2 many
好!但训练时间应该差很多
one 2 many
好!
对于相似的语言,参数对它们的重要性分布是否也是相似的?
其中Es和Pt是相似语言,Fi和它们不相似。发现在不同的神经元上,Es和Pt的重要性分布更加相似。不能完全确定的是:横坐标是不同的神经元,具体代码又是如何实现。
不同的语言对,会得到不同的关注吗?
一个一个神经元来看,有较多的神经元,对于EN-RO和RO-IT的重要性分数较高,而对于IT-EN,大多数神经元对其的重要性分数都不是很高。
模型不同层分配给不同语言对的language-specific neurons个数(模型不同层的language-specific程度)
公式9计算了某一层,对于某一个语言对,分配给它的ls neurons占总ls neurons的比例。如果LScore越大,说明该层分配给它的neurons越多,也就说明该层特别关注于这个语言。
如下图中encoder和decoder端的中间层,它们对大多数语言都分配了几乎所有的language-specific neurons。这说明了:对于这些层的language-specific neurons,倾向于给几乎所有的语言都分配一个差不多的重要性,导致几乎所有的重要性都大于λxmax,从而被分配给几乎所有语言。所以它们并不是language-specific的。但又有一些矛盾,即,它们其实是被认为是language-specific的参数。
相比之下,encoder和decoder端的顶层和底层,它们对于有的一些语言会统一分配,有的一些语言就只有部分的参数关注,会更加language-specific。
总体来说,这篇文章中的language-specific参数并不是真的language-specific,如果它对于很多语言都是specific的,那它就是一个general的,只不过是总体重要性相对较低的general参数。
模型不同层、不同模块的language-specific程度
- attention模块的language specific部分对所有语言对的重要性差异很小,换句话说,attention模块被所有语言对共享,很general。
- FFN模块的高层更加language specific
k的影响?(k越大,language specific的参数关注的语言对越少)
- k=1,language specific的参数只关注重要性最高的语言对。共享的参数很少,信息迁移减少,性能下降
- k=0,language specific的参数就是general参数,和baseline性能相同
language-specific参数和general参数各自的重要性
- general:随机去除20%的general参数后,性能损失约为15-20 BLEU
- language specific:对于不同的语言对,随机去除分配给该语言对的50%参数后,该语言对的性能损耗相对较大,其它语言对也会有一定损失(因为这些参数也有部分是分配给其它语言对的)
可以尝试不进行随机去除,比如语言对A,就去除分配给语言对A,但不分配给语言对X的,看看是不是对A影响很大,对X影响较小,效果更加明显?
问题
- model neurons具体的代码表现形式是怎样的
- 具体方法中的第一步如果是预训练模型,然后给NMT模型初始化,是不是效果会更好
- 本文的方法完全是data driven,迁移效果会不会很差?
- 有没有端到端的方法?而不需要1. pretrain 2. 评估 3. finetune
- multilingual + TS\Adapter是不是也是先预训练,再增加模块,再训的?还是端到端的。——应该是端到端的:“We set the dimension of projection layer to 128 and train the model from scratch.”
- 用方差更直观一些。而论文中先进行general和ls的分类,ls的参数里面又有相对general的,就有点奇怪,事实上,感觉两者都是general的,只是前面就分出来的更加重要,后面的不太重要一些。
其它
- Spanish和Portuguese属于western romance(indo-european family);Finnish属于ural family的finnish-ugric分支