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

Posted 征途黯然.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了预训练语言模型RoBERTa: A Robustly Optimized BERT Pretraining Approach相关的知识,希望对你有一定的参考价值。

·阅读摘要:
  本文在BERT模型的基础上进行了一些改进,提出了RoBERTa模型,并证明了RoBERTaBERT的效果更好一些。
·参考文献:
  [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。

【注三】相当严谨。

  以下是实验结果:

[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模型在GLUERACESQuAD上实现了最先进的结果,无需对GLUE进行多任务微调或对SQuAD进行额外数据。

以上是关于预训练语言模型RoBERTa: A Robustly Optimized BERT Pretraining Approach的主要内容,如果未能解决你的问题,请参考以下文章

使用领域文本预训练 BERT/RoBERTa 语言模型,估计需要多长时间?哪个更快?

为不同的任务、情绪分析微调预训练的西班牙语 RoBERTa 模型

历史最全最新中文自然语言处理预训练模型汇总分享-内含免费下载地

REALM:将检索集成到语言表示模型中

如何获得 Hugging Face 预训练模型的大小?

REALM:将检索集成到语言表征模型,搞定知识密集型任务!