三种Cross-lingual模型 (XLM, XLM-R, mBART)详解
本文将详述三种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
假设有NNN个语种,对应的语料记为{Ci}i=1,2,...,N\{C_i\}_{i=1,2,...,N}{Ci}i=1,2,...,N,CiC_iCi中的句子数量用nin_ini表示
作者的所做的实验中,所有的语种共用一个字典,该字典是用Byte Pair Encoding(BPE)构建的。共享的内容包括相同的字母、符号token如数字符号、专有名词。这种共享字典的方式能够显著的提升不同语种在嵌入空间的对齐效果。本文在单语料库中从随机多项式分布中采样句子进行BPE学习。为了保证语料平衡,句子的采样的概率如下:
qi=piα∑j=1Npjαwithpi=ni∑k=1Nnkq_i=\frac{p^\alpha_i}{\sum_{j=1}^Np^\alpha_j}\;\;\;\;\;with\;\;\;\;\;p_i=\frac{n_i}{\sum_{k=1}^Nn_k} qi=∑j=1Npjαpiαwithpi=∑k=1Nnkni
其中α=0.5\alpha=0.5α=0.5。使用这种概率函数进行抽样,可以提高训练语料较少的语言出现的频率,同时可以避免小语种在BPE的过程中直接被切割成单个字符
注:很多博客直接把这个公式往这一贴就草草了事,下面我会讲解一下这个公式
假设现在有三个语种的语料C1,C2,C3C_1,C_2,C_3C1,C2,C3,他们对应的句子数分别为n1=100,n2=190,n3=10n_1=100,n_2=190,n_3=10n1=100,n2=190,n3=10
那么
p1=100300=13,p1α≈0.57p2=190300=1930,p2α≈0.79p3=10300=130,p3α≈0.18q1=0.571.54≈0.37q2=0.791.54≈0.51q3=0.181.54≈0.11p_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\\ p1=300100=31,p1α≈0.57p2=300190=3019,p2α≈0.79p3=30010=301,p3α≈0.18q1=1.540.57≈0.37q2=1.540.79≈0.51q3=1.540.18≈0.11
可能读者看到这个概率没什么感觉,假设单纯的使用句子数的比例ppp进行采样,可以到看C1C_1C1被采样的概率是C3C_3C3的10倍。但是如果使用qqq概率进行采样,C1C_1C1被采样的概率仅是C3C_3C3的3倍多,虽然C3C_3C3被采样的概率从数值上来看仍然很小,但是相对来看,小语料被采样的概率确实是提升了
Pre-training tasks
作者提出了三种预训练任务:CLM、MLM和TLM,下面分别介绍:
CLM (Causal Language Modeling)
文中的因果语言建模 (CLM) 任务其实是一个Transformer语言模型,该模型被训练来对给定句子预测后一个单词的概率P(wt∣w1,...,wt−1,θ)P(w_t\mid w_1,...,w_{t-1},\theta)P(wt∣w1,...,wt−1,θ)
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中相同,只是重新设置α=0.3\alpha=0.3α=0.3。另一个与XLM不同的是,文本不使用Language Embeddings。本文的词典大小是250k,训练了两个模型:
XLM−RBaseXLM-R_{Base}XLM−RBase(L= 12, H = 768, A = 12, 270M params)
XLM−RXLM-RXLM−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)翻译回自己表现还要好
Reference
- Facebook AI Research的XLM模型:将BERT扩展成跨语言模型
- XLM论文原理解析
- XLM解读(论文 + PyTorch源码)
- Facebook 提出一种新型BERT:面向跨语言理解的XLM-R
- mbart-預訓練的機器翻譯模型
三种Cross-lingual模型 (XLM, XLM-R, mBART)详解相关推荐
- flink 三种时间机制_Flink的时间与watermarks详解
当我们在使用Flink的时候,避免不了要和时间(time).水位线(watermarks)打交道,理解这些概念是开发分布式流处理应用的基础.那么Flink支持哪些时间语义?Flink是如何处理乱序事件 ...
- 计算机无法使用光驱启动,电脑BIOS怎么设置光盘启动 三种类型BIOS设置光驱启动的图文详解教程...
怎么设置电脑BIOS让电脑使用光盘启动呢?如何使用光盘安装电脑系统?BIOS怎么修改为光盘启动?本文将给大家介绍三种常见类型的BIOS的光盘启动设置方法,下面请看具体操作步骤. 主板BIOS类型主要有 ...
- 三种经典iPhone上网络抓包方法详解
很多时候需要网络抓包分析,在iPhone上抓包稍有不同,下面介绍三种常用的方式.分析工具以wireshark为例. 一.最简单的方式:用PC作为热点,在PC上抓包 优点:简单: 缺点:不能抓真机2G/ ...
- dom操作获取盒子宽高位置的三种方法,offset/scroll/client三大家族使用详解(附源码及注释)
结论:页面body的高度==视口的高度+滚动条滚动的距离. 这是一个恒等式,看完本篇博客,你将了解offset/scroll/clent三大事件获取宽高位置的具体含义,运用所学内容可以推导出这样的恒等 ...
- 『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式
三种原型实现模型 一.抛弃式原型开发 二.演化式原型开发 三.增量式原型开发 一.抛弃式原型开发 1.定义:验证和澄清系统的需求描述,重新构造系统. 2.流程图 3.典型例子 开发者与客户进行沟通交流 ...
- 采用面向对象方法开发软件,通常需要建立三种形式的模型
采用面向对象方法开发软件,通常需要建立三种形式的模型,它们分别是: 描述系统数据结构的 ( 1 ) ,该模型主要用 ( 2 ) 来展现. 描述系统控制结构的 ( 3 ) ,该模型通常用 ( 4 ) 来 ...
- Meta最新模型LLaMA细节与代码详解
Meta最新模型LLaMA细节与代码详解 0. 简介 1. 项目环境依赖 2. 模型细节 2.1 RMS Pre-Norm 2.2 SwiGLU激活函数 2.3 RoPE旋转位置编码 3. 代码解读 ...
- OSI 七层模型和TCP/IP模型及对应协议(详解)
OSI 七层模型和TCP/IP模型及对应协议(详解) 查看全文 http://www.taodudu.cc/news/show-6185847.html 相关文章: OSI7层网络模型协议精析 OSI ...
- [Python图像处理] 三十三.图像各种特效处理及原理万字详解(毛玻璃、浮雕、素描、怀旧、流年、滤镜等)...
此文转载自:https://blog.csdn.net/Eastmount/article/details/111568397#commentBox 该系列文章是讲解Python OpenCV图像处理 ...
- Iterator主要有三个方法:hasNext()、next()、remove()详解
Iterator主要有三个方法:hasNext().next().remove()详解 一.Iterator的API 关于Iterator主要有三个方法:hasNext().next().remove ...
最新文章
- JQUERY 阻止a 标签链接
- python对象编程例子-python面向对象编程:python类和实例讲解
- NSDictionary所有API的学习。
- 工业界和学术界的思考
- mysql中的所有类型_mysql中常用的数据类型
- MySQL日期数据类型、时间类型使用总结
- 彻底理解HashMap的元素插入原理
- find命令及文件后缀名
- shell使用sshpass自动验证root密码
- 读《我是一只 IT 小小鸟》
- LVM逻辑卷磁盘管理
- 小米路由器安装MT工具
- 如何解决VC 应用程序无法启动,因为应用程序的并行配置不正确 sxstrace.exe问题...
- Python--所有的库
- IOS开发 生成app图标
- 【阿里云OSS对象存储搭配CDN加速使用】
- dedecms 栏目绑定二级域名
- openOCD的使用1: 应用openOCD和Jlink仿真器连接Freescale K60系列 MCU
- CMMI的关键过程域(KPA)
- 【2019-09-04】恐惧就是进化的暗示