[文献阅读]—Unsupervised Cross-lingual Representation Learning at Scale

前言

在这里插入图片描述
论文地址:https://arxiv.org/pdf/1911.02116v1.pdf
代码地址:https://github.com/facebookresearch/XLM

前人工作&存在问题

前人工作使用跨语言的模型迁移,在NLI\QA\NER等benchmark上取得好的结果;预训练词向量->上下文的表示->跨语言的理解(即:单个模型能够同时处理多种语言)。它们都在维基百科上做的预训练,语料还是不够大。
和本文最像的工作是:Massively Multilingual Neural Machine Translation in the Wild: Findings and Challenges

本文贡献

本文在CommonCrawl数据集上做预训练,比先前的工作大了两个数量级;
本文探究了语种数量、模型容量、词表大小、高低资源权衡、训练方式、分词方式对实验性能的影响;
本文的模型在多个下游任务上取得sota;

具体方法

首先对原始文本进行sentencepiece tokenization(使用一元语言模型),词表大小为250K;使用α=0.3的平滑来对不同语言的batch进行采样;不使用language embeddings(为了更好地处理code-switching?);
在wikipedia上的100中语言上训练的模型被称作XLM-100;在commoncrawl上训练的模型被称作XLM-R(L = 24, H = 1024, A(注意力头) = 16, 550M params);
对于commoncrawl数据集,使用一个和fasttext所用的相结合的内部语言识别模型,来得到100种语言,并为每一个语言训练一个语言模型来进行过滤,对于English语种,进行一次转储(dump),而对于其它语言,进行十二次转储(转储很大程度上增加了数据集的规格?)

具体实验

Crosslingual understanding:

  • NLI(XNLI):以English作为训练集(train),机翻成其它十四种语言,作为验证/测试集(dev/test)
    • cross-lingual transfer:全语种encoder+英语分类器
      • 在所有语种上预训练
      • 在XNLI的英语训练集上训练一个英语分类器(finetune)
      • 直接推理
    • translate-test:英语encoder+英语分类器,with a translator
      • 只在英语上进行预训练
      • 在XNLI的英语训练集上训练一个英语分类器
      • 引入/训练一个外部翻译器,对于所有的其它语言,都先通过这个翻译器翻译成英语,然后经过该模型进行推理
    • translate-train:全语种encoder+多个单语分类器
      • 在所有语种上进行预训练
      • 在XNLI的所有单语训练集上训练多个单语分类器(finetune)
      • 不是特别清楚:1. 单个全语种的encoder,配个所有单语分类器,还是2. finetune之后,有多个不同的全语种encoder,配合各自的单语分类器(应该是1,在图7中可以发现,translate-train使用了N个验证集选择了N个模型,合并起来作为一个全语种的encoder。fix这个encoder的所有参数,然后在所有单语训练集上训练多个单语分类器(finetune))
    • translate-train-all:全语种encoder+全语种分类器
      • 在所有语种上进行预训练
      • 在XNLI的所有单语训练集上训练一个全语种分类器(finetune)
      • 直接推理
  • NER(CoNLL-2002+CoNLL-2003)
    • 使用english进行finetune,在其它语种上预测(crosslingual transfer)
    • 使用语种a进行finetune,在语种a上预测
    • 使用所有语种进行finetune,在所有语种上预测
    • 使用语种a进行finetune,在其它语种上预测
  • QA(MLQA)

Monolingual(English) understanding:

  • GLUE:该数据集只包含用英语语料,对比的baseline也都是单语模型

一些规定:

  • high-resource:指的是在English和French上的平均结果
  • low-resource:指的是在Swahili和Urdu上的平均结果

语种越多越好吗?

如图1所示,随着预训练语种的增多,7->15时,低资源结果有所上升,可能的原因是,其它高资源、相似语种的加入能改善低资源语种上的性能;但随着语种进一步增多,模型的容量(capacity)不足,性能下降。

在这里插入图片描述

图1

如何改善上述the curse of multilinguality的问题?

如图2所示,相对于大模型,小模型的问题更为严重,说明增加模型容量能在一定程度上解决问题,但性能仍然下降很大,可能来源于词表的稀释(vocabulary dilution),即,固定的词表大小容不下那么多种语种。

在这里插入图片描述

图2

如图3所示,那么,也可以尝试增加词表的大小。1. 当模型的容量固定,词表大小不断增大(此时transformer的其它参数需要调小),整体性能先增后降(XLM-R采用词表大小=256k)。2. 更一般的,不固定模型的参数,直接增大词表的大小,整体性能也会上升。
在这里插入图片描述

