MENU

三种 Cross-lingual 模型 (XLM, XLM-R, mBART) 详解

November 2, 2020 • Read: 8996 • Deep Learning阅读设置

本文将详述三种 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 与 MLMMLM 与 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 的改进

  1. 在 XLM 和 RoBERTa 中使用的跨语言方法的基础上(所以,本质就是 XLM+RoBERTa,没有其他了),在新模型中增加了语种数量训练数据集的数量,具体来说使用超过 2TB 预处理过的 CommonCrawl 数据集,以自监督的方式训练跨语言表征
  2. 在 fine-tuning 期间,基于多语言模型的能力来使用多语言的标注数据,以提升下游任务的性能
  3. 调整了模型的参数,以抵消以下不利因素:使用跨语言迁移来将模型扩展到更多的语言时限制了模型理解每种语言的能力。我们的参数更改包括在训练和词汇构建过程中对低资源语言进行上采样,生成更大的共享词汇表,以及将整体模型增加到 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 差不多

CodeLanguageTokens/MSize/GB
EnEnglish55608300.8
RuRussian23408278.0
ViVietnamese24757137.3
JaJapanese530 (*)69.3
DeGerman1029766.6
RoRomanian1035461.4
FrFrench978056.8
FiFinnish673054.3
KoKorean564454.2
EsSpanish937453.3
ZhChinese (Sim)259 (*)46.9
ItItalian498330.2
NlDutch502529.3
ArArabic286928.0
TrTurkish273620.9
HiHindi171520.2
CsCzech249816.3
LtLithuanian183513.7
LvLatvian11988.8
KkKazakh4766.4
EtEstonian8436.1
NeNepali2373.8
SiSinhala2433.6
GuGujarati1401.9
MyBurmese561.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) 翻译回自己表现还要好

Reference

Last Modified: April 20, 2021
Archives Tip
QR Code for this page
Tipping QR Code
Leave a Comment

已有 1 条评论
  1. 惠州 惠州

    又发现一个好站,收藏了~以后会经常光顾的 @(笑眼)