预训练综述

一、简介

1.1、预训练影响:

         ELMo/GPT/BERT预训练模型的相继提出,NLP找到了可以像计算机视觉那样的迁移学习方法。NLP领域预训练模型,采用自监督 学习方法,将大量无监督文本送入模型中进行学习,得到可通用的预训练模型。NLP领域有大量的无监督学习数据。大量研究工作表明,大量的数据可以不断提高模型的性能表现,与此同时压缩模型参数也成为研究热点,例如ALBERT,ELECTRA。预训练模型压缩引导NLP将大量非监督文本充分利用起来,进行语言知识编码,指导下游NLP任务。

1.2、预训练模型效果好的原因:

1)Word2vec等词向量模型训练出来的都是静态词向量,同一个词,在任何的上下文中,其向量表示是相同的,无法体现一个词在 不同语境中的不同含义。

2)预训练模型替代词向量的关键在于。对上下文的词提取符合其语境的词表示,该词表征向量为一个动态向量,同一词输入预训练模型后,同一个词的词表征向量在两个上下文中表征不同。

 1.3、常见的预训练模型

     目前常见的预训练语言模型有:ELMO、GPT、BERT、BERT-www、ERNIE、XLNET、RoBERTa、ALBERT、ELECTRA

 

二、预训练模型类型

2.1、预训练任务分类

预训练分为两类自回归语言模型和自编码语言模型。

2.1.1、自回归语言模型

    通过给定文本的上文,对当前字进行预测,训练过程要求对数似然函数最大化,即:

代表模型:ELMo/GPT1.0/GPT2.0/XLNet

优点:该模型对文本序列联合概率的密度估计进行建模,使得模型更适合一些生成类的NLP任务,这些任务在生成内容时从左到右,与自回归模式天然匹配。

缺点:联合模型按照文本序列从左到右进行计算,无法包含上下文信息的双向特征。

2.1.2、自编码语言模型性

    BERT系列的模型为自编码语言模型,通过mask掉一些词,通过上下文对该词进行预测,使得预测概率最大化:

mt为1表示替换为[mask];H为Transformer等映射函数。本质为去噪自编码模型,加入的[mask]为噪声,模型对[mask]进行预测即为去噪。

优点:能够利用上下文信息取得双向的特征表示

缺点:引入了独立性假设—每个[mask]之间是相互独立的,这使得模型的联合概率为有偏估计;由于[mask]的存在,使得预训练阶段和微调阶段不匹配,难以直接用于生成任务。

三、预训练模型结构简介

3.1、ELMO

(https://arxiv.org/pdf/1802.05365.pdf)

3.1.1、ELMO简介

ELMO典型的自回归预训练模型,包含两个独立的单项LSTM实现双向语言模型进行回归预训练,不使用双向LSTM进行编码的原因是预训练任务中,双向模型将提前看到上下文表征而对预测结果造成影响。因此,ELMO在本质上属于单向语言模型,因其只在一个方向上进行编码表示,只是将其进行拼接。

3.1.2、ELMO特点

1)引入双向语言模型,其实是2个单向语言模型(前向和后向)的集成,用共享词向量来进行预训练;

2)保存好预训练的2层biLSTM,提取每层的词表征用于下游任务

3.1.3、ELMO词表征和任务表征

1)对于每一个字符,其每一层的ELMO表征均为词向量与该层的双向编码表征拼接而成,即:

2)对任务而言,需要把ELMO表征整合为一个单独的向量,最简单的方式,只用最上层表征;一般用法,所有层ELMO表征加权和方式进行处理,即:

其中stask 为学习参数,归一化权重因子,用于表征每层词向量的重要性,ytask为缩放参数,具体模型放缩ELMO大小。

得到ELMO表征后,用于下游任务,ELMO微调预训练模型部分是固定的,不参与后续训练当中;可以采用1)ELMO表征与词向量拼接,2)ELMO表征与下游模型输出层拼接,3)ELMO模型中加入dropout,采用L2 loss提升模型

 

3.2、GPT/GPT2 

