论文笔记:Pre-trained Models for Natural Language Processing:A Survey

Pre-trained Models for Natural Language Processing: A Survey

Summary

关于预训练模型的一篇很好的Survey,总结了从word2vec时代静态的文本表征到目前后BERT时代,PTMs提取出的动态文本表征。PTMs的不同主要体现在模型所用的上下文encoder不同、预训练模型的任务不同、以及PTMs所针对的下游任务等。

Research Objective

关于语言预训练模型的一个survey

Background

Neural Contextual Encoders

神经网络的上下文编码器:

  • Covolutional model:通过卷积操作提取局部的上下文信息。优点是非常容易训练,并且能够获取局部信息
  • Sequential models:序列模型如RNNs,bi-RNN用于提取上下文信息,但是序列模型的表现经常受到文本中的长距离依赖因素的影响。
  • Graph-based model:基于图的模型通常把文本看作是节点,使用一些语言学的结构,如语义结构、句法结构来训练上下文表征。 注意相应的参考文献:《Exploiting
    semantics in neural machine translation with graph
    convolutional networks》值得一读。

    缺点是得到这样的一个语言学结构特别困难,而且也非常依赖一些其他的解析器,如句法依存分析的解析器。实际上的做法是用self-attention,比如Transformer,让model自己去学习这些潜在的语言学结构信息,也就是并不用一些其他显式的做法。

虽然Transformer通过对每个词之间的dependency建模,解决了卷积方法和序列方法的长距离依赖问题,但这又导致Transformer需要很大的训练集,如果训练集小了又容易过拟合。

Overview of PTMs

不同的PTM的区别主要在contextual encoders、pre-training tasks, and purposes,之前的Neural Contextual Encoder一节已经简单介绍过了contextual encoders。

Pre-training Tasks

在CV领域的预训练模型通常是在大规模的监督学习数据集中训练的,如ImageNet。而在NLP领域,除了在machine translation有大规模的有监督数据集,其他nlp领域有监督的数据集匮乏。而其实也有基于MT领域的有监督数据集训练的预训练语言模型CoVe

  1. Language Model

表示$x{0:t-1}$用neural encoder$f{enc}(·)$做了上下文嵌入,经过prediction层$g_{LM}(·)$得到下一个单词$x_t$的条件概率。

  1. Masked Language Modeling(MLM)

BERT的MLM的做法是:
随机mask语料中15%的token,然后预测masked token,那么masked token 位置输出的final hidden vectors喂给softmax网络即可得到masked token的预测结果。

这样操作存在一个问题,fine-tuning的时候没有[MASK] token,因此存在pre-training和fine-tuning之间的mismatch,为了解决这个问题,采用了下面的策略:

80%的时间中:将选中的词用[MASK]token来代替,例如

my dog is hairy → my dog is [MASK]

10%的时间中:将选中的词用任意的词来进行代替,例如

my dog is hairy → my dog is apple

10%的时间中:选中的词不发生变化,例如

my dog is hairy → my dog is hairy

这样存在另一个问题在于在训练过程中只有15%的token被预测,正常的语言模型实际上是预测每个token的,因此Masked LM相比正常LM会收敛地慢一些,后面的实验也的确证实了这一点。

MLM也存在一些变种,如Seq2Seq MLM,主要的预训练模型包括MASST5,显而易见,这个Seq2Seq的MLM所训练出来的预训练模型在Seq2Seq的下游任务肯定会有提升,比如说QA,summarization和MT。
Enhanced Masked Language Modeling (E-MLM):RoBERTa把静态的Masking改成了动态的,即一开始把预训练的数据复制10份,每一份都随机选择15%的Tokens进行Masking,也就是说,同样的一句话有10种不同的mask方式。然后每份数据都训练N/10个epoch。这就相当于在这N个epoch的训练中,每个序列的被mask的tokens是会变化的。ERNIE的改进是不是mask一个单词,而是mask一些短语或者说命名实体(我觉得这样的预训练方式可能会对answer-span类型的QA有所改进)

  1. Permuted Language Modeling (PLM)
    因为MLM在训练时的一些特殊token如[MASK]在下游任务用于预测的实际文本中是不存在的,这就导致在train和fine-turning之间可能会出现差距。那PLM的做法就是,给定一个句子,从这个句子中随机采样一个排列,接着将排列序列中的一些 token 选定为目标,同时训练模型以根据其余 token 和目标的正常位置(natural position)来预测这些目标。

  2. Denoising Autoencoder (DAE)
    去噪自编码器(denoising autoencoder,DAE)接受部分损坏的输入,并以重建这些未失真的原始输入为目标。在自然语言处理的下游任务中,常用Transformer来重建文本。在构建训练文本时有一些不同的制造噪声的方式。

  3. Contrastive Learning (CTL)
    一些文本对在语义上比随机取样的文本更为接近。CTL 背后的原理是「在对比中学习」。相较于语言建模,CTL 的计算复杂度更低,因而在预训练中是理想的替代训练标准。CTL包括

  • Replaced Token Detection (RTD)

