Press "Enter" to skip to content

站在BERT肩膀上的NLP新秀们:XLMs、MASS和UNILM

作者丨高开远

学校丨 上海交通大学硕士生

研究方向丨 自然语言处理

 

写在前面

 

在前一篇站在 BERT 肩膀上的 NLP 新秀们(PART I) [1]  介绍了两个都叫 ERNIE 的模型,思路也挺相似的,都是给 BERT 模型增加外部知识信息,使其能更好地“感知“真实世界。

 

今天我们来看看另外 几个有意思的 BERT 新秀:

 

XLMs from Facebook

 

MASS from Microsoft

 

UNILM from Microsoft

 

XLMs

 

 

对于 BERT 的改进可以大体分为两个方向:第一个是纵向,即去研究 BERT 模型结构或者算法优化等方面的问题,致力于提出一种比 BERT 效果更好更轻量级的模型;第二个方向是横向,即在 BERT  的基础上稍作修改去探索那些 Vanilla BERT 还没有触及的领域。直观上来看第二个方向明显会比第一个方向简单,关键是出效果更快。本文就属于第二类。

 

我们知道, BERT  预训练的语料全是单语言的,所以可想而知最终的模型所适用的范围基本也是属于单语范围的 NLP 任务,涉及到跨语言的任务可能表现就不那幺好。

 

基于此,作者们提出了一种有效的跨语言预训练模型, Cross-lingual Language Model Pretraining (XLMs) 。 XLMs 可以认为是跨语言版的 BERT,使用了两种预训练方式:

 

基于单语种语料的无监督学习

 

基于跨语言的平行语料的有监督学习

 

其在几个多语任务上比如 XNLI 和机器翻译都拉高了 SOTA。那幺我们就来看看具体的模型。

 

Shared sub-word vocabulary

 

目前的词向量基本都是在单语言语料集中训练得到的,所以其 embedding 不能涵盖跨语言的语义信息。为了更好地将多语言的信息融合在一个共享的词表中,作者在文本预处理上使用了字节对编码算法(Byte Pair Encoding, BPE),大致思想就是利用单个未使用的符号迭代地替换给定数据集中最频繁的符号对(原始字节)。这样处理后的词表就对语言的种类不敏感了,更多关注的是语言的组织结构。

 

关于 BEP 的具体栗子可以参考: Byte Pair Encoding example [2] .

 

Causal Language Modeling (CLM)

 

这里的 CLM 就是一个传统的语言模型训练过程,使用的是目前效果最好的 Transformer 模型。对于使用 LSTM 的语言模型,通过向 LSTM 提供上一个迭代的最后隐状态来执行时间反向传播(backpropagation through time, BPTT)。

 

而对于 Transformer,可以将之前的隐状态传递给当前的 batch,为 batch 中的第一个单词提供上下文。但是,这种技术不能扩展到跨语言设置,因此在这里作者们只保留每个 batch 中的第一个单词,而不考虑上下文。

 

Masked Language Modeling (MLM)

 

这一个预训练目标同 BERT 的 MLM 思想相同,唯一不同的就是在于模型输入。BERT 的输入是句子对,而 XLM 使用的是随机句子组成的连续文本流。

 

Translation Language Modeling (TLM)

 

这一部分应该是对跨语言任务取得提升的最大原因。不同于以上两个预训练模型(单语言语料训练 + 无监督训练),翻译语言模型使用的是有监督的跨语言并行数据。如下图所示输入为两种并行语言的拼接,同时还将 BERT 的原始 embedding 种类改进为代表语言 ID 的 Laguage embedding 和使用绝对位置的 Position embedding。

 

TLM 训练时将随机掩盖源语言和目标语言的 token,除了可以使用一种语言的上下文来预测该 Token 之外(同 BERT),XLM 还可以使用另一种语言的上下文以及 Token 对应的翻译来预测。这样不仅可以提升语言模型的效果还可以学习到 source 和 target 的对齐表示。

 

 

MASS

 

 

我们知道,BERT 只使用了 Transformer 的 encoder 部分,其下游任务也主要是适用于自然语言理解(NLU),对于类似文本摘要、机器翻译、对话应答生成等自然语言生成(NLG)任务显然是不太合适的。

 

BERT 的大火,也带动了 NLP 届的 pre-training 大火,受到 BERT  的启发,作者们提出联合训练 encoder 和 decoder 的模型: Masked Sequence to Sequence Pre-training for Language Generation (MASS) ,框架如下:

 

 

训练步骤主要分为两步:

 

1. Encoder: 输入为被随机 mask 掉连续部分 token 的句子,使用 Transformer 对其进行编码;这样处理的目的是可以使得 encoder 可以更好地捕获没有被 mask 掉词语信息用于后续 decoder 的预测;

 

2. Decoder: 输入为与 encoder 同样的句子,但是 mask 掉的正好和 encoder 相反,和翻译一样,使用 attention 机制去训练,但只预测 encoder 端被 mask 掉的词。该操作可以迫使 decoder 预测的时候更依赖于 source 端的输入而不是前面预测出的 token,防止误差传递。

 

MASS 预训练输入为 m 个 token 的句子 ,将位置 u 到 v 之间的 mask 掉之后的输入为 ,其中 表示被 mask 掉的片段。MASS 预训练目的预测输入中被 mask 掉的。

 

 

