ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-10-02 16:02:07  阅读:173  来源: 互联网

标签:NLP 训练 BERT Bert MASK 任务 token embedding 小结


本篇博文简要记录基于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

模型架构

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

标签:NLP,训练,BERT,Bert,MASK,任务,token,embedding,小结
来源: https://www.cnblogs.com/pythonfl/p/15362048.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有