内容纲要

文章目录

  1. 训练数据
  2. 动态掩码 VS 静态掩码
  3. 下一句预测
  4. Batch Size
  5. 文本编码
  6. 实验结果与分析
  7. 实验四

欢迎转载,作者:Ling,注明出处:深度学习:前沿技术-RoBERTa

简介

RoBERTa (A Robustly Optimized BERT Pretraining Approach):提出了一系列改进优化BERT的方法,从而达到更好的效果。

RoBERTa VS BERT

  • 训练数据:RoBERTa采用更多高质量训练数据

file

  • 模型参数:RoBERTa采用更大模型参数(1024 块 V100 GPU 训练了 1 天的时间)。
  • Batch Size:RoBERTa采用更大Batch Size,256-8000不等。
  • 下一个句子预测:RoBERTa删除了下一句子预测NSP
  • 掩码:两者都通过掩码的方式,训练Pre-train模型。

file

  • 文本编码:

    • Byte-Pair Encoding(BPE)是字符级和词级别表征的混合,如下图,字符和词根据频率构成最终词表。

file

  • RoBERTa采用更大的BPE词汇表。

file

改进分析

本节探讨在保持模型架构不变的情况下,哪些量化指标对预训练BERT模型有影响。首先维持训练BERT模型架构不变,其配置与BERT-base相同(L = 12, H = 768, A = 12,110M 参数)。

训练数据

  • BOOKCORPUS 和英文维基百科:原始 BERT 的训练集,大小 16GB 。
  • CC-NEWS:包含2016年9月到2019年2月爬取的6300万篇英文新闻,大小 76 GB(经过过滤之后)。
  • OPENWEBTEXT:从 Reddit 上共享的 URL (至少3个点赞)中提取的网页内容,大小 38 GB 。
  • STORIES:CommonCrawl 数据集的一个子集,包含 Winograd 模式的故事风格,大小 31GB 。

新增加CC-News, OPENWEBTEXT, STORIES

动态掩码 VS 静态掩码

  • 静态掩码(Static Masking):在数据预处理期间执行一次掩码,得到一个静态掩码。即每个样本只会进行一次随机mask(每个epoch都重复),后续的每个训练步都采用此相同的mask。
  • 修改版静态掩码(Modified Static Masking):在预处理的时候将数据集拷贝 10 次,每次拷贝采用不同的 mask(总共40 epochs,所以每一个mask对应的数据被训练4个epoch)。这等价于原始的数据集采用10种静态 mask 来训练 40个 epoch。
  • 动态掩码(Dynamic Masking):每次向模型输入一个序列时都会生成新的掩码模式。即不在预处理的时候执行 mask,而是在每次向模型提供输入时动态生成 mask,所以是时刻变化的。

实验结果

file

其中Reference是BERT使用的静态掩码,而Static是修改版静态掩码,dynamic是动态掩码。从表中我们可以看出:动态掩码在大多数情况下好于静态掩码,所以文章统一采用动态掩码。

下一句预测

原始的BERT包含2个任务,预测被mask掉的单词(MLM)和下一句预测(NSP)。鉴于最近有研究(Lample and Conneau,2019; Yang et al., 2019; Joshi et al., 2019)开始质疑NSP的必要性。所以RoBERTa实验了始终方法:

  • SEGMENT-PAIR + NSP:输入包含两部分,每个部分是来自同一文档或者不同文档的 segment (segment 是连续的多个句子),这两个segment 的token总数少于 512 。预训练包含 MLM 任务和 NSP 任务。这是原始 BERT 的做法。
  • SENTENCE-PAIR + NSP:输入也是包含两部分,每个部分是来自同一个文档或者不同文档的单个句子,这两个句子的token 总数少于 512 。由于这些输入明显少于512 个tokens,因此增加batch size的大小,以使 tokens 总数保持与SEGMENT-PAIR + NSP 相似。预训练包含 MLM 任务和 NSP 任务。
  • FULL-SENTENCES:输入只有一部分(而不是两部分),来自同一个文档或者不同文档的连续多个句子,token 总数不超过 512 。输入可能跨越文档边界,如果跨文档,则在上一个文档末尾添加文档边界token 。预训练不包含 NSP 任务。
  • DOC-SENTENCES:输入只有一部分(而不是两部分),输入的构造类似于FULL-SENTENCES,只是不需要跨越文档边界,其输入来自同一个文档的连续句子,token 总数不超过 512 。在文档末尾附近采样的输入可以短于 512个tokens, 因此在这些情况下动态增加batch size大小以达到与 FULL-SENTENCES 相同的tokens总数。预训练不包含 NSP 任务。

