预训练语言模型的训练目标不是某一参数矩阵而是整个网络,模型输入一个句子,输出是句子中各 token 表示, 能根据上下文不同动态得到词向量。
预训练语言模型 - 图1
按照时间线帮你梳理10种预训练模型

1.ELMO 2018.03 华盛顿大学

“Embedding from Language Models”

  • 特点:传统的词向量(如 word2vec、Glove、fasttext)是静态的、上下文无关的,而 ELMo 解决了一词多义的问题;ELMo 采用了双层双向 LSTM。
  • 缺点:LSTM 是串行,训练时间长;ELMo 采用向量拼接,相比 tansformer, 特征提取能力是不够的。
  • 使用分为两阶段:预训练 + 应用于下游任务,本质就是根据当前上下文对 word embeddding 进行动态调整的过程:

预训练语言模型 - 图2
1)用语言模型进行预训练
左边的前向双层 LSTM 是正向编码器,顺序输入待预测单词 w 的上文;右边则是反方向编码器,逆序输入 w 的下文。训练好之后,输入一个新的句子 s, 每个单词都得到三个 Embedding: ①单词的 word embedding; ②第一层关于单词位置的 embedding; ③ 第二层关于语义信息的 embedding。(上述三个embedding、LSTM网络结果均为训练结果)
2)做下游任务时,从预训练网络中提取对应单词的网络各层的 word embedding 作为新特征补充到下游任务中。比如在 QA 任务中,对三个 embedding 分配权重,整合生成新的 embedding。

2.GPT 2018.06 OpenAI

“Generative Pre-Training”

  • 优点:使用了 Transformer 捕捉更长的范围信息,优于 RNN;并行,快速
  • 缺点:需要对输入数据的结构调整;单向
  • tansformer 的 decode 里面有三个子模块,GPT 只用了第一个和第三个子模块:

预训练语言模型 - 图3

  • 与 ELMo 的不同:①只用了 tansformer 的 decode 模块提取特征,而不是 Bi-LSTM;堆叠 12 个。②单向(根据上文预测单词,利用 mask 屏蔽下文)
  • GPT 依然分为两阶段:预训练 + 应用于下游任务:

1)预训练:

预训练语言模型 - 图4
2)应用于下游任务:
预训练语言模型 - 图5
①分类任务:加上起始和终结符号即可。
②句子关系判断问题:比如 Entailment,两个句子中间加个分隔符。
③文本相似性判断问题:把两个句子的顺序颠倒下做出两个输入即可,这是为了告诉模型句子的顺序不重要。
④多选项问题,则多路输入,每一路把文章和答案选项拼接作为输入即可。
由于单向地用上文预测下一个单词,GPT 比 BERT 更适合做文本生成的任务。效果:在 12 个任务里,9 个达到了最好的效果,有些任务性能提升非常明显。

3.BERT 2018.10 Google

“Bidirectional Encoder Representations from Transformers”

  • 优点:效果好、普适性强、效果提升大
  • 缺点:硬件资源的消耗巨大、训练时间长;预训练用了 [MASK] 标志,影响微调时模型表现。
  • 与 GPT 的区别:① BERT 是双向;② 用的是 transformer 的 encoder (GPT 用的是 decoder,ELMo用的 Bi-LSTM)③多任务学习方式训练:预测目标词和预测下一句

预训练语言模型 - 图6

  • 预训练分为三个步骤:

1)Embedding
三个 Embedding 求和而得,分别是
① token embedding :词向量,单首词是 [CLS] 标志,可用于分类任务
② segment embedding: 用 [SEP] 标志将句子分成两段,因为预训练不光做 LM 还要做以两个句子为输入的分类任务
③ position embedding :和之前文章中的 tansformer 不同,不是用三角函数学习出来的
2)预测目标词 Masked LM
随机挑选一个句子中 15% 的词,用上下文来预测。这 15% 中,80% 用[mask]替换,10% 随机取一个词替换,10% 不变。用非监督学习方法预测这些词。
3)预测下一句 Next Sentence Prediction
选择句子 A+B,其中 50% 的 B 是 A 的下一句, 50% 为语料库中随机选取。

  • BERT 非常强大,在 11 项任务中夺得 SOTA结果,可分为四大类:句子对分类任务、单句子分类任务、问答任务、单句子标注任务。

