NLP预训练发展小结二(Bert之后)

本篇博文简要记录基于Transformer的各类自然语言处理预训练模型(自Bert开始)的特点及使用。

1. Bert

BERT(Bidirectional Encoder Representations from Transformers)做的是一个上下文双向的信息编码器;

Bert与之前的ELMo、GPT相比较:

  • ELMo只是拼接LSTM 的正向向量和反向向量,并没有发生交互,所以并不是真正的双向,并且其用的是能力有限的LSTM结构;
  • GPT编码器部分采用的是Transformer的Decoder来训练语言模型,但是训练方式为单向。

Bert预训练任务:

  • 任务一:Masked LM(MLM)

把输入的句子对进行 WordPiece 处理后,随机选 15% 的 token【MASK】掉,然后对【MASK】掉的 token 进行预测。
MLM 任务会引起一个问题:预训练和下游任务输入不一致,因为下游任务的时候,输入是不带【MASK】的,这种不一致会损害 BERT 的性能,这也是后面研究的改善方向之一。BERT 自身也做出了一点缓解,就是对这 15% 要预测的 token 的输入进行一些调整:
80% 用【MASK】代替;
10% 用随机的词 token 替;
10% 保持原来的 token 不变。

  • 任务二:Next Sentence Prediction(NSP)

判断句子对是否是真正连续的句子对。
具体来说,当采样预训练样本时,句子对 A 和 B,B 有 50% 的概率是 A 的真实的后一句;有 50% 的概率是语料库中的随机一句,在预训练时,让模型去学习。

预训练模型应用的两种范式:feature-based & fine-tuning

  • feature-based:代表如EMLo,用于下游任务时,用训练好的词向量作为embedding,去初始化RNN/LSTM/CNN 等网络结构,即预训练模型只提供feature-based的embedding;
  • fine-tunning:代表如 GPT,用于下游任务时,不仅保留了输入embedding,模型里面的参数(如 attention 层、全连接层)也同样保留,在fine-tuning的时候只需在原来的模型上加一些简单的层,就可以应用于具体的下游任务。
把BERT某些层的向量拿出来,作为token的embedding,这些embedding在后面的任务中不更新,即以feature-based方式使用BERT;另一方式即类似于GPT,将BERT整个结构应用到下游任务上。实验证明,BERT 无论是作为 feature-based 范式还是 fine-tuning 范式,效果俱佳。

2. RoBERTa

RoBERTa(Robustly optimized BERT approach)在BERT基础上做了以下改动:

  • 采用更多训练语料
    在 BERT 采用的数据 BOOKCORPUS + English WIKIPEDIA(共 16G)基础上,增加 CC-NEWS(76GB),OPENWEBTEXT(38GB),STORIES(31GB);

  • 采用动态【MASK】
    对于同一个样本,BERT在不同的epoch中【MASK】掉的token不变,而RoBERTa在预训练阶段的每一个step,重新挑选15%的token进行【MASK】;

  • 去掉NSP任务
    RoBERTa是采用去掉NSP任务,而且一个样本是从同一个文档里面进行采样;

  • 增大batch_size
    BERT的batch_size是256,一共训练了1M步;实验证明采用更大的batch_size以及训练更多步可以提高性能,RoBERTa采用的batch_size是8K;

  • 文本编码方式
    BERT 采用的是基于 character level 的 Byte-Pair Encoding(BPE)编码,词表大小是 30K;RoBERTa 采用的是基于 bytes-level 的 BPE 编码,该方法用 bytes(字节)作为基础的子词单元,词表的大小是 50K,好处是可以在不需要引入任何未知字符前提下对任意文本进行编码。

3. ALBERT

ALBERT(A Lite BERT)旨在减少模型参数量,并提出SOP任务:

  • 矩阵分解
    BERT 采用的是 WordPiece,大概有 30K 个 token,采用的 embedding 维度为 768,所以参数量约为 3000 * 768 = 2304000;通过一个矩阵分解去代替本来的 embedding 矩阵,embedding 取为 128,则参数量变为 3000 * 128+128 * 768=482304,参数量变为原来的 20%;

  • 参数共享
    BERT 的 Transformer 共用了 12 层的 encoder,让这 12 层的 attention 层和全连接层层共享参数;

  • SOP任务
    sentence order prediction(SOP)即预测句对的顺序, 正例的构建和NSP是一样的,负例则是将正例的两句话反过来。

  • 模型版本
    albert-base、albert-large、albert-xlarge、albert-xxlarge

4. ERNIE

截至本文发出时,百度共推出ERNIE-1.0、ERNIE-2.0、ERNIE-3.0三个版本的ERNIE预训练模型:

ERNIE1.0从两方面做修改:1.Knowledge Integration型【MASK】 ;2.增加对话数据的任务;
ERNIE2.0 的结构与 ERNIE1.0 、BERT 一样,ERNIE2.0 主要是从修改预训练任务来提升效果;
ERNIE3.0增加了知识图谱等外部信息。

5. ELECTRA

模型架构

NLP预训练发展小结二(Bert之后)

  • 生成器
    首先对一句话里面的 token 进行随机的【MASK】,然后训练一个生成器,对【MASK】掉的 token 进行预测(就是原生 BERT 的 MLM 任务);生成器对【MASK】掉的 token 预测完后,得到一句新的话;
  • 判别器
    将生成器的输出,输入到判别器,判别器判断每个 token,是否是原样本的,还是被替换过的。假如生成器预测出的 token 为原来的 token,那这个 token 在判别器的输出标签里还是算原样本,而不是被替换过的(如上图的 "the",生成器预测为 "the",则 "the" 在判别器中的真实标签就为 original,而不是 replaced)。
上一篇:Win10下Mask RCNN环境配置+踩坑说明,成功运行demo.py


下一篇:AI换脸-简单换脸、人脸对齐、关键点定位与画图