实验结果

file

结果分析

  • 采用NSP loss的情况下,SEGMENT-PAIR 优于SENTENCE-PAIR(两句话)。单个句子会损害下游任务的性能,因为模型无法学习远程依赖。
  • 采用无NSP loss的情况下,DOC-SENTENCES优于FULL-SENTENCES,说明不要跨文档更优。
  • 采用无NSP loss比采用NSP loss可以略微提高性能。

但是 DOC-SENTENCES 策略中,位于文档末尾的样本可能小于 512 个 token。为了保证每个 batch 的 token 总数维持在一个较高水平,需要动态调整 batch-size 。出于处理方便,后面采用FULL-SENTENCES输入格式。

Batch Size

实验结果

file

  • 其中bsz是batch szie,steps是训练步数,为了保证bsz*steps近似相同,所以采用了不同bsz和steps。
  • lr是学习率
  • ppl是困惑度,越小越好。
  • 其他两项是不同任务的准确率。

结果分析

采用大Large Batch Size有助于提高性能。至于batch size值的极限探索,留待后续研究。

文本编码

  • 基于 char-level :原始 BERT 的方式,它通过对输入文本进行启发式的词干化之后处理得到。
  • 基于 bytes-level:与 char-level 的区别在于bytes-level 使用 bytes 而不是 unicode 字符作为 sub-word 的基本单位,因此可以编码任何输入文本而不会引入 UNKOWN 标记。

本文采用的是Byte-Level方法。

结果分析

当采用 bytes-level 的 BPE 之后,词表大小从3万(原始 BERT 的 char-level )增加到5万。这分别为 BERT-base和 BERT-large增加了1500万和2000万额外的参数。

之前有研究表明,这样的做法在有些下游任务上会导致轻微的性能下降。但是本文作者相信:这种统一编码的优势会超过性能的轻微下降。且作者在未来工作中将进一步对比不同的encoding方案。

RoBERT

最终RoBERT采用了如下方法:

  • Dynamic Masking
  • FULL-SENTENCES without NSP loss
  • Larger Batch Size
  • Larger Byte-level BPE
  • 更大训练数据
  • 更多训练步数

实验结果与分析

实验一

为了将这些因素与其他建模选择(例如,预训练目标)的重要性区分开来,首先按照BERT-Large架构(L=24,H=1024,A=16355m)对RoBERTa进行训练。

file

结果分析:更多训练数据,更多训练步数,可以增加性能。

实验二

GLUE实验,所有结果均采用24层架构,RoBERTa采用五次运行中位数。测试集上RoBERTa 的结果是单任务模型的集合。对于RTE, STS 和MRPC,从 MNLI 模型开始,而不是基线预训练模型。平均值可以从GLUE 排行榜获得。

file

结果分析:当时结果普遍优于BERT和XLNet,后来XLNet部分结果赶超。

实验三

SQuaAD结果。†表示取决于其他外部训练数据的结果。RoBERTa 仅在开发和测试设置中使用提供的SQuAD 数据。

file

结果分析:如果仅使用SQuAD数据,RoBERTa普遍优于BERT和XLNet

实验四

file

结果分析:RoBERTa优于其他模型。

总结

在预训练BERT模型时,本文仔细评估一些设计决策。发现通过更长时间地训练模型,处理更多数据,可以显著提高模型性能;删除下一句预测目标(NSP); 在更长的序列上训练;并动态地改变应用于训练数据的遮蔽模式。上述预训练改进方案,即为本文所提出的RoBERTa,该方案在GLUE,RACE和SQuAD上实现了目前最好的结果。备注:在GLUE上没有进行多任务微调,在SQuAD上没有使用附加数据。这些结果说明这些先前被忽视的设计决策的重要性,并表明BERT的预训练目标与最近提出的替代方案相比仍然具有竞争性。