GPT(https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/language-unsupervised/language_understanding_paper.pdf)

GPT2(https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf)

3.2.1、GPT简介

GPT为生成模式,与EMLO类似,是一个自回归语言模型。与ELMO不同,采用多层Transform Decoder作为特征抽取,Transform的特征抽取能力一般优于LSTM。

3.2.2、GPT结构

   GPT是一个生成式的语言模型,采用MASK Multi-Head Attention避免预测当前词会看见之后的词,简称单向Transform。首次将Transform应用于预训练,预测是将position-wise的前向反馈网络输出直接送入分类器进行预测。此外,GPT包含预训练和微调两个部分。

1)预训练部分

与传统的语言模型类似,优化前i-1个上下文预测当前词u的似然函数:

K为上下文窗口,p(u)来源于多头transform,Wp为位置嵌入矩阵

通过优化L1(u),获取参数

3.2.3、微调部分,任务使用

  对于带有标签y的包含m个token的句子的监督数据[x1,...,xm],直接将其输入到已经完成预训练的模型中,然后利用最后一个位置的输出对标签进行预测:

hlm为多头transform的最后一层输出。

最大化似然函数:

左图为GPT的结构,右图为各任务使用所需的数据格式。

3.3.4GPT2#

GPT2与GPT的大致模型框架和预训练目标是一致的,而区别主要在于以下几个方面:

  • 其使用了更大的模型
  • 使用了数量更大、质量更高、涵盖范围更广的预训练数据
  • 采用了无监督多任务联合训练的方式,即对于输入样本,给予一个该样本所属的类别作为引导字符串,这使得该模型能够同时对多项任务进行联合训练,并增强模型的泛化能力

 

3.4、BERT (https://arxiv.org/pdf/1810.04805.pdf)

3.4.1、BERT预训练

BERT的特征抽取为双向的Transformer,套用了Transform Encoder Block的结构,相比于GPT,仅仅从单向变为双向,BERT无法适用于自回归语言模型,提出了两种预训练任务来对模型进行预训练。

3.4.2、MLM (Masked Language Model)

由于BERT需要通过上下文信息来预测中心词,又不希望模型提前看见中心词信息,故采用MLM预训练方式—随机从输入语料上mask掉一些单词,然后通过上下文预测该单词,类似于完形填空任务。

Mask的Word piece比例及mask的原因

预训练任务中,15%的Word piece会被mask,这15%中,80%会直接替换为[Mask],10%将其替换为其他任意单词,10%保留原始token。

Mask采用方式原因:1)未100%mask原因,100%mask掉,在微调时,模型会有一些未见过的词。2)加入10%随机mask原因,a)Transform要保持对每个输入token的分布式表示,否则模型会知道这个[mask]是token ‘hairy’;b)编码器不知道哪些词需要预测,哪些词错误,需要学习每个token的表示向量。3)每batchsize只有15%单词mask,性能开销导致,双向编码器比单向编码器训练更慢。

3.4.3、NSP (Next Sequence Prediction)

    MLM任务不能解决句子关系判断任务,需添加额外的Next Sequence Prediction任务—即判断判断句子B是否是句子A的下文,输出为isNext或NotNext.

    训练数据的生成方式是从平行语料中随机抽取的连续两句话,50%符合isNext关系,50%是NotNext关系,关系保存在[CLS]符号中。

3.4.4、输入表示

BERT的输入表征由3中Embedding求和而成:

  1. Token Embeddings:传统的词向量层,每个样本的输入首字符需要设置为[CLS],可以用于之后的分类任务,两个不同的句子需用[SEP]分割,最后一个[SEP]表示终止。
  2. Segment Embeddings:[0,1]序列,区分NSP任务中的两个句子,做句子关系判断任务。
  3. Position Embeddings:位置向量,与Transform位置向量不一样,BERT是直接训练出来的

3.4.5、BERT微调

1)对于情感分析单句分类任务,可以直接输入单个句子,将[CLS]的输出直接输入到分类器中进行分类。

2)对于句子对任务,需用[SEP]分隔句子输入到模型,同样将[CLS]输出到分类器中分类

