NLP预训练模型【1】 -- 总览
NLP预训练模型【1】 – 总览
【摘要】预训练模型( Pre-trained Models )的出现将NLP带入了一个全新时代。2020年3月,邱锡鹏老师发表了关于NLP预训练模型的综述《Pre-trained Models for Natural Language Processing: A Survey》1,系统地对预训练模型进行了归纳分类。
本文引自公众号「高能AI」
〇. 全文脑图
一、为什么要进行预训练?
深度学习时代,为充分训练深层模型参数并防止过拟合,通常需要更多标注数据喂养。在NLP领域,标注数据是一个昂贵资源。预训练模型从大量无标注数据中进行预训练使许多NLP任务获得显著的性能提升。总的来看,预训练模型的优势包括:
- 在庞大的无标注数据上进行预训练可以获取更通用的语言表示,并有利于下游任务;
- 为模型提供了一个更好的初始化参数,在目标任务上具备更好的泛化性能、并加速收敛;
- 是一种有效的正则化手段,避免在小数据集上过拟合(一个随机初始化的深层模型容易对小数据集过拟合)。
二、什么是词嵌入和分布式表示?预训练模型与分布式表示的关系?
(1)词嵌入
-
词嵌入是自然语言处理中语言模型与表征学习技术的统称。
-
概念上而言,词嵌入是指把一个维数为所有词数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量
-
词嵌入是一种分布式表示,向量的每一维度都没有实际意义,而整体代表一个具体概念
(2)分布式表示
- 分布式表示相较于传统的独热编码(one-hot)而言,表示具备更强的表示能力
- 独热编码存在维度灾难和语义鸿沟(不能进行相似度计算)等问题
- 传统分布式表示方法根据全局语料进行训练,是机器学习时代的产物,包括:矩阵分解(SVD/LSA)、LDA等。
(3)预训练模型
- 预训练模型属于分布式表示的范畴,本文的预训练模型主要介绍深度学习时代、自NNLM2以来的现代词嵌入。
三、预训练模型有哪两大范式?对比不同的预训练编码器?
预训练模型的发展经历从“浅层的词嵌入”到“深层编码”两个阶段,对应预训练模型两大范式:「浅层词嵌入」和「预训练编码器」。
3.1 浅层词嵌入( Non-Contextual Embeddings**)**
(1)主要特点
这一类预训练模型范式是我们通常所说的“词向量”,其主要特点是:
- 学习到的是上下文独立的静态词嵌入
- 主要代表为NNLM2、word2vec(CBOW3、Skip-Gram3)、Glove4等
- 这类词嵌入通常采取浅层网络进行训练,而应用于下游任务时,整个模型的其余部分仍需要从头开始学习。
- 因此,对于这一范式的预训练模型没有必要采取深层神经网络进行训练,采取浅层网络加速训练也可以产生好的词嵌入3。
(2)主要缺点:
- 词嵌入与上下文无关,每个单词的嵌入向量始终是相同,因此不能解决一词多义的问题。
- 通常会出现OOV问题,为了解决这个问题,相关文献提出了字符级表示或sub-word表示,如CharCNN5 、FastText6 和Byte-Pair Encoding 7。
上图给出了三种常见的浅层词嵌入之间的对比,Glove可以被看作是更换了目标函数和权重函数的全局word2vec。此外,相关文献也提出了句子和文档级别的嵌入方式,如Skip-thought8 、Context2Vec9 等。
3.2 预训练编码器(Contextual Embeddings)
第二类预训练模型范式为预训练编码器,主要目的是通过一个预训练的编码器能够输出上下文相关的词向量,解决一词多义的问题。
这一类预训练编码器输出的向量称之为「上下文相关的词嵌入」。
图2给出了NLP各种编码器间的对比。预训练模型中预训练编码器通常采用LSTM和Transformer(Transformer-XL),其中Transformer又依据其attention-mask方式分为Transformer-Encoder和Transformer-Decoder两部分。此外,Transformer也可看作是一种图神经网络GNN10。
这一类「预训练编码器」范式的预训练模型主要代表有ELMO11、GPT-112、BERT13、XLNet14等。
四、预训练模型按照任务类型如何分类?
4.1 预训练模型的分类
预训练模型按照任务类型可分为2大类:监督学习和无监督学习/自监督学习。
- 监督学习:
- 在NLP-预训练模型中的主要代表就是CoVe15,CoVe作为机器翻译的encoder部分可以应用于多种NLP下游任务。除了CoVe外,NLP中的绝大多数预训练模型属于自监督学习。
- 自监督学习
- 监督学习中的工作流程
- 首先在大量有标签数据上进行预训练(Pretrain),得到预训练的模型,然后对于新的下游任务(Downstream task),将预训练学习到的参数(比如:输出层之前的层)进行迁移,在新的有标签任务上进行「微调(Finetune)」,从而得到一个能适应新任务的网络。
- 自监督学习中的工作流程
- 首先在大量无标签数据上通过pretext来训练网络(自动在数据中构造监督信息),得到预训练模型,然后对于新的下游任务,迁移预训练得到的参数后,在新的有标签数据上进行微调即可。
4.2 自监督学习有哪些重要的方法?
对于自监督学习而言,存在三个方面挑战:
- 对于大量的无标签数据,如何进行表征/表示学习?
- 从数据的本身出发,如何设计有效的辅助任务pretext?
- 对于自监督学习到的表征,如何来评测它的有效性?
其中第3点可以通过迁移学习的下游任务性能来体现,而前两者是选择自监督方法的关键。综合各种自监督学习的分类方式,可以将NLP-预训练模型在自监督学习中分为两种类型1617:
- 基于上下文(Context Based)
- 基于对比(Contrastive Based)。
4.3 基于上下文(Context Based)的自监督学习方法
基于上下文的自监督学习方法基于数据本身上下文信息构造辅助任务,例如:通过前后的词来预测中间的词,或者通过中间的词来预测前后的词。
类似的任务在计算机视觉领域中也很常见,例如:(1)将无标签图像拆解成9部分,通过预训练实现任意图片9部分的自动拼接[93];(2)通过对无标签图像的与训练,抠掉输入图像中任意子区域时,模型能够对被抠掉的部分进行自动补全[94];(3)通过对有颜色图像的预训练,实现对无色灰度图的自动上色[95]
在NLP中我们通常引入语言模型作为训练目标。预训练模型中的语言模型主要分为三大类:
第一类:自回归语言模型(Language Model)
-
优点:
- 语言模型联合概率的无偏估计,即传统的语言模型,考虑被预测单词之间的相关性,天然适合处理自然生成任务
-
缺点:
- 联合概率按照文本序列顺序拆解(从左至右分解),无法获取双向上下文信息表征;
-
代表模型:
第二类:自编码语言模型(Denoise Auto Encoder)
-
优点:
- 本质为降噪自编码特征表示,通过引入噪声[MASK]构建MLM(Masked language model),获取双向上下文信息表征(本文将自编码语言模型统一称为DAE,旨在采用部分损坏的输入,恢复原始的未失真输入);如果当前token被预测,则 $ m_{t}=1 $ 否则 $ m_{t}=0 $ ,$ \tilde{x} $ 为原始文本被替换后的输入。
-
缺点:
- 引入独立性假设,为语言模型联合概率的有偏估计,没有考虑预测token之间的相关性;
- 预训练时的「MASK」噪声在finetune阶段不会出现,造成两阶段不匹配问题;为解决这一问题,在15%被预测的token中,80%被替换为「MASK」,10%被随机替换,10%被替换为原词。
-
代表模型:
BERT13是自编码语言模型的一个典型代表,但其采用的MLM策略和Transformer-Encoder结构,导致其不适合直接处理生成任务。为了解决这一问题,也可采用基于Seq2Seq MLM方法:encoder部分采取masked策略,而decoder部分以自回归方式预测encoder部分被mask的token。此外,还有很多基于自编码语言模型的预训练模型提出了不同的MLM增强策略,称之为Enhanced Masked Language Modeling (E-MLM) 1。
上述DAE具体的预训练模型方法见图4。
第三类:排列语言模型(Permuted Language Model,PLM)
排列语言模型综合了LM和DAE-LM两者的优点。严格来讲,PLM和LM是标准的自回归语言模型(注:PLM是一种广义的自回归方法14),而MLM不是一个标准的语言模型,其引入独立性假设,隐式地学习预测token(mask部分本身的强相关性)之间的关系。
如果衡量序列中被建模的依赖关系的数量,标准的自回归语言模型可以达到上界,不依赖于任何独立假设。LM和PLM能够通过自回归方式来显式地学习预测token之间的关系。然而,LM无法对双向上下文进行表征,借鉴NADE32的思想,PLM将这种传统的自回归语言模型(LM)进行推广,将顺序拆解变为随机拆解(从左至右分解),产生上下文相关的双向特征表示。
PLM最为典型的代表就是XLNet14,这是对标准语言模型的一个复兴33:提出一个框架来连接标准语言模型建模方法和预训练方法。
一个关键问题:
-
为什么PLM可以实现双向上下文的建模?**PLM的本质就是语言模型联合概率的多种分解机制的体现,其将LM的顺序拆解推广到随机拆解。**PLM没有改变原始文本序列的自然位置,只是定义了token预测的顺序。PLM只是针对语言模型建模不同排列下的因式分解排列,并不是词的位置信息的重新排列。
最后,我们对基于上述三类语言模型的预训练模型进行总结:
4.3 基于对比(Contrastive Based)的自监督模型
基于对比(Contrastive Based),不同于Context Based主要基于数据本身的上下文信息构造辅助任务,Contrastive Based主要利用样本间的约束信息构造辅助任务,这类方法也是Contrastive learning34(CTL)。
CTL假设观察到的文本对(正样本)在语义上比随机采样的文本(负样本)更相似。CTL背后的原理是「在对比中学习」。相较于语言建模,CTL的计算复杂度更低,因而在预训练中是理想的替代训练标准。
CTL通过构建正样本(positive)和负样本(negative),然后度量正负样本的距离来实现自监督学习17:可以使用点积的方式构造距离函数,然后构造一个softmax分类器,以正确分类正样本和负样本。鼓励相似性度量函数将较大的值分配给正例,将较小的值分配给负例:
相似性度量函数通常可采取两种方式:$ s(x,y)=f_{enc(x)}^{T}f_{enc(x)}$ 或 $ s(x,y)=f_{enc}(x\oplus+y) $
第一类: Deep InfoMax (DIM)
DIM方法来源于CV领域,对于全局的特征(编码器最终的输出)和局部特征(编码器中间层的特征),DIM需要判断全局特征和局部特征是否来自同一图像17。InfoWord 35将DIM引入到NLP中,用Mutual Information的一个下界InfoNCE来重新解释BERT和XLNET的objective,并提出一个新的DIM objective以最大化一个句子的global representation和其中一个ngram的local representation之间的Mutual Information。
第二类:Replaced Token Detection (RTD)
噪声对比估计(Noise-Contrastive Estimation,NCE)36通过训练一个二元分类器来区分真实样本和假样本,可以很好的训练词嵌入。RTD于与NCE相同,根据上下文语境来预测token是否替换 。
- word2vec3中的negative sampling可看作是RTD,负样本从词表中进行带权采样。
- ELECTRA37提出了一种新的预训练任务框架,构建生成器-判别器,生成器通过MLM任务对被mask的token进行预测,迭代器判断原始句子中的每个token是否被replace过。生成器相当于对输入进行了筛选,使判别器的任务更难,从而学习到更好的表示。生成器-判别器共享embedding,生成器部分采用small-bert,判别器部分对每一个token采用sigmoid计算loss。finetune阶段只采用判别器部分。RTD也被看作解决MLM中「MASK」在预训练和finetune间差异的一种手段。
- WKLM38在实体level进行替换,替换为具有相同实体类型的实体名称。
第三类:Next Sentence Prediction (NSP)
NSP区分两个输入句子是否为训练语料库中的连续片段,第二个句子50%为第一句子实际的连续片段,50%从其他语料随机选择。NSP可以引导模型理解两个输入句子之间的关系,从而使对此信息敏感的下游任务受益,如QA任务。而RoBERTa23表明:NSP在对单个文档中的文本块进行训练时,去除NSP任务或在下游任务上可以稍微提高性能。
第四类:Sentence Order Prediction (SOP)
SOP使用同一文档中的两个连续片段作为正样本,而相同的两个连续片段互换顺序作为负样本。NSP融合了主题预测和相关性预测,主题预测更容易,这使得模型进行预测时仅依赖于主题学习。与NSP不同,SOP使用同一文档中的两个连续段作为正样本,但顺序互换为负样本。采取SOP任务的预训练模型有ALBERT39、StructBERT40、BERTje41。
图5对上述基于对比(Contrastive Based)的四类预训练模型进行了总结:
五、预训练模型有哪些拓展?
5.1 引入知识
预训练模型通常从通用大型文本语料库中学习通用语言表示,但是缺少特定领域的知识。预训练模型中设计一些辅助的预训练任务,将外部知识库中的领域知识整合到预训练模型中被证明是有效的1。
- ERNIE-THU30将在知识图谱中预先训练的实体嵌入与文本中相应的实体提及相结合,以增强文本表示。由于语言表征的预训练过程和知识表征过程有很大的不同,会产生两个独立的向量空间。为解决上述问题,在有实体输入的位置,将实体向量和文本表示通过非线性变换进行融合,以融合词汇、句法和知识信息。
- LIBERT42(语言知识的BERT)通过附加的语言约束任务整合了语言知识。
- SentiLR43集成了每个单词的情感极性,以将MLM扩展到标签感知MLM(LA-MLM),ABSA任务上都达到SOTA。
- SenseBERT44 不仅能够预测被mask的token,还能预测它们在给定语境下的实际含义。使用英语词汇数据库WordNet作为标注参照系统,预测单词在语境中的实际含义,显著提升词汇消歧能力。
- KnowBERT45 与实体链接模型以端到端的方式合并实体表示。
- KG-BERT46显示输入三元组形式,采取两种方式进行预测:构建三元组识别和关系分类,共同优化知识嵌入和语言建模目标。这些工作通过实体嵌入注入知识图的结构信息。
- K-BERT47将从KG提取的相关三元组显式地注入句子中,以获得BERT的扩展树形输入。
- K-Adapter48通过针对不同的预训练任务独立地训练不同的适配器来注入多种知识,从而可以不断地注入知识,以解决注入多种知识时可能会出现灾难性遗忘问题。
- 此外,这类预训练模型还有WKLM38、KEPLER49和50等。
5.2 模型压缩
由于预训练的语言模型通常包含至少数亿个参数,因此很难将它们部署在现实应用程序中的在线服务和资源受限的设备上。模型压缩是减小模型尺寸并提高计算效率的有效方法。
5种预训练模型的压缩方法为:
-
pruning(剪枝):将模型中影响较小的部分舍弃。
-
quantization(量化):将高精度模型用低精度来表示;
-
parameter sharing(参数共享):相似模型单元间的参数共享;
- ALBERT39主要是通过矩阵分解和跨层参数共享来做到对参数量的减少。
-
module replacing(模块替换):
- BERT-of-Theseus55根据伯努利分布进行采样,决定使用原始的大模型模块还是小模型,只使用task loss。
-
knowledge distillation(知识蒸馏):通过一些优化目标从大型、知识丰富、fixed的teacher模型学习一个小型的student模型。蒸馏机制主要分为3种类型:
5.3 多模态
随着预训练模型在NLP领域的成功,许多研究者开始关注多模态领域的预训练模型,主要为通用的视觉和语言特征编码表示而设计。多模态的预训练模型在一些庞大的跨模式数据语料库(带有文字的语音、视频、图像)上进行了预训练,如带有文字的语音、视频、图像等,主要有VideoBERT63、CBT64 、UniViLM65、 ViL-BERT66 、 LXMERT67、 VisualBERT 68、 B2T269 、Unicoder-VL70 、UNITER 71、 VL-BERT72 、 SpeechBERT73。
5.4 领域预训练
大多数预训练模型都在诸如Wikipedia的通用语料中训练,而在领域化的特定场景会收到限制。如基于生物医学文本的BioBERT74,基于科学文本的SciBERT75,基于临床文本的Clinical-BERT76。一些工作还尝试将预训练模型适应目标领域的应用,如医疗实体标准化77、专利分类PatentBERT 78、情感分析SentiLR79关键词提取80。
5.5 多语言和特定语言
学习跨语言共享的多语言文本表示形式对于许多跨语言的NLP任务起着重要的作用。
- Multilingual-BERT81在104种Wikipedia文本上进行MLM训练(共享词表),每个训练样本都是单语言文档,没有专门设计的跨语言目标,也没有任何跨语言数据,M-BERT也可以很好的执行跨语言任务。
- XLM25通过融合跨语言任务(翻译语言模型)改进了M-BERT,该任务通过拼接平行语料句子对进行MLM训练。
- Unicoder82提出了3种跨语言预训练任务:1)cross-lingual word recovery;2) cross-lingual paraphrase classification;3) cross-lingual masked language model.
虽然多语言的预训练模型在跨语言上任务表现良好,但用单一语言训练的预训练模型明显好于多语言的预训练模型。此外一些单语言的预训练模型被提出:BERT-wwm83, ZEN84, NEZHA85 , ERNIE-Baidu2728, BERTje86, CamemBERT87, FlauBERT 88, RobBERT 89。
六、如何对预训练模型进行迁移学习?
预训练模型从大型语料库中获取通用语言知识,如何有效地将其知识适应下游任务是一个关键问题。迁移学习的方式主要有归纳迁移(顺序迁移学习、多任务学习)、领域自适应(转导迁移)、跨语言学习等。
NLP中预训练模型的迁移方式是顺序迁移学习。
6.1 如何迁移?
1)选择合适的预训练任务
- 语言模型是预训练模型是最为流行的预训练任务;同的预训练任务有其自身的偏置,并且对不同的任务会产生不同的效果。例如:NSP任务可以使诸如问答(QA)和自然语言推论(NLI)之类的下游任务受益。
2)选择合适的模型架构
- 例如BERT采用的MLM策略和Transformer-Encoder结构,导致其不适合直接处理生成任务。
3)选择合适的数据
- 下游任务的数据应该近似于预训练模型的预训练任务,现在已有有很多现成的预训练模型可以方便地用于各种特定领域或特定语言的下游任务。
4)选择合适的layers进行transfer
- 主要包括Embedding迁移、top layer迁移和all layer迁移。如word2vec和Glove可采用Embedding迁移,BERT可采用top layer迁移,Elmo可采用all layer迁移。
5)特征集成还是fine-tune?
- 对于特征集成预训练参数是freeze的,而fine-tune是unfreeze的。特征集成方式却需要特定任务的体系结构,fine-tune方法通常比特征提取方法更为通用和方便。
6.2 fine-tune策略
通过更好的微调策略进一步激发预训练模型性能
-
两阶段fine-tune策略:
- 如第一阶段对中间任务或语料进行finetune,第二阶段再对目标任务fine-tune。第一阶段通常可根据特定任务的数据继续进行fine-tune预训练。
-
多任务fine-tune:
- MTDNN90在多任务学习框架下对BERT进行了fine-tune,这表明多任务学习和预训练是互补的技术。
-
采取额外的适配器:
- fine-tune的主要缺点是其参数效率低,每个下游任务都有自己的fine-tune参数。因此,更好的解决方案是在固定原始参数的同时,将一些可fine-tune的适配器注入预训练模型。
-
逐层阶段:
- 逐渐冻结而不是同时对所有层进行fine-tune,也是一种有效的fine-tune策略。
七、预训练模型还有哪些问题需要解决?
(本部分来自91,有删减和修正)
虽然预训练模型已经在很多NLP任务中显示出了他们强大的能力,然而由于语言的复杂性,仍存在诸多挑战。综述论文给出了五个未来预训练模型发展方向的建议。
7.1 预训练模型的上限
目前,预训练模型并没有达到其上限。大多数的预训练模型可通过使用更长训练步长和更大数据集来提升其性能。目前NLP中的SOTA也可通过加深模型层数来更进一步提升。这将导致更加高昂的训练成本。因此,一个更加务实的方向是在现有的软硬件基础上,设计出更高效的模型结构、自监督预训练任务、优化器和训练技巧等。例如, ELECTRA 37就是此方向上很好的一个解决方案。
7.2 面向任务的预训练和模型压缩
在实践中,不同的目标任务需要预训练模型拥有不同功能。而预训练模型与下游目标任务间的差异通常在于两方面:模型架构与数据分布。尽管较大的预训练模型通常情况下会带来更好的性能表现,但在低计算资源下如何使用是一个实际问题。例如,对于NLP的预训练模型来说,对于模型压缩的研究只是个开始,Transformer的全连接架构也使得模型压缩具有挑战性。
7.3 预训练模型的架构设计
对于预训练模型,Transformer已经被证实是一个高效的架构。然而Transformer最大的局限在于其计算复杂度(输入序列长度的平方倍)。受限于GPU显存大小,目前大多数预训练模型无法处理超过512个token的序列长度。打破这一限制需要改进Transformer的结构设计,例如Transformer-XL92。
7.4 finetune中的知识迁移
finetune是目前将预训练模型的知识转移至下游任务的主要方法,但效率却很低,每个下游任务都需要有特定的finetune参数。一个可以改进的解决方案是固定预训练模型的原始参数,并为特定任务添加小型的finetune适配器,这样就可以使用共享的预训练模型服务于多个下游任务。
7.5 预训练模型的解释性与可靠性
预训练模型的可解释性与可靠性仍然需要从各个方面去探索,它能够帮助我们理解预训练模型的工作机制,为更好的使用及性能改进提供指引。
总结
- 本文定义了预训练模型两大范式:浅层词嵌入和预训练编码器。不同于原文,XLNet在原综述论文中被归为Transformer-Encoder,本文认为将其归为Transformer-XL更合适。
- 本文预训练模型按照自监督学习的分类不同于原文。本文按照基于上下文(Context Based)和基于对比(Contrastive Based)两种方式归类;将原文的LM、MLM、DAE、PLM归为Context Based;
- 本文将原文MLM和DAE统一为DAE;
- 其他:1)在3.1.2的E-MLM段落中,可以将StructBERT拿出来,只放在SOP;2)3.1.5对ELECTRA的描述,应采取ELECTRA原文中的主要方法(参数共享),两阶段的方法只是一种实验尝试;3)在puring部分可以补充LayerDrop;4)应将UniLM归为MLM;;
参考文献
-
Pre-trained Models for Natural Language Processing: A Surveyhttps://arxiv.org/abs/2003.08271v2
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.