【预训练语言模型】RoBERTa: A Robustly Optimized BERT Pretraining Approach

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


·阅读摘要:
  本文在​​​BERT​​​模型的基础上进行了一些改进,提出了​​RoBERTa​​​模型,并证明了​​RoBERTa​​​比​​BERT​​​的效果更好一些。
·参考文献:
  [1] RoBERTa: A Robustly Optimized BERT Pretraining Approach
  [2] ​​​BERT​​模型讲解,参考博客:​​【文本分类】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding​​

  目前预训练语言模型按时间排:​​ELMo​​​ - ​​GPT​​​ - ​​BERT​​​ - ​​XML​​​ - ​​XLNet​​​ - ​​RoBERTa​​​ - ​​ALBERT​​。基本上越往后的模型效果越好。

  BERT用了16GB的训练数据,XLNet用了126GB数据,RoBERTa用了160GB数据。从个人理解上,XLNet像是为了超越BERT而提出各种花里胡哨trick的模型,而RoBERTa完全是对标XLNet的BERT加强版,从RoBERTa论文的各种设置就能看出来它是想干掉XLNet哈哈。

  本文对​​BERT​​进行复制研究,其中包括对超参数调整和训练集大小的影响的仔细评估,并提出了一种改进的训练BERT模型的方法,主要有4点:

  1、动态掩码机制​​(Dynamic Masking)​​​  2、取消下一个句子预测机制​​(Next Sentence Prediction, NSP)​​,更改模型输入形式
  3、训练模型的时间更长,批次更大,数据更多,更大的字节对编码​​(Byte-Pair Encoding, BPE)​​词典
  4、全长序列训练

[1] 动态掩码机制

  首先介绍BERT模型中的掩码语言模型​(Masked Language Model, MLM)​

  对于一条样本,随机选择序列中的词,然后用特殊词​​[MASK]​​​替换。​​MLM​​​的目标是预测掩码时的交叉熵损失。​​BERT​​​统一选择15%的输入词用于可能的替换。在选定的词中,80%的时间被替换为​​[MASK]​​,10%的时间保持不变,剩下10%的时间被随机替换成词典中的任意词。

  原始的​​BERT​​​实现在数据预处理期间执行一次​​masking​​,然后直接用于训练,但是这样会在每个时期对每个训练实例使用相同的掩码。

  为了避免这个情况,​​BERT​​会把训练数据被复制10次,以便在40个训练时期内以10种不同的方式对每个序列进行掩码。

【注一】其实它这样还是在数据预处理时只执行一次​​masking​​。而且训练数据被复制10次,可能不如扩大到10倍的数据集。

  介绍RoBERTa模型中的动态掩码​(Dynamic Masking)​

  在动态掩蔽中,每次向模型喂输入序列时,都会动态生成掩码。

【注二】说起来比较简单。

[2] 取消下一个句子预测,更改模型输入形式

  首先介绍BERT模型中的下一个句子预测​(Next Sentence Prediction, NSP)​

  ​​NSP​​是一种二进制分类损失,用于预测两个片段在原始文本中是否相互连续。通过从文本语料库中提取连续的句子来创建正例,反例是通过对不同文档的片段进行配对来创建的。正反两个例子的抽样概率相等。NSP目标旨在提高下游任务的性能,如自然语言推理,这需要对句子对之间的关系进行推理。

  ​RoBERTa模型为什么要取消​NSP​

  原因一: 近年来,有人质疑NSP的必要性。

  原因二: 作者做实验验证了NSP是没有必要的。作者比较了几种不同的模型输入形式:

  · ​​SEGMENT-PAIR+NSP​​​:这是​​BERT​​​中使用的原始输入格式,使用NSP Loss。每个输入都有一对段,每个段可以包含多个自然语句,但总的组合长度必须小于512个标记。
  · ​​​SENTENCE-PAIR+NSP​​​:每个输入都包含一对自然语句,可以从一个文档的连续部分中采样,也可以从单独的文档中采样。由于这些输入明显短于512个令牌,增加了批大小,以便令牌总数保持与​​SEGMENT-PAIR+NSP​​​相似,保留NSP Loss。
  · ​​​FULL-SENTENCES​​​:每个输入都包含从一个或多个文档连续采样的完整句子,因此总长度最多为512个标记。输入可能跨文档。当采样到一个文档的末尾时,对下一个文档中的句子进行采样,并在文档之间添加一个额外的分隔符标记。不使用NSP Loss。
  · ​​​DOC-SENTENCES​​​:输入的构造类似于​​FULL-SENTENCES​​​,只是它们不能跨文档。在文档末尾附近采样的输入可能短于512个令牌,因此在这些情况下动态地增加批大小,以实现与​​FULLSENTENCES​​相同数量的总令牌。我不使用NSP Loss。

【注三】相当严谨。

  以下是实验结果:

【预训练语言模型】RoBERTa: A Robustly Optimized BERT Pretraining Approach_预训练语言模型

[3] 训练模型的时间更长,批次更大,数据更多,更大的字节对编码词典

【注四】关于“训练模型的时间更长,批次更大,数据更多”文章说了很多,总结起来就是:大力出奇迹。主要说一下字节对编码。

  字节对编码​​(Byte-Pair Encoding, BPE)​​​是字符和单词级表示之间的混合,允许处理自然语言语料库中常见的大型词汇。​​BPE​​​不依赖于完整的单词,而是依赖于通过对训练语料库进行统计分析而提取的子单词单元。​​BPE​​​词汇表的大小通常在10K-100K子字单位之间。然而,在对大型和多样的语料库建模时,​​unicode​​​字符可以占到词汇表的相当大的一部分。Radford等人(2019)介绍了一种巧妙的​​BPE​​​实现,它使用字节而不是​​unicode​​​字符作为基本子字单位。使用字节可以学习中等大小(50K单位)的子单词词汇表,仍然可以对任何输入文本进行编码,而不会引入任何​​[UNK]​​标记。

  原始​​BERT​​​实现使用大小为30K的字符级​​BPE​​​词汇表,该词汇表是在使用启发式标记化规则预处理输入后学习的。作者使用包含50K个子字单元的更大字节级​​BPE​​​词汇来训练​​BERT​​,而不对输入进行任何额外的预处理或标记化。

[4] 全长序列训练

  ​​RoBERTa​​​模型用最多T=512个标记的序列进行预训练。与​​BERT​​​模型不同,​​RoBERTa​​​模型不随机注入短序列,也不在前90%的更新中使用减少的序列长度进行训练。​​RoBERTa​​模型只训练全长序列。

[5] 实验效果总结

  改进的预训练程序​​RoBERTa​​​模型在​​GLUE​​​、​​RACE​​​和​​SQuAD​​​上实现了最先进的结果,无需对​​GLUE​​​进行多任务微调或对​​SQuAD​​进行额外数据。


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6