3)对于问答任务,将问题与答案拼接输入BERT,答案位置输出向量二分,句子方向进行softmax

4)对于实体命名任务,对每个位置输出进行分类即可,每个位置输出作为特征输入到CRF效果更好。

3.4.6、BERT优缺点

BERT优点:

1)ELMo相比,BERT采用特征提取能力强并行能力好的Transform

2)ELMO与GPT均为单向语言模型,适应于生成模式,不利于上下文编码抽取

3)BERT采用双向Transform,利于上下文信息抽取

BERT缺点:

1)MLM任务预训练过程采用[MASK]与微调过程不符合,采用双向Transform,不能用于生成任务。

2)未考虑[MASK]之间相关性,是对语言模型联合概率的有偏估计

3)由于最大长度的限制,适合句子级别和段落级别的任务,不适合文档级别的任务。

4)适合语义理解任务,不适合语言生成任务

 

3.5、BERT-WWM(https://arxiv.org/pdf/1906.08101.pdf)

wwM(Whole Word Masking)整词Mask,改变了原来预训练阶段的训练样本生成策略。原有的基于wordPiece的分词方式将一个完整的词切分为若干子词,预训练阶段字词被分开随机mask。而www采取的措施是,一个完整的词被mask,同属于该词的其他部分也会被mask,即全词mask。(LTP分词)

优点:

  1. 强制模型预测整个词,而不是词的一部分,使得同一词具有相同的上下文
  2. 打破BERT同一词的独立性假设,保证不同词之间的独立性

 

3.6、RoBERTa(https://arxiv.org/pdf/1907.11692.pdf)

较BERT无较大创新,改进点:

  1. 移除NSP预训练任务
  2. 改变mask策略,数据复制10份,统一随机mask

3.7、ERNIE(艾尼)1.0 (https://www.aclweb.org/anthology/P19-1139.pdf)

BERT MLM预训练容易获得字搭配级的信息,对于短语和实体层抽取能力弱。引入外部知识到预训练模型中,提高知识驱动任务,典型的3类任务:

  1. basic-level masking:跟bert一样对单字进行mask
  2. prase-level masking:输入字级别,mask连续短语
  3. entity-level masking:实体识别,实体mask

ERNIE(艾尼)2.0相比于1.0,主要采取了Multi-task-learning(同时学习多任务)以及continue-learning(不同任务组合学习) 词级,结构级,语义级。

 

3.8、XLNET (https://arxiv.org/pdf/1906.08237.pdf)

XLNET针对自回归语言模型单向编码及BERT类自编码语言模型的有偏估计缺点,提出了广义的自回归语言模型预训练方法。XNET提出了一种排列语言模型(PLM),综合了自回归模型和自编码模型的优点,避免其缺点。

3.8.1、排序语言模型

    位置编码不变的情况下,输入序列打乱,预测顺序按原始位置编码预测,上下文按照打乱的看。长度为T的序列,T!种分解方法,模型参数共享,PLM可以学到预测词的所有上下文。最大化如下排序模型:

3.8.2、双流注意力机制的引入

    打乱顺序Transform不知道下一个需要预测的词,为此引入双流自注意机制。Two-stream self-attention有两个分离的self-attention流:

    Query stream:输入仅仅包含预测词的位置信息,Key和Value为上下文中包含内容信息和位置信息的输入,表明我们无法看见预测词的内容信息,该信息是需要我们去预测的;

    Content Stream 主要为 Query Stream 提供其它词的内容向量,其Query输入为包含预测词的内容信息和位置信息,Value和Key的输入为选中上下文的位置信息和内容信息;

两个信息流的输出同样又作为对应的下一层的双信息流的输入。而随机排列机制实际上是在内部用Mask Attention的机制实现的。

 

3.9、ALBERT(https://openreview.net/pdf?id=H1eA7AEtvS)

模型参数变多到一定程度时,模型效果有提升,当复杂到一定程度,增加参数效果反而下降,会出现模型退化。ALBERT提出了两种参数缩减技术,减少模型参数时,性能不会受到太大的影响。

3.9.1、对Embedding因式分解

    在BERT中,Embedding层和影藏层的维度大小一致,E=H。词级别Embedding没有上下文依赖,隐藏层需对上下文进行处理,维度应该高一些,因此采取了一个因子对Embedding层的矩阵进行压缩。简单而言,将one-hot映射到低维空间E,再从E映射到高维H;参数变化为:

O(V*H)=>O(V*E+E*H)

3.9.2、跨层参数共享

    ALBERT采用参数共享机制来提高参数利用率,即多层使用同一模块,使得参数有效减少,参数共享对象为Transform中的feed-forward layer参数和self-attention中的参数。参数共享,模型性能在可接受范围。

3.9.3、句间连贯性损失

    NSP对模型预训练没太大帮助,主要在于负例从不相关语料提取。颠倒负例两段文本信息,强迫预训练模型进行语义学习。

3.10 DistillBert (https://arxiv.org/pdf/1910.01108.pdf)

DistillBert是在bert的基础上用知识蒸馏技术训练出来的小型化bert。整体上来说这篇论文还是非常简单的,只是引入了知识蒸馏技术来训练一个小的bert。具体做法如下:

  1)给定原始的bert-base作为teacher网络。

  2)在bert-base的基础上将网络层数减半(也就是从原来的12层减少到6层)。

  3)利用teacher的软标签和teacher的隐层参数来训练student网络。

训练时的损失函数定义为三种损失函数的线性和,三种损失函数分别为:

1)Lce。这是teacher网络softmax层输出的概率分布和student网络softmax层输出的概率分布的交叉熵(注:MLM任务的输出)。

  2)Lmlm。这是student网络softmax层输出的概率分布和真实的one-hot标签的交叉熵

  3)Lcos。这是student网络隐层输出和teacher网络隐层输出的余弦相似度值,在上面我们说student的网络层数只有6层,teacher网络的层数有12层,因此个人认为这里在计算该损失的时候是用student的第1层对应teacher的第2层,student的第2层对应teacher的第4层,以此类推。

  作者对student的初始化也做了些工作,作者用teacher的参数来初始化student的网络参数,做法和上面类似,用teacher的第2层初始化student的第1层,teacher的第4层初始化student的第2层。

