NLP前沿预训练语言模型大赏
预训练模型可以分为以下三个大类:
自回归模型
自动编码模型
序列到序列模型
什么是自回归模型(auto-regressive model):经典的语言建模任务,根据已读取文本内容预测下一个单词。比如Transformer的解码器,在训练阶段应用掩码机制,使得注意力计算过程中只能看到某个单词之前的内容,而没有后面的内容。尽管可以对这类预训练好的模型进行微调并在许多下游任务上取得出色的结果,但其最自然的应用是文本生成。这种模型的代表是GPT系列模型。
什么是自编码模型(auto-encoding model):通过某种方式破坏输入文本(比如Bert中对输入文本进行遮盖)并尝试重建原始文本的方式进行预训练。从某种意义上讲,与Transformer的编码器相对应,因为它们无需任何掩码,每一个位置都可访问全部输入的内容。这些模型通常能建立整个句子的双向编码表示,可以对它们进行微调并在许多下游任务上取得出色的结果,其最自然的应用是句子分类或序列标注。此类模型的典型代表是BERT。
注:简单地说,两者的区别在于数据的预训练形式不同。
什么是序列到序列模型(seq2seq model):将Transformer的编码器和解码器用于翻译任务或其它文本到文本问题,可以将它们微调成并适用于多种任务,但最自然的应用是翻译,摘要和问题解答。Transformer、T5是此类模型的一个典型代表(仅用于翻译)。
接下来给大家逐个介绍近些年来,在这三大预训练模型类型下的代表性模型。
自回归模型
这类模型基于Transformer的解码器部分,使用注意力掩码机制使得每个当前位置只能看到之前的输入文本。
GPT
Improving Language Understanding by Generative Pre-Training, Alec Radford et al.
在Book Corpus数据集上预训练的第一个基于Transformer解码器的自回归模型,由12层transformer模块组成的,使用最后的隐藏层来做不同的任务。
GPT-2
Language Models are Unsupervised Multitask Learners, Alec Radford et al.
简单来说,GPT-2就是基于Transformer架构的大规模模型。
GPT-2是GPT算法“进化版”,比GPT参数扩大10倍,达到了15亿个,数据量扩大10倍,使用了包含800万个网页的数据集,共有40GB。
GPT-2用于生成文本:
GPT-3
GPT-3: Language Models are Few-Shot Learners
“GPT-3”是一个拥有 1750 亿个参数的GPT-2 的放大版。
研究者们希望 GPT-3 能够成为更通用化的 NLP 模型,解决当前 BERT 等模型的两个不足之处:对领域内有标记数据的过分依赖,以及对于领域数据分布的过拟合。GPT-3 致力于能够使用更少的特定领域,不做 fine-tuning 解决问题。
CTRL
CTRL: A Conditional Transformer Language Model for Controllable Generation, Nitish Shirish Keskar et al.
与GPT模型相同,但增加了控制生成的概念。
CTRL模型可以指定文章的领域、风格、主题、时间、实体,实体间的关系,以及任务相关的行为等等,因此可以将其看成命题作文。它使用140G数据训练,参数规模1.63 billion(16亿,比GPT-2更大)。模型维度1280维,48层EncoderLayer,16头Attention,也是一个体量巨大的模型。
Transformer-XL
Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context, Zihang Dai et al.
针对输入为长文本时,一般的预训练模型需要进行切分截断导致语义不连续的问题。处理的方式:将长文本进行分段,一段段地输入模型中进行编码,并且在编码当前段的时候,加入缓存的上一段中的编码信息,使得信息能够在段与段之间传递。另外,此模型对文本的编码也做了一些特殊处理。
Reformer
Reformer: The Efficient Transformer, Nikita Kitaev et al .
具有许多技巧的自回归模型,可以减少内存占用和计算时间。这些技巧包括:
使用轴向位置编码(,通过将其分解为较小的矩阵,可以避免具有巨大的位置编码矩阵(当序列长度很大时)的机制。
用LSH(局部敏感哈希)注意代替传统注意力机制,有效提升自注意力层的计算速度。
避免通过在反向传递过程中使用可逆的转换器层来获取每一层的中间结果(从下一层的输入中减去残差将其返回),或者针对给定层内的结果重新计算它们(效率不如存储它们)但可以节省内存)。
按块而不是整个批次计算前馈操作。
XLNet
XLNet: Generalized Autoregressive Pretraining for Language Understanding, Zhilin Yang et al.
严格意义上来说,XLNet不是传统的自回归模型,而是使用了基于此训练策略的一种模型。
XLNet作为bert的升级模型,主要在以下三个方面进行了优化
不需要添加mask,输入的文本“打乱顺序”,并且采用自回归模型替代自动编码模型,使得某一单词的前面位置可能存在上下文词汇,既可以针对上下文进行编码,又解决mask带来的负面影响(训练与微调阶段的gap)
在具体实现过程中,引入双流注意力机制
引入transformer-xl
可参考:https://zhuanlan.zhihu.com/p/70257427
自编码模型
这部分模型依赖于原始Transformer的编码器部分,并且不使用任何mask,因此该模型可以查看输入文本的所有内容。对于预训练阶段,目标是原始句子,输入是其损坏的版本。
Bert
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding, Jacob Devlin et al.
MLM作为训练任务,即通过使用随机屏蔽来破坏输入,让模型预测原来的单词,更准确地说,在预训练期间,15%的内容被以下方式屏蔽:
80%情况下使用mask掉这个词,10%情况下采用一个任意词替换,剩余10%情况下保持原词汇不变。
优点:1)被随机选择15%的词当中以10%的概率用任意词替换去预测正确的词,相当于文本纠错任务,为BERT模型赋予了一定的文本纠错能力;2)被随机选择15%的词当中以10%的概率保持不变,缓解了finetune时候与预训练时候输入不匹配的问题(预训练时候输入句子当中有mask,而finetune时候输入是完整无缺的句子,即为输入不匹配问题)。
除了模型必须预测原始句子的目标以外,还存在第二个目标:输入是两个句子A和B(之间有一个分隔标记)。句子对有50%的概率连续,50%的概率不相关。该模型必须预测句子是否连续。
Albert
ALBERT: A Lite BERT for Self-supervised Learning of Language Representations, Zhenzhong Lan et al.
该模型提出了两种减少内存的方法,同时提升了训练速度,其次改进了BERT中的NSP的预训练任务:
对Embedding因式分解(Factorized embedding parameterization)
跨层的参数共享(Cross-layer parameter sharing)
引入句间连贯(Inter-sentence coherence loss)任务
注:BERT的NSP任务实际上是一个二分类,训练数据的正样本是通过采样同一个文档中的两个连续的句子,而负样本是通过采用两个不同的文档的句子。该任务主要是希望能提高下游任务的效果,例如NLI自然语言推理任务。但是后续的研究发现该任务效果并不好,主要原因是因为其任务过于简单。NSP其实包含了两个子任务,主题预测与关系一致性预测,但是主题预测相比于关系一致性预测简单太多了,并且在MLM任务中其实也有类似的效果,因此也许并不必要。
RoBERTa
RoBERTa: A Robustly Optimized BERT Pretraining Approach, Yinhan Liu et al.
从模型上来说,RoBERTa基本没有什么太大创新,主要是在BERT基础上做了几点调整:
训练时间更长,batch size更大,训练数据更多。
移除了NSP任务。
训练序列更长。
动态调整Masking机制,一开始把预训练的数据复制10份,每一份都随机选择15%的Tokens进行Masking,也就是说,同样的一句话有10种不同的mask方式。然后每份数据都训练N/10个epoch。这就相当于在这N个epoch的训练中,每个序列的被mask的tokens是会变化的。
DistilBERT
DistilBERT, a distilled version of BERT: smaller, faster, cheaper and lighter, Victor Sanh et al.
Bert是12层transformer encode,Distilled BERT是6层transformer encode,Distilled BERT没有进行自己的预训练,而是将bert的部分参数直接加载到Distilled BERT结构中作为初始化,再进行知识蒸馏。
XLM
Cross-lingual Language Model Pretraining, Guillaume Lample and Alexis Conneau
XLM提出了两个创新点:一个是用BERT训练多语言文本分类、另一个是用BERT初始化机器翻译模型。
尽管BERT的训练语料超过100种语言,它的模型本身并没有针对多语言进行优化——大多数词汇没有在语言间共享,因此能学到的跨语言知识是很有限的。针对这一点,XLM模型在以下方面修正了BERT:
首先,XLM的模型输入用了字节对编码(BPE)而不是用字符或词语。BPE把输入按所有语言中最常见的词片段(sub-words)进行切分,以此来增加跨语言共享的词汇。
其次,XLM以下面两个方式升级了BERT的模型结构:
1、XLM的每个训练样本包含含义相同语言不同的两条句子,而不是像BERT中一条样本仅来自同一语言。BERT的目标是预测被遮住的token。
XLM模型中,我们可以对每组句子,用一个语言的上下文信息去预测另一个语言被遮住的token。因为句子对中不同的随机词语会被遮住,模型可以利用翻译信息去预测token。
2、模型也接受语言ID和不同语言token的顺序信息,也就是位置编码。这些新的元数据能帮模型学习到不同语言的token间关系。
XLM-RoBERTa
Unsupervised Cross-lingual Representation Learning at Scale, Alexis Conneau et al.
在XLM方法上使用RoBERTa技巧,但不使用翻译语言建模目标。
ELECTRA
ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators, Kevin Clark et al.
ELECTRA最主要的贡献是提出了新的预训练任务和框架,把生成式的Masked language model(MLM)预训练任务改成了判别式的Replaced token detection(RTD)任务,判断当前token是否被语言模型替换过。
Funnel Transformer
Funnel-Transformer: Filtering out Sequential Redundancy for Efficient Language Processing, Zihang Dai et al.
Funnel Transformer提出一种简单但有效的提高Transformer处理长序列效率的方法:随着模型加深,使用池化操作压缩在序列方向上的长度,让模型变窄,从而节约高层的参数量,直到最后得到单个向量(或几个,取决于任务)。于是,这单个向量就可以直接用于句子级别的任务,如文本分类。
但是,这样的模型就不能用于token级别的任务了,比如问答等。为此,本文又在最后加上一个Decoder,将最后得到的单个向量上采样,从而恢复到原来的序列长度。
这样一来,将相当于压缩了整个模型的中间部分,而保持开始和结束层的长度不变,也就可以像原始Transformer一样用于各类任务了。
Longformer
Longformer: The Long-Document Transformer, Iz Beltagy et al.
Longformer,改进了Transformer的传统attention机制:对于每一个token,只对固定窗口大小的附近token计算local attention,并结合具体任务,计算少量的global attention。该方法的优点包括:
复杂度低,将attention机制的复杂度降至O(n)
通用性强,可用于各类文档级任务
部署容易,作者在cuda内核上直接实现了Longformer的attention pattern,并提供了开源代码
序列到序列模型
如前所述,这些模型保留原始Transformer的编码器和解码器。
BART
BART: Denoising Sequence-to-Sequence Pre-training for Natural Language Generation, Translation, and Comprehension, Mike Lewis et al.
具有编码器和解码器的序列到序列模型。编码器解析被遮盖掉某些单词的文本,解码器遮盖掉将来的单词。对于编码器,在预训练任务上,将应用以下转换方式的组合:
随机遮盖单词(例如BERT)
删除随机单词
用单个掩码遮盖k个单词的范围
打乱句子顺序
旋转文档以使其从特定标记开始
T5
Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer, Colin Raffel et al.
使用传统的Transformer,为了能够处理所有NLP任务,使用特定的前缀将它们转换为 text-to-text 的问题:“摘要:”,“问题:”,“将英语翻译为德语:”等等。预训练包括监督训练和自监督训练。
监督训练:对GLUE和SuperGLUE基准测试提供的下游任务进行有监督的训练。
自监督训练:与Bert一样的MLM任务。
MBart
Multilingual Denoising Pre-training for Neural Machine Translation by Yinhan Liu, Jiatao Gu, Naman Goyal, Xian Li, Sergey Edunov Marjan Ghazvininejad, Mike Lewis, Luke Zettlemoyer.
模型架构和预训练目标与BART相同,但是MBart受25种语言训练,适用于有监督和无监督的机器翻译。
参考
https://huggingface.co/transformers/model_summary.html#axial-pos-encoding