本文将详述三种Cross-lingual模型,按照其在Arxiv上发表论文的时间,分别是XLM(2019/1/22)、XLM-R(2019/11/5)、mBART(2020/1/22),有意思的是这三篇文章均出自FaceBook,他们是不是对跨语言模型有什么执念?
XLM (Cross-lingual Language Model Pretraining)
尽管原有的BERT模型可以在上百种语言上进行预训练,但是语言之间的信息并不是互通的,不同的语言模型之间没有共享知识。Facebook的XLM模型克服了信息不互通的难题,将不同语言放在一起采用新的训练目标进行训练,从而让模型能够掌握更多的跨语言信息。这种跨语言模型的一个显著优点是,对于预训练后的后续任务(比如文本分类或者翻译等任务),训练语料较为稀少的语言可以利用在其他语料上学习到的信息
文章提出3个预训练任务,其中2个仅需要单语种数据集(无监督方式),另一个需要平行语料(有监督方式)
Shared sub-word vocabulary
假设有$N$个语种,对应的语料记为$\{C_i\}_{i=1,2,...,N}$,$C_i$中的句子数量用$n_i$表示
作者的所做的实验中,所有的语种共用一个字典,该字典是用Byte Pair Encoding(BPE)构建的。共享的内容包括相同的字母、符号token如数字符号、专有名词。这种共享字典的方式能够显著的提升不同语种在嵌入空间的对齐效果。本文在单语料库中从随机多项式分布中采样句子进行BPE学习。为了保证语料平衡,句子的采样的概率如下:
$$ q_i=\frac{p^\alpha_i}{\sum_{j=1}^Np^\alpha_j}\;\;\;\;\;with\;\;\;\;\;p_i=\frac{n_i}{\sum_{k=1}^Nn_k} $$
其中$\alpha=0.5$。使用这种概率函数进行抽样,可以提高训练语料较少的语言出现的频率,同时可以避免小语种在BPE的过程中直接被切割成单个字符
注:很多博客直接把这个公式往这一贴就草草了事,下面我会讲解一下这个公式
假设现在有三个语种的语料$C_1,C_2,C_3$,他们对应的句子数分别为$n_1=100,n_2=190,n_3=10$
那么
$$ p_1=\frac{100}{300}=\frac{1}{3}, \ p_1^\alpha \approx 0.57\\ p_2=\frac{190}{300}=\frac{19}{30}, \ p_2^\alpha \approx 0.79\\ p_3=\frac{10}{300}=\frac{1}{30}, \ p_3^\alpha \approx 0.18 \\ q_1=\frac{0.57}{1.54}\approx 0.37 \\ q_2 = \frac{0.79}{1.54} \approx 0.51\\ q_3 = \frac{0.18}{1.54} \approx 0.11\\ $$
可能读者看到这个概率没什么感觉,假设单纯的使用句子数的比例$p$进行采样,可以到看$C_1$被采样的概率是$C_3$的10倍。但是如果使用$q$概率进行采样,$C_1$被采样的概率仅是$C_3$的3倍多,虽然$C_3$被采样的概率从数值上来看仍然很小,但是相对来看,小语料被采样的概率确实是提升了
Pre-training tasks
作者提出了三种预训练任务:CLM、MLM和TLM,下面分别介绍:
CLM (Causal Language Modeling)
文中的因果语言建模 (CLM) 任务其实是一个Transformer语言模型,该模型被训练来对给定句子预测后一个单词的概率$P(w_t\mid w_1,...,w_{t-1},\theta)$
MLM (Masked Language Modeling)
就是你知道的BERT的MASK任务,稍微有一些不同的是,论文使用由任意数量的句子(每个句子截断256个token)组成的文本流,而不是BERT中仅两个句子组成的文本对。并且为了平衡高频词与低频词之间的差异,在遮住词的时候采用了与上文所述的重采样类似的方法
TLM (Translation Language Modeling)
CLM和MLM都是无监督的,只需要单语数据,如何设计一个针对平行语料的有监督任务呢?翻译任务就是个不错的选择。论文提出一种新的翻译语言建模方法 (TLM) 来提高跨语言训练的效果。TLM的实际上是MLM的扩展,TLM不考虑单语种的文本流, 而是将并行的翻译句对拼接起来
如上图所示,在source句子和target句子中都随机mask一些词。当要预测英语句子中被mask的词时,模型首先需要从英语句子的上下文入手,特别地,如果模型仅通过英语句子不足以推断出被mask的单词时,还能够注意到对应法语的翻译内容。这就能够引导模型将英语和法语的表征进行对齐
我们还注意到上图Position embeddings与传统PE有些不一样。具体来说,在target句子的部分,位置编码需要重置。同时,无论是这三个预训练任务中的哪一个,我们都会额外输入一个Language embeddings给模型
Cross-lingual Language Models
跨语言预训练模型由CLM与MLM或MLM与TLM结合的模型组成
对于CLM与MLM的组合,文本训练模型的过程中,每个batch包含64个句子流,每个句子流由256个token组成。每次迭代,一个batch来自于同一语种的句子,句子的采样概率与sub-word vocabulary采样的概率函数设计方式一样,只不过其中的$\alpha$变为0.7
对于TLM和MLM的组合,训练时需要在这两个任务交替进行,并用类似的方法采样翻译的句对
Experiences & Results
Cross-lingual classification
对于跨语言文本分类,论文采用模型的最后一层第一个token的输出作为后续线性分类器的输入。首先用MLM任务在各个语言的单语语料上进行训练(也有加上额外的平行语料进行TLM训练的部分),然后再用英文训练集进行fine-tune,最后在XNLI多语种数据集上进行评估,结果如下表所示
注:XNLI的任务是判断两个来自相同语言的句子之间是否有Entailment, Contradict或Natural的关系
Unsupervised Machine Translation (UMT)
无监督机器翻译用的比较多的方法是去噪自编码器+循环翻译。具体来说,对于英译德这个任务,搭建起Encoder-Decoder模型之后,可以用英文文本加上噪声,输入Encoder,然后Decoder出一个德文伪数据,再将该德文伪数据输入Encoder,我们希望Decoder输出的是原始的无噪声英文文本,有一种AutoEncoder的感觉在里面(English->Devon->English)
在该论文中,其实就是用CLM或MLM去初始化Encoder和Decoder,下表展示了用不同初始化方法的结果
Supervised Machine Translation (SMT)
下表展示了几种不同预训练方式的结果
- Sennrich et al.:这是之前的SOTA
- ro -> en:这个是使用单向的数据进行fine-tune
- ro <-> en:这个是使用双向的数据进行fine-tune
- ro <-> en + BT:用双向的数据进行fine-tune,同时进行Back-Translation(先从A->B生成B的伪数据,然后再翻译回A)
Unsupervised cross-lingual word embeddings
这里主要是验证无监督情况下生成的多语Embedding的准确(优秀)程度,具体方法是验证各种源单词与其翻译对应的词之间的距离,结果如下表
XLM模型的代码开源在https://github.com/facebookresearch/XLM
XLM-R (Unsupervised Cross-lingual Representation Learning at Scale)
XLM-R全称叫做XLM-RoBERTa,为了更好的理解这个模型,请先花5分钟阅读一下RoBERTa概述这篇文章
XLM-R的改进
- 在XLM和RoBERTa中使用的跨语言方法的基础上(所以,本质就是XLM+RoBERTa,没有其他了),在新模型中增加了语种数量和训练数据集的数量,具体来说使用超过2TB预处理过的CommonCrawl数据集,以自监督的方式训练跨语言表征
- 在fine-tuning期间,基于多语言模型的能力来使用多语言的标注数据,以提升下游任务的性能
- 调整了模型的参数,以抵消以下不利因素:使用跨语言迁移来将模型扩展到更多的语言时限制了模型理解每种语言的能力。我们的参数更改包括在训练和词汇构建过程中对低资源语言进行上采样,生成更大的共享词汇表,以及将整体模型增加到5.5亿参数量
Masked Language Models
XLM-R的模型主体还是Transformer,训练目标是多语种的MLM,基本和XLM一样。作者从每个语种的语料中采样出文本,再预测出被Mask的tokens。从各语种采样的方法与XLM中相同,只是重新设置$\alpha=0.3$。另一个与XLM不同的是,文本不使用Language Embeddings。本文的词典大小是250k,训练了两个模型:
- $XLM-R_{Base}$(L= 12, H = 768, A = 12, 270M params)
- $XLM-R$(L = 24, H = 1024, A = 16, 550M params)
Scaling to a hundred languages
XLM-R的预训练基于100种语言,下图展示了XLM-R和XLM-100相同的88种语言以及各个语料的大小
Cross-lingual Understading Results
下表展示了在XNLI上进行跨语言分类实验的结果。其中D列表示用于预训练的数据,#M列表示模型数量,#lg表示表示语种数量。可以看出XLM-R以82.4%的平均准确率取得了SOTA
Named Entity Recognition
Question Answering
XNLI: XLM versus BERT
多语言模型常常招致的一个批评是其在单语言任务上的表现往往不好。但是XLM-R的实验结果却令人刮目,竟然可以超越单语种BERT。具体对比结果见下表
注:个人感觉作者这里为了证明比单语言模型好,真是穷极手段。首先并没有用XLM-100,而是用了一个少语种的XLM-7模型。其次,没有和RoBERTa对比,而是和BERT掰手腕,道理我相信大家懂的都懂
mBART (Multilingual Denoising Pre-training for Neural Machine Translation)
mBART看名字就明白其实是multilingual版的BART,如果不了解BART,请先阅读BART详解这篇文章
Pre-train & finetune startegy
下图是这篇论文进行Pre-training和Fine-tuning的方式,其中比较有趣的是Pre-training
Pre-training
这个阶段只需要一种语言即可,Encoder的输入为Masked token,Decoder的输入为Sentences permutation,每个句子结尾都加上end token</s>
,并希望这个Transformer能够顺利还原所有的Masked token以及原始句子的顺序,在Decoder输入句子的前面还添加了Language ID作为模型翻译时的Start token
Masked的做法类似BERT,Sentecen permutaion的做法类似ALBERT中的Sentence Order Prediciton (SOP)。另外,Language ID的做法类似CTRL,告诉模型接下来预测的目标语言是什么,总之就是融合了各篇Paper的优点
Fine-tuning
这个阶段就是用来finetune下游多语言任务。作者分别试验了Sentence和Document的翻译,这两个任务的差别只在于文本长短而已,当然,Document的翻译会相对难一些
Data Overview
下表表示在Pre-train阶段使用的训练集,共有25种语言,vocabulary约有250,000个tokens。为了处理样本不均衡的问题,作者使用了upsampling和downsampling(参考XLM),其它的处理方式基本上跟原始的Transformer差不多
Code | Language | Tokens/M | Size/GB |
---|---|---|---|
En | English | 55608 | 300.8 |
Ru | Russian | 23408 | 278.0 |
Vi | Vietnamese | 24757 | 137.3 |
Ja | Japanese | 530 (*) | 69.3 |
De | German | 10297 | 66.6 |
Ro | Romanian | 10354 | 61.4 |
Fr | French | 9780 | 56.8 |
Fi | Finnish | 6730 | 54.3 |
Ko | Korean | 5644 | 54.2 |
Es | Spanish | 9374 | 53.3 |
Zh | Chinese (Sim) | 259 (*) | 46.9 |
It | Italian | 4983 | 30.2 |
Nl | Dutch | 5025 | 29.3 |
Ar | Arabic | 2869 | 28.0 |
Tr | Turkish | 2736 | 20.9 |
Hi | Hindi | 1715 | 20.2 |
Cs | Czech | 2498 | 16.3 |
Lt | Lithuanian | 1835 | 13.7 |
Lv | Latvian | 1198 | 8.8 |
Kk | Kazakh | 476 | 6.4 |
Et | Estonian | 843 | 6.1 |
Ne | Nepali | 237 | 3.8 |
Si | Sinhala | 243 | 3.6 |
Gu | Gujarati | 140 | 1.9 |
My | Burmese | 56 | 1.6 |
Evaluation
接下来,作者比较不同语言对于英文的finetune效果,下图表示英语与其他语言的翻译效果,Low/Medium Resource分别表示句子数量小于1M以及介于1~10M。mBART25表示作者在25中语言上进行pretrain的模型;random表示不是用pretrain模型,直接在该语言任务上进行训练。可以发现,不管是哪种翻译任务,mBART25表现都是最好的
接下来,作者在High Resource (>10M) 上进行finetune,共有6种语言,有趣的是,当资料量大于一定程度时(25M以上),单独使用自己的资料集反而表现好一些
最后,作者做了一个有趣的实验。首先finetune 12种语言翻译到英文(X轴),然后直接无差别地在各个语言上互相翻译(Y轴)。有趣的是,除了自己翻译自己表现最好之外(对角线),表现次好的语言都是同一语系的(灰色区域),这表明同一语系内的语言确实有某些共通的特征。另外还有一个有趣的地方,Czech (Cs)翻译到Romanian (Ro)的表现反而比Czech (Cs)翻译回自己表现还要好
又发现一个好站,收藏了~以后会经常光顾的@(笑眼)