3.11、ELECTRA(https://openreview.net/pdf?id=r1xMH1BtvB)

ELECTRA(Efficiently Learning an Encoder that Classifies Token Replacements Accurately)提出新的预训练模型和框架,把生成式的MLM(Masked language modle)预训练任务替换为判别式的RTD(Replaces token detection)任务。ELECTRA不是掩盖输入,而从小的生成采样的合理的替代令牌来替换部分输入令牌从而破坏输入。然后训练一个判别模型,该模型预测损坏的输入中的每个令牌是否被生成器样本替换。

3.10.1、(RTD)Replaced Token Detection (替代token检测) 

    训练2个神经网络模型,一个生成器G,和一个判别器D。每个神经网络主要由一个编码器构成,将输入序列x=[x1,…,xn]映射为上下文表示h(x)=[h1,…,hn], 对于给定位置 t(仅仅为xt=[mask]),生成器通过 softmax 层输出生成token的概率值:

其中 e 表示 token 嵌入。对于给定位置 t ,判别器预测 token是否为假

训练生成器执行 MLM 任务,给定输入 x=[x1,…,xn] ,MLM 首先选择一组随机位置( 1 到 n 之间的整数)遮盖 m=[m1,m2…,mk],k=[0.15n] ,被选中的位置将会被 [MASK] 替换。本文将其称为 xmask =REPLACE(x,m,[mask])。通过用生成器样本替换被遮盖的令牌来创建一个损坏示例 xcorrupt 并训练判别器预测 xcorrupt   中的哪些令牌与原始输入 x 一致。模型输入如下:

损失函数为:

优化目标:

3.10.2模型扩展

Weight Sharing 建议生成器和判别器之间共享权重来提升预训练的效率。如果两者大小相同,可以直接共享所有权重,但是本文发现小型生成器会更加有效。因为 MLM 在学习这些表示方面特别有效:尽管判别器仅更新输入中存在的令牌或由生成器采样的令牌,但生成器在词汇表上的softmax 会密集更新所有令牌嵌入。另一方面,共享所有编码器权重几乎没有改善,同时带来了要求生成器和判别器具有相同大小的重大缺点。

Smaller Generators 如果生成器和判别器的大小相同,则训练 ELECTRA 每步所需的计算量约为仅使用 MLM 的训练量的两倍。

我们建议使用较小的生成器来减少这一因素。具体来说,我们通过减小层的大小并使其他超参数保持恒定来使模型更小。尽管如此,我们发现判别器大小的 1/4-1/2 的生成器的效果最佳。

 

3.10.3、ELECTRA提升速度原因

1)、masked(replaced) token选择不一样:

