1 为什么需要预训练模型
复旦大学邱锡鹏教授发表了一篇NLP预训练模型综述,“Pre-trained Models for Natural Language Processing: A Survey”,从多个角度分析了当前预训练语言模型。本文基于这篇文章来分析。邱老师认为预训练模型有三大优势
预训练模型从大规模语料中学习知识,对下游任务帮助很大
预训练提供了一种更好的参数初始化方式,使得在目标任务上泛化能力更好,收敛速度更快
预训练可以认为是一种正则化手段,可以防止模型在小数据集上过拟合。
2 预训练简史
预训练语言模型到目前分为两个阶段
预训练word embeddings。这个阶段只训练词向量,而且是静态的,是一种feature-base方式。典型例子为word2vec, glove。利用词向量进行token embedding,然后送入模型中。模型设计百花齐放,但主要以LSTM为主。
预训练上下文编码器。这个阶段基于上下文动态学习embedding和encoding。典型例子为ELMO、GPT、BERT。
3 预训练任务
目前大部分都是基于自监督学习来构建的,又分为基于上下文学习和对比学习两类。
3.1 上下文学习
语言模型LM
语言模型一般指的是自回归语言模型,由上文利用最大似然估计,来预测下文。典型代表就是GPT
掩码语言模型 MLM
类似于完形填空,先在原始语句中mask一部分token,然后predict他们。BERT中采用的就是这种方式。这种方法有两个比较大的问题
pretrain阶段人为引入了mask,但fine-tune阶段不存在mask,导致两阶段不一致。为了减缓这个影响,BERT提出了三种mask方式,替换为[mask]、替换为其他token、保持不变,三者比例为80%、10%、10%。
不同于LM,MLM每次只能对mask位置的token进行predict,大大降低了训练效率和模型收敛速度,使得训练更耗时。
在seq2seq结构中,也有人尝试使用了MLM,也就是Seq2Seq MLM。在该结构中,encoder中的语句加入了mask,而在decoder中则需要生成这些mask。Seq2Seq MLM特别适合在生成任务中使用,比如摘要、翻译、问答等。MASS和T5中就是用了这种方法。
针对MLM预训练任务,很多文章进行了不同角度的优化,主要包括
SpanBERT以span masking的方式,对连续token进行mask。从而可以学到span级别的信息。
Roberta采用了dynamic masking动态掩码,将语料复制为10份,每一份一种随机mask,从而加入了一定的信息增益。
ERNIE(baidu)对实体和短语进行mask,从而使模型学到了实体和短语知识,也可以认为是一种引入外部知识的方式。
StructBERT在span内打乱了token顺序,然后进行重构。提升了任务难度,并整合了语言结构。
XLM构建了两个不同语言的基于机器翻译语料的sequence,在它的基础上进行MLM,从而提升了模型多语言理解能力。
排列语言模型 PLM
针对于BERT预训练和精调两阶段不一致的问题,XLNet提出了排列语言模型,从而将auto-encoder转变为了auto-regression。利用attention-mask和双流自注意力来实现。
去噪自编码器 Denoising Autoencoder (DAE)
MLM就是一种DAE。向原始语料中添加噪声,利用这些包含噪声的语料,来重构不含噪声的输入。添加噪声的方法主要有:mask token、删除token、填充文本、句子排列、文本换位。
3.2 对比学习 Contrastive Learning (CTL)
CTL的思想是 “learning by comparison”, 它假定观测文本比随机采样的文本,语义更加相似。一般CTL任务比MLM简单一些,需要的算力也更少。
Replaced Token Detection (RTD)
ELECTRA提出了这个任务,判断sequence中每个token是否和原始token一致。它是一个二分类任务,label为replaced和original。通过这种方式,使得每个token都可以参与到prediction中,大大加快了模型收敛速度。
Next Sentence Prediction (NSP)
BERT提出了这个任务,正样本为来自同一文档的两个连续语句,负样本为不同文档的两个语句。NSP的初衷是让模型学习到sentence level的信息,对NLI等句子关系判断的任务有帮助。但目前基本认为NSP反而会有副作用,主要原因为
NSP的负样本来自不同文档,差异过大,任务过于简单,导致模型参数训练不充分。
NSP将两句话构成一个pair,会减小单个语句的长度。而越长的语句,信息量越大,可以提升模型效果
NSP的负样本来自不同文档,利用不同文档的语句来预测MLM,容易给MLM带来较大的噪声。
Sentence Order Prediction (SOP)
ALBERT提出了这个任务,语句顺序预测。一个pair的两个文本,不论正负样本,都来自同一文档。正样本为AB,负样本为BA。模型需要预测语句顺序。这个方法克服了MLM噪声引入问题,也使得模型从基于NSP的主题预测变为了基于SOP的语句关系预测,大大增加了任务难度,从而使模型参数训练更充分。
根据是否基于上下文、模型架构、预训练任务、扩展方法分为四大类。如上所示。
是否基于上下文:第一代不基于上下文,是静态的word embedding。如word2vec、glove。第二代之后的基本就都是基于上下文的了
模型架构:分为LSTM、Transformer encoder、Transformer decoder、Transformer。
预训练任务:上文详细分析了
扩展方法。比如知识增强、多语言、特定语言、多模态、特定领域、模型轻量化等。
比较有代表性的一些模型如下表
5 总结
本系列针对预训练语言模型和优化方法进行深入分析,并介绍一些有代表性的模型,以加深理解。主要如下
NLP预训练模型1 – 综述 。以邱锡鹏老师的文章,分析为什么使用预训练模型,预训练模型如何分类等。
NLP预训练模型2 – BERT详解和源码分析。最重要的一个预训练模型,没有之一。我们从模型架构、源码解析、实验结果三个维度详细的分析。BERT也是我们理解其他模型的重中之重,其他基本都是围绕它来进行优化的。对BERT的源码也要有深入的研究,这样才能对细节体会更深。
NLP预训练模型3 – 预训练任务优化(ERNIE、SpanBERT)。预训练任务的优化可以带来模型效果的极大提升,这一块集结了众多优化模型和论文,所以我们最先分析。
NLP预训练模型4 – 训练方法优化(RoBERTa、T5)。增加数据语料,优化模型超参,也能带来较大的效果提升。这一块的玩家基本都是不缺钱的大金主,因为要做很多对比实验,都是需要极大算力支持的。我们也带来了两个大力出奇迹的模型,RoBERTa和T5
NLP预训练模型5 – 模型结构优化(XLNet、ALBERT、ELECTRA)。优化模型结构相对来说比较fancy和有创新性,也比较容易发文章,也能带来极大的performance提升和算力需求降低。我们带来了三个创造力十足的模型,XLNet、ALBERT、ELECTRA
NLP预训练模型6 – 模型轻量化(ALBERT、Q8BERT、DistillBERT、TinyBERT等)。模型压缩和加速,始终是工业界落地中的关键话题。我们从结构优化、量化、剪枝、蒸馏四个角度来分析,如何对BERT进行轻量化。带来了四个经典模型,ALBERT、Q8BERT、DistillBERT、TinyBERT