与Noise-Contrastive Estimation (NCE就相当于word2vec中的负采样) 相同,但RTD会根据上下文语境来预测当前的token是否是被替换过的token。
ELECTRA就是这样一个牛批的预训练模型。ELECTRA在以RTD为训练目标的同时还用了生成对抗模型的思想。ELECTRA和BERT最大的不同应该是在于两个方面:masked(replaced) tokens的选择和training objective。

第一,masked token的选择在BERT中是随机的,这意味着什么呢?比如句子“我想吃苹果”,BERT可以mask为“我想吃苹[MASK]”,这样一来实际上去学它就很简单,如果mask为“我[MASK]吃苹果”,那么去学这个“想”就相对困难了。换句话说,BERT的mask可能会有很多简单的token,去学这些token就算是简单的bilstm都可以做的。这样一来,自然而然的一个想法是,我们不随机mask,去专门选那些对模型来说学习困难的token。怎么做呢?这就是ELECTRA非常牛逼的地方了,ELECTRA有一个生成器和鉴别器,生成器将用来把输入文本做部分词的替换,而鉴别器判断输入句子中的每个词是否被替换。也就是说,这里的生成器的作用是为自动选择tokens来替换成其他token,并且经过训练,生成器会越来越选择 一些比较难的token替换,希望骗过鉴别器。在鉴别器方面,用一个二分类去判断每个token是否已经被换过了。这就把原来BERT的一个DAE(或者LM)任务转换为了一个分类任务(或者序列标注)。这有两个好处:(1)每个token都能contribute to some extent,即每个token对模型都有所贡献;(2)极大程度减少了计算复杂度,原来BERT的复杂度是O(d*V),d是输入文本长度,V是词表大小,那ELECTRA的复杂度就是O(d*2)。

  • Next Sentence Prediction (NSP)

训练模型以区分两个输入句子是否为训练语料库中的连续片段。正例是同一个文档的两个连续片段,负例是语料库中的随机两个文档。实际上这个训练目标并不是特别好,因为很容易根据两个句子的主题判断是否是连续的片段,从而可能会错误地引导模型去做主题预测的工作。

  • Sentence Order Prediction (SOP)

SOP 使用同一文档中的两个连续片段作为正样本,而相同的两个连续片段互换顺序作为负样本。这样就不存在主题不同的问题了。

Model Analysis

  • Linguistic Knowledege (语言知识)

BERT在句法任务中的表现很好,但却在语义和细粒度的句法任务上表现不佳。

  • World Knowledge

BERT能够提取文本中的World Knowledge,如一些关系信息和常识。

Extensions of PTMs

  • Knowledge-Enriched PTMs

加入了一些额外的信息增强了预训练模型。如改进MLM,在每个词上整合这个词的情感词性所提出的SentiLR;K-BERT显式地把从知识图谱中提取出的关系实体嵌入到BERT当中,使得以一个树形的数据作为BERT的输入;K-Adapter通过对不同的预训练任务训练不同的adapter来对不多种额外的信息做一个合适的整合,等等。

  • Multi-Modal PTMs
    暂且不看

  • Model Compression

Adapting PTMs to Downstream Tasks

尽管预训练模型能够捕获文本的general knowlegde,但怎么样高效的适用于下游任务已让是一个关键的问题。

把PTM适用于下游任务是一个顺序的迁移学习任务,即顺序地学习任务,并且目标任务是带有标签的。

那么如何做预训练模型到下游任务的迁移呢?

  1. 选择一个合适的预训练任务、模型架构和下游任务训练语料库。
  2. 选择合适的网络层。可以选择只用BERT的第一层Embedding层,也可以直接在BERT的输出上加一层Top Layer,也可以把每一层的输入做一个加权,作为Encoder的输出。
  3. fine-tuning的技巧:mult-task learning、使用额外的适配模块进行fine-tuning、gradual unfreezing