BERT随机mask;ELECTRA训练一个简单的MLM,定向选择token,判断预测的词是否被替代了

2)、训练目标不一样

    最终得到的是判别分类器,不必对完整的数据分布进行建模

完整数据分布建模:C-> Rd*|V|,二分分类器C->Rd*2。

 

3.11Transformer-XL

为了帮助理解XLNet,本文对其核心框架Transformer-XL作一个解读。本文发表在ACL2019上,论文想要解决的问题:如何赋予编码器捕获长距离依赖的能力。目前在自然语言处理领域,Transformer的编码能力超越了RNN,但是对长距离依赖的建模能力仍然不足。在基于LSTM的模型中,为了建模长距离依赖,提出了门控机制和梯度裁剪,目前可以编码的最长距离在200左右。在基于Transformer的模型中,允许词之间直接建立联系【self-attention】,能够更好地捕获长期依赖关系,但是还是有限制。

 

Transformer-XL提出原因

 

Transformer编码固定长度的上下文,即将一个长的文本序列截断为几百个字符的固定长度片段(segment),然后分别编码每个片段[1],片段之间没有任何的信息交互。比如BERT,序列长度的极限一般在512。动机总结如下:

  • Transformer无法建模超过固定长度的依赖关系,对长文本编码效果差。
  • Transformer把要处理的文本分割成等长的片段,通常不考虑句子(语义)边界,导致上下文碎片化(context fragmentation)。通俗来讲,一个完整的句子在分割后,一半在前面的片段,一半在后面的片段。

文章围绕如何建模长距离依赖,提出Transformer-XLXLextra long的意思】:

  • 提出片段级递归机制(segment-level recurrence mechanism),引入一个记忆(memory)模块(类似于cachecell),循环用来建模片段之间的联系。
    • 使得长距离依赖的建模成为可能;
    • 使得片段之间产生交互,解决上下文碎片化问题。
  • 提出相对位置编码机制(relative position embedding scheme),代替绝对位置编码。
    • memory的循环计算过程中,避免时序混淆【见model部分】,位置编码可重用。

小结一下,片段级递归机制为了解决编码长距离依赖和上下文碎片化,相对位置编码机制为了实现片段级递归机制而提出,解决可能出现的时序混淆问题。

参考:

https://www.cnblogs.com/sandwichnlp/p/11947627.html

https://zhuanlan.zhihu.com/p/76912493

https://zhuanlan.zhihu.com/p/89763176

https://zhuanlan.zhihu.com/p/90494415

https://www.cnblogs.com/neopenx/p/4370350.html(DA与DAE)

https://www.zhihu.com/question/354070608/answer/885907890 (ELECTRABERT区别

https://blog.csdn.net/qq_28168421/article/details/83663318?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-7.nonecase(bert介绍)

https://zhuanlan.zhihu.com/p/70257427 (xlnet详解)

https://zhuanlan.zhihu.com/p/87562926 (albert)

https://zhuanlan.zhihu.com/p/89522799 (DistillBert

http://www.javashuo.com/article/p-oaoaqsuy-z.html  (DistillBert

https://zhuanlan.zhihu.com/p/70745925 (transform-xl)

https://www.zhihu.com/question/354070608 (ELECTRA)