此外,作者们还提出了一个对于 mask 长度的超参数 k,并指出当 k=1 时,即 encoder 屏蔽一个 token,decoder 没有输入,该形式与 BERT 的 MLM 训练模型一致(但是 BERT 不是随机离散 mask 的嘛,好像还不太一样)。

 

 

当 k=m 时,即 encoder 完全 mask 掉,decoder 输入为完整句子,该形式与 OpenAI 的 GPT 模型一致。

 

 

由于 K 值为超参数,属于人为设定,作者们又在文章末尾对其进行了分析,通过多个试验表明,当 k 为句子长度的 50%~70% 时模型效果最好。

 

 

UNILM

 

 

 

这个就更炸了,也是微软的最近才放出的工作,直接预训练了一个微调后可以同时用于自然语言理解和自然语言生成下游任务的模型: UNIfied pre-trained Language Model (UNILM)

 

看完论文之后会发现非常自然,使用的核心框架还是 Transformer,不同的是预训练的目标函数结合了以下三个:

 

单向语言模型(同 ELMO/GPT)

 

双向语言模型(同 BERT)

 

seq2seq 语言模型(同上一篇)

 

 

注意哦,这里的 Transformer 是同一个,即三个 LM 目标参数共享,有点 multi-task learning 的感觉,可以学习到更 genneral 的文本表示。

 

接下来看本文模型:

 

 

Input Representation

 

模型的输入是一个序列,对于单向 LM 是一个文本片段,对于双向 LM 和 seq2seq LM 是两段文本。embedding 模式使用的是跟 BERT 一样的三类:

 

token embedding:使用 subword unit

 

position embedding:使用绝对位置

 

segment embedding:区分第一段和第二段

 

另外,[SOS] 为输入序列起始标志;[EOS] 为在 NLU 任务中为两个 segment 的分界标志,在 NLG 任务中为解码结束标志。

 

Backbone Network: Transformer

 

文中使用的是多层堆叠的 Transformer(24 层,与 相同),输入表示为 ,第 K 层的输出可以表示为:

 

 

其中 , 表示输入 在经过 K 层 transformer 之后的上下文表示。

 

重点来了。上面说将三个语言模型统一到了一起,那幺是如何实现的呢?作者们这里使用的是 Self-attention Masks,即对不同的语言模型,设置不同的 mask 策略进行学习。

 

 

下面具体介绍各个模型的 Mask 策略。

 

Unidirectional LM

 

对于单向 LM(left-to-right or right-to-left),我们在做 attention 的时候对每一个词只能 attend 其一个方向的上下文。如对 left-to-right LM, 我们就只能 attend 该词左边的信息,需要将右侧的词给 mask 掉;对于 right-to-left LM 也是同理。这样我们得到的 Mask 矩阵就是一个上三角或者下三角。

 

Bidirectional LM

 

和 BERT 一样,双向 LM 在训练时可以看到左边和右边的信息,所以这里的 Mask 矩阵全是 0,表示全局信息可以 attend 到该 token 上。

 

Sequence-to-Sequence LM

 

对于 seq2seq LM,情况稍微复杂一点点,有点像上述两个 Mask 矩阵的结合版本。该模型输入为两个 segment S1 和 S2,表示为 “[SOS] t1 t2 [EOS] t3 t4 t5 [EOS]” ,encoder 是双向的即有四个 token 可以 attend 到 t1 和 t2 上;decoder 是单向的,仅仅能 attend 到一个方向的 token 以及 encoder 的 token,以 t4 为例,它只能有 6 个 token 可以 attend。

 

在训练时会随机 mask 掉两个 segment 中的 token,然后让模型去预测被 mask 掉的词。

 

Next Sentence Prediction

 

对于双向 LM,作者也设置了 NSP 预训练任务,除了特殊 TOKEN 不一样,其他跟 BERT 是一样的。

 

实验部分我也不多做分析了。

 

小结

 

对于以上三篇论文做个小的个人评价: 大而美 。

 

模型和数据都很大,但是最终出来的效果是美的,争取往小而美的方向发展。

 

对于 XLM 和 MASS 都是涉及跨语言模型,补充了 BERT 在 NLG 任务上的不足。模型层面而言 XLM 没有使用传统的 encoder-decoder 框架,属于比较讨巧的方式。

 

UNILM 可以同时处理 NLU 和 NLG 任务,在 GLUE 上首次不加外部数据打赢了 BERT。后续的改进可以考虑加入跨语言任务的预训练,比如 XLM 和 MASS 做的工作。

 

最后,如若文章理解或措辞有误,还请大家务必海涵指正。

 

参考文献

 

[1] https://blog.csdn.net/Kaiyuan_sjtu/article/details/90757442

 

[2] https://gist.github.com/ranihorev/6ba9a88c9e7401b603cd483dd767e783

 

[3] https://www.lyrn.ai/2019/02/11/xlm-cross-lingual-language-model/

 

[4] https://zhuanlan.zhihu.com/p/56152762

 

[5] https://zhuanlan.zhihu.com/p/56314795

 

[6] https://github.com/facebookresearch/XLM

 

[7] https://zhuanlan.zhihu.com/p/65346812

 

[8] https://www.zhihu.com/question/324019899

 

[9] https://mp.weixin.qq.com/s/U_pYc5roODcs_VENDoTbiQ

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注