图3

综上所述,模型容量、词表大小,能够缓解“多语言咒骂问题(the curse of multilinguality)“。

在同一个多语数据集上,更多使用低资源还是高资源语种进行训练?(权衡)

如图4所示,随着α的增大(越大,高资源的句子越容易被采样到,去进行模型的预训练),高资源性能越高,低资源性能反之。总体性能在α=0.3时更好。(XLM-R采用α=0.3)
在这里插入图片描述

图4

数据集大小/训练的batch size/分词方式(SPM/BPE)

如图5所示,使用更大的CC数据集进行预训练,不管是在高还是低资源上的性能都上升。

在这里插入图片描述
如图6所示,更大的BS,性能更好(XLM-R的bs=8192);使用SPM能够直接在所有语言的原始文本上进行分词,不像BPE那样麻烦,并且使用SPM没有带来很大的性能损失。(XLM-R使用SPM)

图5
![在这里插入图片描述](https://img-blog.csdnimg.cn/11bffe1c71ac4967b8d4535dcf24a9c7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATXVhc2Np,size_14,color_FFFFFF,t_70,g_se,x_16#pic_center)
图6

另外,本文发现:延长训练时间也有助于性能的提升,使用在验证集上的困惑度(perplexity)作为早停的指标,会带来性能的损失。

cross-lingual性能对比

如图7所示,#M=N代表模型的选择基于验证集中的N种语料(得到N种模型),=1代表模型选择基于整个验证集(得到1种模型);#lg代表模型预训练所用的语言数量;#D代表模型预训练所用的数据集。
可以发现:在NLI上
(1)#M=N时,性能更高(line4 vs line5);
(2)在cross-lingual transfer下,XLM-R比XLM-100好(line7 vs line 5),XLM-R比mbert也好(line7 vs line 3),尤其是在低资源的语种上;
(3)在cross-lingual transfer下,尽管XLM-R要处理100种语种,而XLM(line1)和Unicoder(line2)只要处理15种语种,XLM-R的性能依然好;
(4)在multilingual train(translation-train-all)下,XLM-R达到sota(这种设定可以理解为一种数据增强,和回译相似)(有点不确定这种情形到底是不是全语种encoder+全语种classifier,因为图7中,translate-train效果最差,translation-train-all效果最好;而相反的,图8中,each(我理解的是each就等价于translation-train,即,使用同一个预训练模型,并给每一个语种训练(finetune)一个task-specific的模型)效果最好,all(我理解的是all就等价于translation-train-all,即,使用同一个预训练模型,并在所有语种上训练同一个task-specific模型)效果最差,两种设定在两种任务上的结果截然相反,不太明白为何
在这里插入图片描述

图7

如图8所示,在NER上,(1)each>all>en;(2)XLM-R好
在这里插入图片描述

图8

如图9所示,在MLQA上,虽然BERT-large(line1)是单语模型,但在en上,具备多语能力的XLM-R还是比它更好,XLM-R取得最好结果。

在这里插入图片描述

图9

是在单语上进行预训练,在单语上进行task specific finetune更好,还是在多语上进行预训练,在单语上进行task specific finetune更好;换句话说,预训练阶段,采用多语虽然能够让模型具备同时处理多语的能力,但这个能力是否会影响它在单语任务上的性能?(这一点在图9的line1 vs line 5中也有所体现)

如图10所示,在GLUE(english)上,XLM-R超过了BERT,且与XLNET、RoBERT差别不大
在这里插入图片描述

图10

如图11所示,在XNLI上,(1)不管是在Wiki还是CC上,cross-lingual-transfer(在Wiki或CC的7个语种上预训练1个多语Roberta,并在XNLI的英语训练集上训练上层英语分类器(finetune),在所有语种上直接进行inference) < BERT(在Wiki或CC数据集上预训练了7个语种的BERT,并在XNLI的对应语种上进行finetune+inference);(2)不管是在Wiki还是CC上,translate-train-all(我的理解是,在Wiki或CC的7个语种上预训练1个多语Roberta,并在XNLI的所有语种训练集上训练上层的多语分类器(finetune))>BERT。这说明(有点牵强?):多语模型利用下游任务中多语数据的能力,能够弥补它的容量稀释(capacity dilution)问题。
另外,比较使用WIKI和CC数据集的结果,发现模型在sw和ur这两个低资源的数据集上性能提升较大。
在这里插入图片描述

图11

相关资源

XNLI
CoNLL-2002
CoNLL-2003
MLQA
GLUE(MNLI,SST-2,QNLI)
CommonCrawl
SPE

猜你喜欢

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