©PaperWeekly 原创 · 作者|王馨月
学校|四川大学本科生
研究方向|自然语言处理
随深度学习的发展,多种神经网络都被应用在 NLP 任务中,比如 CNN、RNN、GNN 和 attention 机制等,但由于现有的数据集对于大部分有监督 NLP 任务来说都很小,因此,早期的模型对 NLP 任务来说都很“浅”,往往只包含 1-3 层。
而预训练模型(Pre-trained Models, PTMs)的出现将NLP带入一个新的时代,更“深”的模型和训练技巧的增强也使得 PTMs 由“浅”变“深”,在多项任务都达到了 SOTA 性能。
近日,复旦大学的邱锡鹏老师等人发布了预训练模型综述 Pre-trained Models for Natural Language Processing: A Survey,从背景、分类到应用与前景对 PTMs 做了详细而全面的调研。
论文标题:Pre-trained Models for Natural Language Processing: A Survey
论文链接: https://arxiv.org/abs/2003.08271
对于语言来说,一个好的表示应当描绘语言的内在规则比如词语含义、句法结构、语义角色甚至语用。
而分布式表示的核心思想就是通过低维实值向量来描述一段文本的意义,而向量的每一个维度都没有对于意义,整体则代表一个具体的概念。图 1 是 NLP 的通用神经体系架构。
有两种 embedding(词嵌入)方式:上下文嵌入和非上下文嵌入,两者的区别在于词的 embedding 是否根据词出现的上下文动态地改变。
非上下文嵌入:表示语言的第一步就是将分离的语言符号映射到分布式嵌入空间中。也就是对于词汇表中的每个单词(词根),通过 lookup table 映射到一个向量。
这种嵌入方式有两个局限:一是一个词通过这种方法获得的词嵌入总是静态且与上下文无关的,无法处理多义词;二是难以解决不在词汇表中的词(针对这个问题,很多 NLP 任务提出了字符级或词根级的词表示,如 CharCNN、FastText、Byte-Pair Encoding (BPE))。
上下文嵌入:为解决多义性和上下文相关的问题,将词在不同上下文的语义做区分。通过对词(词根)的 token 加一层 Neural Contextual Encoder(神经上下文编码器)得到词的上下文嵌入。
如图 2 中所示,大部分的神经上下文编码器都可以被分为三类:卷积模型、序列模型、基于图的模型。
卷积模型 :卷积模型通过卷积操作将输入句子中的 embeddings 与其相邻的局部信息集成。
序列模型 :序列模型通常使用 RNN(如 LSTM 和 GRU)来描述词的上下文表示。实践中,双向 RNN 常用于收集词的两边信息,但表现往往会受到长程依赖问题的影响。
基于图的模型 :基于图的模型将词视做节点,通过预先定义的语言结构(如句法结构和语义联系)来学习上下文表示。但如何构造一个好的图结构往往严重依赖于专家知识和外部 NLP 工具,如依存分析器。
实际操作中往往直接通过一个全连接图来建模并让模型自己学习结构(一般通过自注意力机制)。一个典型的成功运用就是 Transformer。
分析:卷积模型和序列模型都很难解决词之间的长程依赖问题,而 Transformer 虽然能更好地描述词之间的深层联系,却往往需要非常大的语料来训练,且容易在中等规模的数据集上过拟合。
正如上文提到的,模型参数的数量增长迅速,而为了训练这些参数,就需要更大的数据集来避免过拟合,而大规模的标注数据集成本又非常高。而相比之下,大规模未标注的语料却很容易构建。
为了利用大量的未标注文本数据,我们可以先从其中学习一个好的表示,再将这些表示用在别的任务中。这一通过 PTMs 从未标注大规模数据集中提取表示的预训练过程在很多 NLP 任务中都取得了很好的表现。
预训练的优点可以总结为以下三点:1 在大规模语料上通过预训练学习通用语言表示对下游任务很有帮助;2) 预训练提供了更好的模型初始化参数,使得在目标任务上有更好的泛化性能和更快的收敛速度;3) 预训练是一种有效的正则化方法,能够避免在小数据集上过拟合。
PTMs 的主要区别在于上下文编码器的使用、预训练任务和目标。上下文编码器已在 2.2 中做了叙述,接下来对预训练任务进行分析,并提出一种 PTMs 分类方法。
如图 3,这一部分内容作者在文中有一张非常详细的分类图可供参考。
表 1 从多个角度区分了文中提到的一些 PTMs。
3.1 预训练任务
PTMs 按照预训练任务类型可以被分为两类:有监督学习、无监督学习/自监督学习。
有监督学习的预训练任务主要有机器翻译 (MT),典型的模型是 CoVe。而下文进一步根据实现思路将自监督/无监督任务分为两类,一是基于上下文的 (LM, DAE, PLM),二是基于对比的 (CTL)。
作为 NLP 中最常见的无监督任务,LM 一般指自回归 LM (auto-regressive LM) 或者单向 LM (unidirectional LM)。具体训练过程是基于一个大的语料,通过最大似然估计 (MLE) 训练计算一个句子出现的概率。
然而单向 LM 的缺点则是只能编码一个词左侧的文本和其自身,而更好的上下文应该编码左右两侧的文本。针对这一缺点,解决方案是双向 LM (BiLM),即一个从左到右和一个从右到左的模型的组合。
这里将原文中 Masked Language Modeling (MLM) 与 DAE 合并为一个部分,因为一般将 BERT 中提出的 MLM 看作是基于 DAE 的思路实现的。
DAE 的目的是通过向输入文本中添加噪声,利用含噪声的样本去重构不含噪声的输入。主要有五个实现方式:挡住 (MASK) token、删除 token、填充 token、句子排列、文本轮换。
MLM 随机选出一些词用 [MASK] 标记,然后去预测被 MASK 的词。但由于被 MASK 的词并不出现在 fine-tuning 的过程中,会导致预训练和微调的过程出现不一致性。针对这种情况,BERT 通过 80% [MASK],10% 随机 token,10% 原 token 的方式来进行 mask。
而 MLM 的一种变体,Seq2SeqMLM,则是通过将 encoder-decoder (Seq2Seq) 应用到 MLM 上,这种变体有利于 Seq2Seq 类型的下游任务,比如 QA,总结和机器翻译。这一结构主要用在 MASS 和 T5 中。
而在 BERT 之后的很多论文都对 MLM 做了一些改进以增强性能,作者将其总结为 E-MLM (Enhanced Masked Language Modeling)。
其中 RoBERTa 使用动态 masking,UniLM 将对 mask 的预测扩展到三种任务:单向、双向和 Seq2Seq。XLM 通过一种串联并行双语句对叫做 TLM (translation language modeling) 的模型实现 MLM。
而 SpanBERT 和 StructBERT 则是引入了结构化信息。而 ERINE (Baidu) 则是选择 MASK 实体和短语,E-BERT 和 ERINE (THU) 则是利用了实体 embedding 方法,这三者都是借助了外部知识来丰富 MLM。
针对 MLM 中使用 MASK 导致的预训练与微调过程的不一致,Permuted Language Modeling (PLM) 对于一个给定序列,生成其所有可能排列进行采样作为训练的目标。值得注意的是,PLM 并不改变原始文本的位置,而是重新定义 token 预测的顺序。
CTL (Contrastive Learning) 基于一种“learning by comparison”的思路,假设某些观测文本对比随机采样文本在语义上更相似,通过构建正样本和负样本并度量距离来实现学习。CTL 通常比 LM 具有更少的计算复杂度,也因此成为一个值得选择的 PTMs 训练标准。
DIM 最初是在 CV 领域提出的用于最大化图像全局特征与局部特征之间的互信息(Mutual Information)的方法。
InfoWord 将 DIM 引入到语义表达学习中,提出用 DIM objective 以最大化句子的全局表示和一个 N-gram 的具备表示之间的互信息。
噪声对比估计(Noise-Contrastive Estimation,NCE)通过训练一个二元分类器来区分真实样本和假样本,训练词嵌入。NCE 的思想也被用在 word2vec 中。
RTD 和 NCE 大体相同,根据上下文来预测 token 是否替换。
CBOW 的 negetive sampling 就可以看作是一个 RTD 的简单版本,其中采样是根据词汇表中的分布进行采样。
ELECTRA 基于 RTD 提出了一种新的 generator-discriminator 框架。首先用 MLM 任务训练 generator,再用 generator 的权重初始化 discriminator,再用判别任务(判别哪些 token 被 generator 替换过)训练 discriminator。
最终在下游任务只需要对 discriminator 进行 fine-tuning。TRD 也是一种很好的解决 MLM 导致的不一致问题的方法。
WKLM 则是通过在实体层面(entity-level)进行词替换,替换为同一个实体类型的实体名。
NSP 训练模型区分两个输入语句是否为训练语料中连续的片段,在选择预训练句对时,第二个句子 50% 是第一个句子实际的连续片段,50% 是语料中的随机段落。NSP 能够教会模型理解两个输入句子之间的联系,从而使得如 QA 和 NLI 这种对此类信息敏感的下游任务受益。
然而,近来 NSP 的必要性也遭到了质疑,XLNet 的作者发现不用 NSP loss 的单句训练优于使用 NSP 的句对训练。RoBERTa 的作者进一步分析表明:在对单个文本中的文本块训练时,去除 NSP 会在下游任务稍微提高性能。
NSP 结合了主题预测相关性预测,而因为主题预测更容易,模型将更依赖于主题预测。为更好建模句子之间的相关性,ALBERT 提出使用 SOP loss 替换 NSP loss,SOP 使用一个文档中的两个连续片段作为正样本,将这两个片段交换顺序作为负样本。
采用了 SOP 的 ALBERT 在多项下游任务中结果都优于 BERT。StructBERT 和 BERTje 也使用 SOP 作为自监督学习任务。
通常 PTMs 都是用大量语料训练通用的语言表示,而将外部的领域知识引入到 PTMs 被证明式有效的。自 BERT 以来,就有很多预训练任务用以将外部知识纳入 PTMs,如:
LIBERT:linguistically-informed BERT ,通过附加语言约束任务纳入了语言知识。
SentiLR:通过对每个单词添加情感极性,将 MLM 拓展至 Label-Aware MLM (LA-MLM),在多个情感分类任务达到 SOTA。
SenseBERT:不仅能预测被 mask 的 token,还能预测 WordNet 中的 supersense。
ERINE (THU):将知识图谱中预训练的实体嵌入与文本中相应的实体提及相结合,以增强文本表示。
KnowBERT:端到端将带实体连接模型与实体表示集成。
KEPLER:将知识嵌入和语言模型对象联合。
K-BERT:不同于以上几个模型通过实体嵌入引入知识图谱中的结构化信息,K-BERT 通过直接将知识图谱中相关三元组引入句子,获得一个 BERT 的拓展的树形输入。
K-Adapter:针对不同预训练任务独立训练不同的适配器以引入多种知识,以解决上述模型在注入多种知识出现的遗忘问题。
随 PTMs 在 NLP 领域的广泛应用,一些多模态 PTMs 也被设计出来,在一些语音、视频、图像数据集上进行了预训练,比如:
视频-语言:VideoBERT、CBT
图像-语言:用于 visual question answering (VQA) and visual commonsense reasoning (VCR),如 ViLBERT、LXMERT、VisualBERT、B2T2、VLBERT、 Unicoder-VL、UNITER
音频-文本:用于端到端 Speech Question Answering (SQA) 任务,如 SpeechBERT
大多数 PTMs 都是在 Wikipedia 这样的通用领域语料库上训练的,这就限制了他们在特定领域内的表现。
近期有一些用专业领域语料训练的 PTMs,比如:生物医学领域的 BioBERT,科学领域的 SciBERT,临床医学领域的 ClinicalBERT。还有一些工作尝试将预训练模型更好地使用目标应用,比如生物医学实体归一化、专利分类等。
学习多语言文本表示对于跨语言 NLP 任务是很重要的。早期工作着力于学习来自同一语义环境下的多语言词嵌入,这一方法往往缺乏语言间的校准。近期有如下几个多语言 PTMs:
Multilingual-BERT:M-BERT,在 Wikipedia 上 104 种种语言的文本上进行 MLM 训练,每个训练样本都是单语言的,也没有专门设计跨语言目标,但即便如此,M-BERT 在跨语言任务上表现还是非常好。
XLM:通过结合跨语言任务 TLM (translation language modeling),提升了 M-BERT 的性能。
Unicoder:提出三个跨语言预训练任务:1) cross-lingual word recovery; 2) cross-lingual paraphrase classification; 3) cross-lingual masked language model。
除此之外还有一些单语言的 PTMs:BERT-wwm,ZEN,NEZHA,ERNIE (Baidu),BERTje,CamemBERT, FlauBERT ,RobBERT 。
预训练模型往往包含至少几千万个参数,这也使得模型难以部署到生活中的线上服务以及资源有限的设备上,这就使得模型压缩成为一条可能能够压缩模型尺寸并提高计算效率的方法。表 2 展示了一些压缩的 PTMs 的对比。
压缩 PTMs 一般有四个方法:
剪枝(pruning):去除不那么重要的参数(e.g. 权重、层数、通道数、attention heads)
量化(weight quantization):使用占位更少(低精度)的参数
参数共享(parameter sharing):相似模型单元间共享参数
知识蒸馏(knowledge diistillation):用一些优化目标从大型 teacher 模型学习一个小的 student 模型,一些利用知识蒸馏的 PTMs 见表 3。
迁移学习就是将源任务中的知识适应到目标任务,将 PTMs 适应到下游任务是一种顺序迁移学习任务。那么,如何迁移呢?我们需要考虑以下几个问题:
选择合适的预训练任务:近期,LM 是最流行的预训练任务,也有效解决了很多 NLP 问题。但不同的预训练任务在不同的下游任务上有不同的效果,比如 NSP 任务能帮助 PTM 理解句子之间的关系,因此 PTM 对于 QA 和 NLI 这样的下游任务很有帮助。
选择合适的模型架构:比如 BERT 使用的 MLM 和 Transformer 结构使其擅长 NLU 任务,却很难生成语言。
选择合适的语料:下游任务的数据应该接近 PTMs 的预训练任务。
选择合适的layers:在“深”的预训练模型中,不同的 layer 往往描绘不同种类的信息。有三种选择 layers 的方式:1) 只用 Embedding,如 word2vec 和 Glove;2) Top Layer,如 BERT;3) All Layers,如 ELMo。
是否进行fine-tune:模型迁移一般有两种方法:特征提取和 fine-tuning。特征提取的参数是冻结的,且往往需要特定任务的体系结构。fine-tunig 的参数是非冻结的,比特征提取方法更为通用且方便。
自 ULMFit 和 BERT 起,fine-tuning 已经成为 PTMs 主要的适配方法。这里有一些实用的 fine-tunig 策略:
两阶段 fine-tuning:两阶段迁移的方法在预训练和 fine-tuning 阶段引入了一个中间阶段。在第一阶段,通过中间任务或语料来微调模型。在第二阶段,通过目标任务微调模型。
多任务 fine-tuning:liu等人在多任务学习框架下对 BERT 进行了微调,结果显示多任务学习和预训练是互补的方法。
采用额外的适配器 fine-tuning:fine-tuning 的主要缺点是参数效率低,在每一个下游任务上都有各自的 dine-tuning 参数。对此的解决方案是在固定原始参数时引入一些可以 fine-tuning 的适配器。
其他:逐层解冻而非连续 fine-tune 所有层;self-ensemble 和 self-distillation。
一些开源的应用:
word2vec:
https://github.com/tmikolov/word2vec
GloVe:
https://nlp.stanford.edu/projects/glove
FastText:
https://github.com/facebookresearch/fastText
Transformers:
https://github.com/huggingface/transformers
Fairseq:
https://github.com/pytorch/fairseq
Flair:
https://github.com/flairNLP/flair
AllenNLP:
https://github.com/allenai/allennlp
FastNLP:
https://github.com/fastnlp/fastNLP
Chinese-BERT:
https://github.com/ymcui/Chinese-BERT-wwm
BERT:
https://github.com/google-research/bert
RoBERTa:
https://github.com/pytorch/fairseq/tree/master/examples/roberta
XLNet:
https://github.com/zihangdai/xlnet/
ALBERT:
https://github.com/google-research/ALBERT
T5:
https://github.com/google-research/text-to-text-transfer-transformer
ERNIE (Baidu):
https://github.com/PaddlePaddle/ERNIE
相关资源:
论文列表:
https://github.com/thunlp/PLMpapers
https://github.com/tomohideshibata/BERT-related-papers
https://github.com/cedrickchee/awesome-bert-nlp
BERT Lang Street(收集 BERT 在不同数据集和任务上的表现):
https://bertlang.unibocconi.it/
BERTViz(应用 transformer 的模型的注意力可视化):
https://github.com/jessevig/bertviz
GLUE (The General Language Understanding Evaluation) 标准是一个集合了 9 个自然语言理解任务的标准。
其中包括:单个句子分类任务(CoLA和SST-2)、文本对分类任务(MNLI, RTE, WNLI, QQP, MRPC)、文本相似度任务(STSB)、相关性排行任务(QNLI)。GLUE 标准能够能够很好地评估模型的鲁棒性和通用性。
而近期 NLP 的快速发展促使了新的标准 SuperGLUE 的提出,相比 GLUE,SuperGLUE 有更多富有挑战性且多种多样的任务,如指代消解和 QA。
机器翻译(Machine Translation, MT)也是 NLP 的一项重要任务。几乎所有 MT 模型都使用了 encoder-decoder 框架。而近期随预训练模型的发展,也有不少尝试将 BERT 之类的预训练模型用于初始化 encoder,取得了一定成效。
问答系统(Question answering, QA)或是狭义概念的机器阅读理解(machine reading comprehension, MRC)也是 NLP 的重要任务。
从易到难,有三种类型的 QA 任务:单回合提取 QA (single-round extractive QA, SQuAD)、多回合生成QA (multi-round generative QA, CoQA)、多跳问答 (multi-hop QA, HotpotQA)。
针对提取 QA,有通过 PTM 初始化 encoder 的回溯阅读架构(retrospective reader architecture);针对多回合生成 QA,有“PTM+Adversarial Training+Rationale Tagging+Knowledge Distillation”架构;针对多跳 QA,有“Select, Answer, and Explain” (SAE) 系统。
BERT 通过在广泛使用的情感分析数据集 SST-2 上进行微调后,表现超过了先前的 SOTA 模型。而后又有很多将 BERT 进行调整以应用在 aspect 级的情感分析(ABSA)任务上。
从长文本中总结出短文本也是近期 NLP 的热点。也有很多尝试将 PTM 应用在总结文本任务上,如将 BERT 通过插入 [CLS] token 来学习句子表示的模型 BERTSUM。
命名实体识别(Named Entity Recognition, NER)也是知识提取的一个基础任务,在很多 NLP 任务上都有重要作用。TagLM 和 ELMo 利用预训练语言模型的最后一层的输入和各层的加权总和作为词嵌入的一部分。
随 BERT 的出现,我们可以发现,很多模型都可以通过更长的训练步长不在和更大的语料来提升性能,比如去年的 T5 使用的 C4 数据集。而我们也可以通过加深模型来提升性能,比如 Turing-NLG 使用了 72 个 transformer 层。
PTMs 的共同目标都是学习语言的本质通用知识(或者说是世界的知识),然而,随着模型的不断加深,语料的不断增大,训练模型的花销也越来越大。一种更可行的解决方案是设计更有效的模型架构、自监督预训练任务、优化器和软硬件方面的技巧等。ELECTRA 就是这个方向上一个很好的尝试。
在实践中,不同的下游任务要求 PTMs 拥有不同的功能。而 PTMs 与下游目标任务间的差异通常表现在两方面:模型架构与数据分布。较大的 PTMs 通常情况下会有更好的性能,但实际问题是如何在低容量设备和低时延应用上使用如此庞大的 PTM。
除此之外,我们可以通过模型压缩来将通用 PTMs 教给面向对象的 PTM。尽管 CV 中对 CNNs 的压缩已经非常成熟,但 Tansformer 的全连接结构使得模型压缩非常具有挑战性。
Transformer 是 PTMs 的一个高效的框架,但 Transformer 的局限在于计算复杂度。由于 GPU 显存大小的限制,目前大多数 PTM 无法处理序列长度超过 512 个 token 的序列。搭配这一限制需要改进 Transformer 的结构,如 Transformer-XL。因此,寻求更有效的模型架构对于解决长程文本信息也是很重要的。
Fine-tuning 是目前将 PTM 的知识迁移至下游任务的主要方法,但参数效率却很低,每个下游任务都有特定的 fine-tuned 参数。
一个可以改进的解决方案是固定 PTMs 的原始参数,并为特定任务添加小型的可微调的适配器,这样就可以在不同的下游任务使用共享的 PTMs。从 PTM‘s 中挖掘知识也可以更灵活,比如:知识提取、知识蒸馏、数据增加、将 PTMs 作为外部知识等等。
PTMs 的深且非线性的架构使得决策制定的过程非常不透明。近期,可解释人工智能(explainable artificial intelligence, XAI)成为热点。通过对模型词嵌入的研究我们可以分析 PTMs 中的语言和世界知识,但更多有关注意力机制的可解释性的问题还值得探讨。
PTMs 这种深模型很容易受到对抗样本的扰动而产生错误的预测。在 CV 领域,对抗攻击与防御已经被广泛学习,而由于语言的特性,文本的对抗还非常具有挑战性。PTMs 的对抗防御也对于提升 PTMs 的鲁棒性很重要。
邱锡鹏老师的这篇综述很全面地概括了预训练模型,也非常适合初学者当作一个 roadmap 来阅读。我们可以看到 NLP 的发展过程是非常令人感动的,从最开始的“要表示语言”的目标,使用词袋模型和 N-gram。
再想到“词语具有多义性”,所以需要有上下文,使用 LSTM。LSTM 只有单向,那就使用双向 LSTM。“想要更大范围的上下文”,就产生了 transformer。
“再大一些”,有了 transformer-XL。还是不够好,怎么办?“更多知识”,于是不断加大语料库,不断堆 GPU,直到 T5 探索了“Limits of Transfer Learning with a Unified Text-to-Text Transformer”。
模型太大,成本太高,那就压缩模型,改进框架,于是有了 ELECTRA。预训练模型缺乏尝试推理能力,那就知识提取,于是有了 COMET。每一步尝试都是在靠近语言的本质与世界的知识。
“The whole of science is nothing more than a refinement of everyday thinking.”
点击以下标题查看更多往期内容:
复旦大学邱锡鹏:词法、句法分析研究进展综述
深度学习预训练模型可解释性概览
Transformer的七十二变
从Word2Vec到BERT
浅谈Knowledge-Injected BERTs
后BERT时代的那些NLP预训练模型
#投 稿 通 道#
让你的论文被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学习心得或技术干货。我们的目的只有一个,让知识真正流动起来。
???? 来稿标准:
• 稿件确系个人原创作品,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向)
• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接
• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志
???? 投稿邮箱:
• 投稿邮箱:[email protected]
• 所有文章配图,请单独在附件中发送
• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通
????
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
关于PaperWeekly
PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击「交流群」,小助手将把你带入 PaperWeekly 的交流群里。