PTM 通常是基于大规模文本语料训练通用的语言表示,而缺乏领域特定的知识。通过外部知识库引入领域知识被证明可以提升模型结果。这些外部知识包括:语言知识、语义知识、常识知识、事实知识和其他领域特定的知识等。
一方面,外部知识可以在预训练阶段进行引入。早期的一些研究专注于联合学习知识图谱嵌入和词嵌入,而从 BERT 开始,研究者们提出了一些专为引入外部知识而设计的预训练任务,例如:「LIBERT」 通过一个附加的语言约束任务引入了「语言知识」;「SentiLR」 通过对每个单词添加情感极性,将 MLM 拓展为 Label-Aware MLM,在多种情感分类任务上达到 SOTA(「语言知识」);「SenseBERT」 在预训练时不仅预测被遮罩的词语,还预测其在 WordNet 中的 supersenses(对词语的一种分类,属于「语义知识」);「ERINE」 将在知识图谱中预训练的图谱嵌入结合到对应的实体上,来增强文本表示(「事实知识」);类似地,「KnowBERT」 将 BERT 与一个实体连接模型联合训练,以端到端的方式集成实体表示(「事实知识」);「KEPLER」 则联合优化知识嵌入和语言模型目标(「事实知识」)。而不同于上述这些工作通过实体嵌入引入知识图谱的结构化信息,K-BERT 直接将知识图谱中的相关三元组引入句子,得到一个 BERT 的扩展树形输入(「事实知识」)。「K-Adapter」 通过为不同预训练任务单独训练不同的适配器,来注入多种知识,以解决上述模型在注入多种知识时出现的遗忘问题(「语言知识」)。
另一方面,外部知识可以直接引入预训练模型,而无需从零开始预训练,例如:之前提到的 「K-BERT」 支持将事实知识在下游任务的微调阶段注入;Guan 等人利用「常识知识」库、ConceptNet 和 ATOMIC,来增强 GPT-2 在故事生成上的表现。Yang 等人提出了一种知识-文本融合模型来获得相关的语言和事实知识,用于机器阅读理解。
此外,还有人将语言模型扩展为了「知识图谱语言模型」(KGLM)和「潜在关系语言模型」(LRLM),两者均允许以知识图谱为条件进行预测。这些以 KG 为条件的语言模型展现了用于预训练的潜力。
学习多语言的文本表示对于很多跨语言的 NLP 任务是很重要的。我们可以将多语言 PTM 按下游任务分为两类:「跨语言语言理解」(XLU)和「跨语言语言生成」(XLG)。
「跨语言语言理解」。大部分的早期工作聚焦于学习来自同一语义空间的多语言的词嵌入,这一方法往往缺乏语言间的校准。近期围绕着 BERT 又涌现出了一些新方法,如:「mBERT」 基于 104 种语言的维基文本训练 MLM(共享参数),每个训练样本都是单语言的,且没有专门设计跨语言目标,即便如此,该模型还是在跨语言任务上表现良好;「XLM」 在 mBERT 的基础上进行了改进,引入跨语言任务(TLM),在一系列平行的双语句对上执行 MLM;「Unicoder」 进一步地提出三种新的跨语言预训练任务,包括跨语言词语修复、跨语言释义分类和跨语言 MLM;「XLM-RoBERTa」 是一个基于大规模多语种语料训练的多语言 encoder,其训练任务仅为单语言的 MLM,但是在多个跨语言任务上取得了 SOTA(数据多就是任性)。
「跨语言语言生成」。XLG 的任务目标是基于输入语言生成不同语言的文本,如机器翻译和跨语言摘要总结。不同于 XLU,XLG 使用的 PTM 通常需要联合预训练 encoder 和 decoder,而前者通常只需要专注于 encoder。「MASS」 基于多个语言的单语种 Seq2Seq MLM 预训练了一个 Seq2Seq 模型,在无监督神经机器翻译上取得了显著效果;「XNLG」 为跨语言神经语言生成提出了两步预训练:第一步基于单语种 MLM 和跨语言 MLM 任务预训练 encoder,第二步保持 encoder 不变,通过单语种 DAE 和跨语言自编码任务预训练 decoder。实验表明 XNLG 在跨语言问题生成和摘要总结上表现良好;「mBART」 是 BART 的多语言版本,其在包含 25 种语言的大规模单语种语料库上基于 Seq2Seq DAE 任务联合预训练 encoder 和 decoder,在各种机器翻译任务上取得了性能提升。
虽然多语言 PTM 在很多语言上表现良好,但近期的研究表明面向一种特定语言训练的 PTM 的效果还是优于多语言的效果。对于中文(词语间没有间隔),研究表明更大的粒度或多粒度的词语表示能够取得很好的结果。此外,还有很多面向不同语种的 PTM,如面向「法语」的 CamemBERT 和 FlauBERT;面向「芬兰语」的 FinBERT;面向「荷兰语」的 BERTje 和 RobBERT;面向「阿拉伯语」的 AraBERT 等。
随着 PTM 在多个 NLP 任务中取得了成功,一些多模态 PTM 也被设计出来,用来获取通用的视觉(听觉)和语言特征编码。这些模型基于大规模的多模态语料库进行预训练,如包含字幕的视频,包含标注的图片等。一些多模态限定的预训练任务也被提出以更好地提取多模态特征,例如 visual-based MLM、masked visual-feature modeling 和 visual-linguistic matching。下面将从「视频」、「图像」和「音频」三个方面介绍目前的一些代表性研究。
「VideoBERT」 和 「CBT」 都是视频文本联合模型,为了得到视觉-语言表示,它们分别通过基于 CNN 的编码器和现有的语音识别技术对视频进行了预处理。之后训练一个单独的 Transformer 编码器来学习用于下游任务的联合表示。此外,「UNIViLM」 引入生成任务来进一步预训练下游任务中的解码器。
一些研究将 PTM 引入图像-文本对,旨在处理诸如视觉问答(VQA)、视觉常识推理(VCR)等下游任务。部分研究采用两个分离的编码器用于分别训练图像和文本表示,如 「ViLBERT」 和 「LXMERT」;部分研究则提出了单流统一 Transformer,诸如 「VisualBERT」、「B2T2」、「VLBERT」、「Unicoder-VL」 和 「UNITER」。虽然上述模型的架构不尽相同,但是其都使用了类似的预训练任务,如 MLM 和图像文本配对。为了更好地利用视觉元素,图像会在预训练编码前被转化为区域的序列,利用 RoI 或 bounding box提取技术。
此外,还有一些研究探索了将 PTM 用于音频文本对的可能性,如 「SpeechBERT」。该工作尝试去构建一个端到端的语音问答模型(SQA),将语音和文本语料库通过一个 Transformer 编码器编码,基于 MLM 进行预训练,再在问答语料上进行微调。
大部分公开的 PTM 都是基于通用领域的语料库(如维基百科)进行训练的,这限制了其在特定领域或任务中的应用。最近,一些研究提出了在特殊语料库上训练的 PTM,如用于生物医学文本的 「BioBERT」,用于科学文本的 「SciBERT」,用于临床文本的 「ClinicalBERT」 等。
除了预训练领域特定的 PTM,一些研究尝试去针对目标应用调整预训练模型,例如生物医学实体归一化,专利分类、关键词抽取等。一些面向任务的预训练模型也被提出,诸如 「SentiLR」 中的情绪 Label-Aware MLM(用于情绪分析),用于文本总结的 Gap Sentence Generation(GSG),用于不流畅语流检测的 Noisy Words Detection 等。
由于 PTM 通常包含至少几千万个参数,其难以被部署在在线服务或是资源受限的硬件上。模型压缩是一种可以减小模型尺寸,提升计算效率的手段。下面介绍五种常用的模型压缩方法。
「模型剪枝」即移出神经网络的部分元素,如权重、神经元、网络层、通道、attention 头部等。
「量化」指将高精度的参数压缩为低精度的参数,对硬件的兼容性有所要求。
「模型共享」在相似的模型单元间共享参数,通常广泛应用于 CNN、RNN 和 Transformer。「ALBERT」 使用 cross-layer parameter sharing 和 factorized embedding parameterization 来减少 PTM 的参数。
「知识蒸馏」旨在训练一个小的 student 模型,来重现原始大模型(teacher 模型)的行为。不同于模型压缩,蒸馏技术通过一些优化目标来从固定的 teacher 模型中学习 student 模型,而压缩技术则旨在搜索一个稀疏结构。一般来说,蒸馏方法可以分为三类:
「从软目标概率蒸馏」。Bucilua 等人发现让 student 模型逼近 teacher 模型可以帮助传递知识。一种常用的方法是逼近 teacher 模型的对数。DistilBERT 通过一个基于 teacher 模型软目标概率的蒸馏损失训练 student 模型:
其中
和
分别表示 teacher 模型和 student 模型估计的概率。从软目标概率蒸馏也可以应用在特定任务的模型中,例如信息抽取、序列标注等。
「从其他知识蒸馏」。上述蒸馏方法将 teacher 模型看做一个黑盒子,只关注其输出。而分解 teacher 模型可以为 student 模型带来提升。「TinyBERT」 对嵌入输出、隐藏状态和 self-attention 分布进行了 layer-to-layer 的蒸馏;「MobileBERT」 对软目标概率、隐藏状态和 self-attention 分布进行了 layer-to-layer 的蒸馏;「MiniLM」 从 teacher 模型中蒸馏了 self-attention 分布和 self-attention 值的关系。
「蒸馏至其他结构」。一般来说,student 模型的结构与 teacher 模型的结构相同,除了更小的层数和更小的隐藏神经源数量。然而,部分研究表明在蒸馏时,除了减少参数,简化模型结构也可以减少计算复杂度,如将 Transformer 简化为 RNN 或 CNN。
「模型替换」是一种减少模型大小的简单方法,其将原始 PTM 中的较大模块替换成更加小巧的模块。Xu 等人提出了 「Theseus 压缩」,其渐近地用更少参数的模块替换原模型中的模块。不同于知识蒸馏,该方法只需要一个任务特定的损失函数。压缩后的模型 「BERT-of-Theseus」 的速度接近原始模式的两倍,但性能几乎保持不变。
下表给出了一些代表性的压缩 PTM 的比较:
虽然 PTM 从大型语料库中捕捉到了通用的语言知识,但是如何将这些知识有效地适应到下游任务中仍然是一个关键问题。
「迁移学习」指将知识从源任务(或领域)适应至目标任务(或领域),下图简单说明了迁移学习的整体思路:
NLP 中的迁移学习有很多种,将 PTM 适应至下游任务属于「序列迁移学习」任务,其任务是序列式地进行学习的且目标任务包含标注数据。
为了将 PTM 中的知识迁移到下游 NLP 任务中,我们需要考虑以下几个问题:
不同的 PTM 在同样的下游任务中通常有不同的效果,因为其基于不同的预训练任务、模型结构和语料进行训练。
「预训练任务」。目前,语言模型(包括其变式)是最流行的预训练任务,可以有效地解决很多 NLP 问题。然而,不同的预训练任务存在特定的偏差,对不同的任务具有不同的效果。例如,NSP 任务可以让 PTM 理解两个句子之间的关系,有利于诸如 QA 和 NLI 这样的下游任务。
「模型结构」。PTM 的结构同样对下游任务很重要。例如,BERT 虽然提升了很多自然语言理解任务的表现,但是却很难用于语言生成任务。
「语料」。下游任务的数据分布应该接近训练 PTM。目前有很多现成的 PTM,可以直接用于各种领域特定或语言特定的下游任务。
给定一个预训练的深度模型,不同的 layer 可以捕捉到不同类型的信息。对于「基于 RNN」 的模型,Belinkov 等人发现从一个多层 LSTM 编码器的不同 layer 中学习到的表示有利于不同的任务;对于「基于 transformer」 的模型,Tenney 等人发现 BERT 表示了传统 NLP pipeline:较低的 layers 捕捉基本的句法信息,而更高的 layers 则捕获高层次的语义信息。
令
表示包含
层的预训练模型中第
层的表示,
表示面向目标任务的特定模型。我们可以通过如下三种方式来选择表示:
「只用 embedding」。只选择静态的预训练嵌入,对于一个新的目标任务,模型的其他部分需要从零开始训练,例如 「Word2vec」 和 「Glove」。这种方式难以捕捉到高层次的信息。
「使用顶层的表示」。一种最简单有效的方式就是将顶层的表示输入到任务特定模型中
,例如 「BERT」。
「从所有层选择」。一种更加灵活的方式从所有层中自动选择(提取)最佳表示,例如 「ELMo」,其输出的表示为:
其中
是层
的 softmax 归一化权重,
是一个用于缩放的标量。加权得到的混合表示会被输入任务特定模型中
。注意 ELMo 的下游模型也需要从零开始训练(参见下一节)。
目前,模型迁移的方式可以分为两种:「特征提取」(预训练参数被冻结)和「微调」(预训练参数不被冻结,进行微调)。在特征提取的方式中,预训练模型被视作现成的特征提取器。
虽然两种方式都具有不错的效果,但是特征提取的方式需要更复杂的任务特定结构,且不利于迁移预训练模型中能够包含众多可迁移表示的中间层信息。因此,在很多下游任务中,更加倾向于使用微调的方式。下表根据上述分类对一些常见的 PTM 的迁移进行了总结:
自从 ULMFit 和 BERT 开始,「微调」成为了 PTM 迁移的主要方法。然而,微调的过程并不是十分稳定的,即使超参数相同,部分随机值的差异也可能导致结果的截然不同。除了标准的微调,还有一些有用的微调策略:
「两阶段微调」。其在预训练和微调之间引入一个中间阶段。在第一阶段,通过中间任务或语料来微调预训练模型;在第二阶段,将第一阶段得到的迁移模型在目标任务上进行微调。
「多任务微调」。Liu 等人在多任务学习框架下对 BERT 进行了微调,结果显示多任务学习和预训练是互补的方法。
「使用额外模块的微调」。标准微调的一大缺点是参数的低效性:每个下游任务都有各自的微调参数。因此,一种解决方法是向 PTM 中注入一些可微调的适配模块,保持其他原始参数的固定。
「其他」。gradual unfreezing 从顶层开始逐层解冻 PTM 进行微调;sequential unfreezing 则先微调随机初始化的任务特定层,然后解冻所有隐藏层,最后解冻 embedding 层。此外还有启发自集成模型的 self-ensemble 和 self-distillation。
上述的工作证明,借助于更好的微调策略,PTM 可以发挥出更大的效果。
网络上有很多公开的 PTM 资源,下表给出了一些知名的库,包括第三方实现、论文列表、可视化工具等。
本节将总结 PTM 在一些经典 NLP 任务中的应用,本节列举了大量的研究,涉及很多技术细节,这里不作具体介绍,感兴趣的同学可以自行阅读原论文。
对 PTM 来说,如何以一种可比较的度量进行评估十分重要,我们需要一个大规模的评估标准。「GLUE」(The General Language Understanding Evaluation)标准是一个集合了 9 个自然语言理解任务的标准,其中包括:「单句分类」任务(CoLA 和 SST-2)、「文本对分类」任务(MNLI, RTE, WNLI, QQP, MRPC)、「文本相似度」任务(STSB)、「相关性排行」任务(QNLI)。GLUE 标准能够很好地评估模型的鲁棒性和通用性。然而,GLUE 并没有提供测试集的标签而是设置了一个评估服务器。
而近年来 NLP 的快速发展开始触及 GLUE 的上限,这促进了新的标准 SuperGLUE 的提出。与 GLUE 相比,SuperGLUE 的任务形式更加丰富且更具有挑战性,如指代消解和 QA。对应基准的 SOTA 模型可以参考以下链接:
问答(QA)或是狭义概念的机器阅读理解(MRC)是 NLP 中的重要应用。QA 任务从易到难可以分为三类:
针对单回合提取 QA,BERT 创造性地将其转换为 span 预测任务,预测答案的起始 span。Zhang 等人提出了回顾性阅读架构,通过 PTM 来初始化预测 span 的编码器;针对多回合生成 QA,Ju 等人提出了一种 “PTM+Adversarial Training+Rationale Tagging+Knowledge Distillation” 模型;针对Hotpot QA,Tu 等人提出了一个可解释的 “Select, Answer, and Explain” 系统,其中 PTM 作为选择模块的编码器。
一般来说,QA 模型中编码器的参数通过 PTM 进行初始化,其它的参数则进行随机初始化。SOTA 的模型可以参考以下链接:
BERT 在 SST-2 数据集(一个用于情感分析的数据集)上进行微调后,表现超过了之前的 SOTA 模型。然而在「基于方面的情感分析」(ABSA)中,直接应用 BERT 的效果一般。ABSA 是一种细粒度的情感分析任务,有很多研究针对 ABSA 对 BERT进行了调整,取得了一定的效果,这里不作赘述。而在情感迁移中,基于 BERT 的模型也取得了不错的效果。
「命名实体识别」(NER)是信息抽取中的基本任务,在很多 NLP 下游任务中扮演着重要角色。在深度学习时代,大部分的 NER 方法都基于序列标注框架实现,即句子中的实体信息会被转换为标签序列,每个标签对应着一个词语,模型需要预测每个词语的标签。得益于 ELMo 和 BERT 在 NLP 领域的巨大贡献,涌现出了大量关于 NER 的预训练模型的研究,这里同样不作赘述。
「机器翻译」(MT)同样是 NLP 领域的重要任务。几乎所有的神经机器翻译(NMT)模型都使用「编码器-解码器」框架,首先将输入通过编码器编码,再通过解码器生成对应语言的输出。这里的研究大致可以分为两类:一类是仅对编码器进行预训练,这类研究主要围绕 BERT 展开,具体细节五花八门;一类是基于 Seq2Seq 的预训练任务对编码器和解码器同时进行预训练,代表研究有 「MASS」 和 「mBART」。
「摘要」旨在生成一段可以概括长文本主旨的短文本。随着 PTM 的出现,摘要任务的表现也得到了大幅的提升。其中代表性的研究是 BERTSUM,其在 BERT 中插入多个 [CLS]
标签以学习句子表示,并针对抽取式摘要和抽象式摘要(需要改写原文)提出了不同的策略。
深度神经模型很容易受到「对抗样本」的攻击,对抗样本和对抗学习(GAN)截然不同,指对输入样本故意添加一些人无法察觉的细微的干扰,导致模型以高置信度给出一个错误的输出。在 CV 中,对抗性攻击和防御已经得到广泛研究。然而,由于语言的离散性,文本领域的对抗攻击和防御仍然是一个挑战。为文本生成对抗样本需要满足以下要求:
一些研究通过对抗样本成功攻击了一些现有的模型,如 GPT2 和 BERT。
虽然 PTM 已经证明了在各种 NLP 任务中的价值,但由于语言的复杂性,挑战依然存在。本节将介绍 PTM 的五个未来的发展方向。
目前 PTM 还未到达其上界,大部分的 PTM 可以通过更多的训练步数、更大的语料库和更深的模型结构进行提升。然而,这会带来更高额的成本,同时训练复杂模型也是一个巨大的挑战,需要更加复杂高效的训练技术。因此,一个更实际的方向是在现有的软硬件条件下,设计更有效的模型结构、自监督的预训练任务、优化器以及训练技巧,来达到提升 PTM 的效果。「ELECTRA」 就是这个方向上的一个很好的尝试。
「Transformer」 被证明是预训练的一个有效结构。然而,其主要缺点在于计算复杂性,复杂度达到了输入长度的平方级别。由于 GPU 显存大小的限制,目前大部分的 PTM 一次只能处理长度不超过 512 个 token 的序列。为了解决这一缺点,我们需要改进 Transformer 的结构,例如 「Transformer-XL」。因此,搜索更加高效的模型结构对于解决更长范围的上下文信息至关重要。关于深层结构的设计,借助一些自动化方法(例如 NAS)可能会有所帮助。
在实践中,不同的下游任务需要 PTM 的不同能力。PTM 和下游任务之间的差异性主要体现在两个方面:「模型结构」和「数据分布」。较大的差异可能会导致 PTM 的优势难以体现。例如,文本生成通常 需要一个特定的任务来预训练编码器和解码器;而文本匹配则需要为句对设计的预训练任务。
此外,虽然更大的 PTM 通常会有更好的性能,但是一个实际的问题是如何将大型的 PTM 应用于特殊的场景,如低容量设备和低时延应用上。因此,我们需要仔细地设计特定的模型结构和适合下游任务的预训练任务,或者从已有的 PTM 中抽取部分任务特定的知识。我们可以使用一些技术(如「模型压缩」)从现有的通用 PTM 中训练任务特定的 PTM,虽然模型压缩在 CV 领域已经得到了广泛应用,但在 NLP 领域仍然处于起步阶段。Transformer 的全连接结构使得模型压缩更加具有挑战性。
目前,「微调」是将 PTM 知识迁移至下游任务的最主要方法,但是其缺点是参数的低效性:每个下游任务都有各自的微调参数。一种解决方案是固定 PTM 的原始参数,针对特定任务添加一个小的可调适配模块。实际上,从 PTM 中挖掘知识并不仅限于微调,还有更多的方式,如特征抽取、知识蒸馏、数据增加,将 PTM 作为外部知识等。我们期待看到更多高效的方法。
虽然 PTM 的表现优异,但是其深层非线性的结构使得决策支持的过程变得高度不透明。近年来,可解释人工智能变成了 AI 领域的热点。和 CNN 相比,由于类 Transformer 和语言的复杂性,PTM 的理解要更加困难。一些研究分析了 PTM 中的语言和世界知识(参考 3.3 节),帮助我们一定程度上理解 PTM。然而这些分析所依赖的 attention 存在着一定的争议,被认为无法提供可解释性。
另一方面,PTM 面对对抗攻击时十分脆弱(参考 7.7 节),随着 PTM 在生产系统中的大范围应用,其可靠性成为了一个重要问题。关于 PTM 的对抗攻击的研究可以帮助我们理解其能力,同时推进 PTM 的对抗防御,有助于提升 PTM 的鲁棒性。