===============================================

  1. ELMo 用 Bi-LSTM; GPT 用 tansformer 的 decode;BERT 用 tansformer 的 endecode。
  2. ELMo:双向; GPT:单向;BERT:双向
  3. ELMO:解决一词多义;GPT:特征更丰富;BERT双向/多任务训练/能捕捉更长距离的依赖。
  4. GPT:适合文本生成等任务;BERT:适合预测任务。
  5. GPT-2,以及一些诸如 TransformerXL 和 XLNet 等后续出现的模型,本质上都是自回归模型,而 BERT 则不然,虽然没有使用自回归机制,但 BERT 获得了结合单词前后的上下文信息的能力,从而取得了更好的效果。而其中XLNet虽然使用了自回归,但引入了一种能够同时兼顾前后的上下文信息的方法,即双流自注意力。

==============================================
自回归和自编码的区别:

  • 自回归:时间序列分析或者信号处理领域常用词汇,根据上文预测当前词。
  • 自编码:是无监督的,mask 掉一个词,然后根据上下文预测这个词。

    4.XLNet 2019.06 CMU+Google

    XLNet 借鉴 Transformer-XL,故称 XLNet,其参数规模远大于 BERT

  • 基本思想:通过排列组合的方式将一部分下文单词放到上文单词的位置,但实际形式上还是一个从左到右预测的自回归语言模型。

  • 优化

1)采用自回归模型 (AR , Autoregressive) 替代自编码 (AE , Autoencoding ) 模型,解决 bert 中 mask 带来的负面影响(预训练和微调数据的不统一)
2)双流注意力机制(新的分布计算方式,来实现目标位置感知)
3)引入 transformer-XL

  • 双流注意力机制

该机制:1.预测当前的 x 时,只包含其位置信息,不包含内容信息。2)预测x 后的其余 tokens 时,包含 x 的内容信息
1)content representation 内容表述,下文用 预训练语言模型 - 图7 表示,同时编码上下文和 预训练语言模型 - 图8
预训练语言模型 - 图9
预训练语言模型 - 图10
2) query representation 查询表述,下文用 预训练语言模型 - 图11 表示,同时编码上下文和 预训练语言模型 - 图12 和目标的位置信息 预训练语言模型 - 图13,但不包含目标的内容信息 预训练语言模型 - 图14
预训练语言模型 - 图15
预训练语言模型 - 图16

  • 引入 transformer-XL

1) 相对位置编码:为了区分某个位置编码到底时哪一个片段里的。此值为训练所得,用来计算注意力的权值。(bert 采用绝对位置编码)
2) 片段循环机制:解决了超长序列的依赖问题,因为前一片段被保留了,不需要重新计算;同时加快了训练速度
XLNet 在长文本的阅读理解类任务上性能提升更明显,性能大幅超过 Bert;XLNet 的预训练模式同时也天然符合序列生成任务,如文本摘要。

5.ERNIE 2019.4 百度

“Enhanced Representation through Knowledge Integration”
ERNIE 是基于 BERT 做的优化,主要针对中文任务。ERNIE 利用的仍然是 transformer 的 encode 部分,且结构一样,但是并不共享权重。

  • 对 BERT 的优化

1)三种 mask:字层面、短语层面、实体层面(引入外部知识,模型可获得更可靠的语言表示)
2)用大量中文数据集、异质数据集
3)为适应多轮的贴吧数据,引入对话语言模型的任务

  • 预训练过程

1)连续用大量的数据与先验知识连续构建不同的预训练任务(词法级别、语法级别、语义级别)
2)不断用预训练任务更新 ERNIE 模型

  • ERNIE 的 mask 与 BERT 的区别:

预训练语言模型 - 图17

  • ERNIE 的 mask 策略分为三个阶段:

1) 采用 BERT 的方式,字级别,即 basic-level-masking,随机 mask 中文某个字
2)词组级别的 mask,即 phrase-level masking, mask 掉句子中一部分词组(预测这些词组的阶段,词组信息被编码到词向量中)
3) 实体级别的 mask,即 entity-level masking,如人名、机构名等,先分析句子的实体,然后随机 mask(模型训练完后,学到实体信息)。
预训练语言模型 - 图18

  • BERT中只是 mask 了单个 token,但在中文中多以短语或实体为单位,分成单字 mask 并不能很好地表达语义、句法等。所以 ERNIE 引入了三种 mask 方式。

字和词的区别

  • 以字为单位的好处:参数更少,不容易过拟合;不依赖于分词算法,避免边界切分错误;没那么严重的稀疏性,基本上不会出现未登录词。
  • 以词为单位的好处:序列变短,处理速度更快;在文本生成任务上,能缓解 Exposure Bias问题;词义的不确定性更低,降低建模复杂度。

    6.BERT-wwm 2019.07 哈工大+讯飞

    “BERT- whole word mask”
    BERT-wwm 是对 BERT-base 的改进:用[MASK] 替换词而非单字(中文的词=词语,英文的词=word/字),如:
    预训练语言模型 - 图19

  • BERT-wwm-ext 与 BERT-wwm

1)BERT-wwm 使用的语料:中文维基+通用数据(百科、新闻、问答等数据,总词数达 5.4 B)
2) BERT-wwm-ext 使用的语料:中文维基

  • 与 ERNIE 的区别

不仅仅是连续mask实体词和短语,而是连续mask所有能组成中文词语的字。如果一个完整的词的部分字被mask,则同属该词的其他部分也会被mask,即对组成同一个词的汉字全部进行Mask,即为全词Mask,即分词后再mask。这样做增加了语义信息。

7.RoBERTa 2019.07 Facebook

“ a Robustly Optimized BERT Pretraining Approach”
RoBERTa 在模型层面没有改变 BERT,改变的只是预训练的方法。主要是在 BERT 的基础上做精细化调参,可以看作是终极调参,最后性能不仅全面碾压 BERT ,且在大部分任务上超越了 XLNet。

  • 对 BERT 的调整

1)训练数据更多(160G),BERT 是 16G
2)batch_size 更大(250~8000),训练时间更长
3)训练序列更长
4)不再使用 NSP(Next Sentence Prediction)任务,移除了 next predict loss
5)动态 masking,让数据不重复
6)文本编码采用更大的字节级别的 BPE 词汇表(Byte-Pair Encoding), 而 BERT 是字符级
BERT 是静态 mask,在数据处理的过程进行;而 RoBERTa 采用动态 mask,在每次输入数据的时候进行(每个epoch 每个 sequence 被 MASK 的方式不相同,提高随机性)

8.ERNIE2.0 2019.07 百度

ERNIE2.0是ERNIE的升级版。百度ERNIE2.0 的出现直接刷新了GLUE Benchmark。

  • 对ERNIE的优化:多任务训练(逐次增加7大任务)

预训练语言模型 - 图20

  • 引入Task Embedding,区别不同的任务。训练方法:先训练任务1,保存模型;加载模型,训练任务1、任务2;以此类推,直到训练完7个任务。相当于递进式的学习,如 ERNIE 1.0 突破完形填空 ERNIE 2.0 突破选择题,句子排序题等不断递进更新。
  • 效果:在ERNIE1.0的基础上有全面的提升,尤其是在阅读理解任务上

    9.BERT-wwm-ext 2019.07 哈工大+讯飞

    BERT-wwm-ext 是一个中文预训练语言模型,BERT-wwm的升级版。BERT-wwm-ext采用了与BERT以及BERT-wwm一样的模型结构,同属base模型,由12层Transformers构成。其实就是增加数据量和训练次数来提升效果。

  • 对BERT-wwm的改进:

1)预训练数据集做了增加,次数达到5.4B;
2)训练步数增大,训练第一阶段1M步,batch size为2560;训练第二阶段400K步,batch size为2560。

  • 在各个任务上的效果:1.中文简体阅读理解。2.中文繁体阅读理解。3.自然语言推断

    10.ALBERT 2019.10 Google

    ALBERT也是采用和BERT一样的Transformer的encoder结果,激活函数使用的也是GELU。但ALBERT用了全新的参数共享机制,参数量相比BERT来说少了很多(小10倍+)。简单来说,就是:参数更少,效果更好。

  • ALBERT的改进/贡献:

1)提出了两种减少内存的方法(因式分解、参数共享)
2)改进了 BERT 中的 NSP 的预训练任务,提升了训练速度
3)提升了模型效果

  • ALBERT的改进有三个方面:

1)对Embedding进行因式分解
BERT中及XLNet和RoBERTa中,词嵌入大小 E 和隐藏层大小 H 相等的,H =E=768;而ALBERT认为,词嵌入学习单个词的信息,而隐藏层输出包含上下文信息,应该 H>>E。所以 ALBERT 的词向量的维度小于 encoder 输出值维度。而且由于词典较大,词嵌入维度太大会导致,反向传播时更新的内容稀疏。由于上述两个原因,ALBER用了因式分解的方法降低参数量。
先把one-hot向量映射到一个低维度的空间,大小为 E,然后再映射到一个高维度的空间(相当于两次线性变换),从而把参数量从 O(V×H)O(V×H)O(V×H) 降低到了 O(V×E+E×H)O(V×E+E×H) O(V×E+E×H)。
2)跨层参数共享
Transformer中共享参数有:只共享全连接层;只共享attention层。ALBERT结合上述两种,全连接层与attention层都进行参数共享。是减少参数的更主要的方法。参数减少很多,同时性能提升。除了训练速度加快,网络震荡幅度也变小了(参数共享可以稳定网络参数
3)句间连贯性损失(SOP,sentence-order prediction 句子顺序预测)
【NSP 任务】正样本:同一个文档的两个连续句子;负样本:两个连续句子交换顺序
【SOP 任务】正样本:同一个文档的两个连续句子;负样本:不同文档的句子
在降低参数量的两个方式中,参数共享的贡献远远大于因式分解。减少总运算量,是一个复杂艰巨的任务,ALBERT在训练时速度确实提升了,但在预测时仍然和BERT一样。

11.ELECTRA 2019 最佳NLP预训练模型

预训练语言模型系列—-ELECTRA
ELECTRA: 超越BERT, 19年最佳NLP预训练模型
预训练语言模型 - 图21
ELECTRA模型主要包含一个生成器和一个判别器,其中生成器用于将被MASK操作之后产生的序列生成一个新的序列,而判别器用于判别新序列中的每一个token是否是原始token,此时对于生成器而言,主要采用的是MLM的训练方式,而对于判别器而言,严格来说就是一个二分类操作,可以采用交叉熵的训练方式。
在微调阶段,即预训练完成之后应用于下游任务时,主要是将生成器模型抛弃,而保留判别器模型,也就是说微调阶段直接将序列作为判别器模型的输入进行下游任务。
MLM的G-BERT(生成器)来对输入句子进行更改,然后丢给D-BERT(判别器)去判断哪个字被改过
生成器的大小在判别器的1/4到1/2之间效果是最好的。作者认为原因是*过强的生成器会增大判别器的难度

BERT虽然对上下文有很强的编码能力,却缺乏细粒度语义的表示

12.BANG 2021 微软研究院

自回归与非自回归模型不可兼得?预训练模型BANG全都要!
BANG 在大规模预训练中,通过考虑遮盖任意长度的前文来沟通自回归和非自回归生成;提出跨流可见的多流注意力机制来实现高效的预训练,所有单词在考虑到任意长度前文被遮盖的前提下都可被并行预测;