RoBERTa: A Robustly Optimized BERT Pretraining Approach

  • tag: #ReadPaper #NLP

Q1 论文试图解决什么问题?

如何使用更好的超参数与数据集对 BERT 进行充分的训练。

Q2 这是否是一个新的问题?

学疏才浅,不清楚,但应该是的。

不谈 novelty, 自从 BERT 提出后,在其框架上做出一些改动获得一些效果,这种想法应该是显而易见的。

Q3 这篇文章要验证一个什么科学假设?

调参后能否打过 BERT。

BERT 还有哪些改进空间。

Q4 有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员?

Self-training methods such as ELMo (Peters et al., 2018), GPT (Radford et al., 2018), [[BERT]] (Devlin et al., 2019), XLM (Lample and Conneau, 2019), and XLNet (Yang et al., 2019) have brought significant performance gains, but it can be challenging to determine which aspects of the methods contribute the most.

Q5 论文中提到的解决方案之关键是什么?

Our modifications are simple, they include:

  1. training the model longer, with bigger batches, over more data
  2. removing the next sentence prediction objective
  3. training on longer sequences(训练序列更长)
  4. dynamically changing the masking pattern applied to the training data

总而言之两句话,动态掩码,大力出奇迹(8 × 32GB Nvidia V100 GPUs,训练集 161GB)

We pretrain our model using 1024 V100 GPUs for approximately one day.

Q6 论文中的实验是如何设计的?

Static vs. Dynamic Masking

  • 静态掩码:原 BERT 是在数据预处理阶段进行一次掩码操作,后续不发生变化,因此每个 epoch 都是重复的。作者引入了静态编码的概念,即为了避免在每个 epoch 中对每个训练实例使用相同的掩码,故将训练数据复制 10 次,以便在 $n$ 个 epochs 中,可以用 10 种不同的方式掩码每个序列。因此,在训练过程中,每个训练序列用相同的掩码被观看 $n/10$ 次。
  • 动态掩码:每次向模型输入一个序列时,都会生成新的掩码,所以是时刻变化的,不需要预先计算并保存。

实验发现,用静态掩码重新实现的性能与原始的 BERT 模型相似,但动态掩码效果接近或略好。

鉴于这些结果和动态掩码的额外效率优势,在其余的实验中使用了动态掩码。

Model Input Format and Next Sentence Prediction

在原始的 BERT 预训练过程中,模型观察到的两个句子,它们要么是从同一个文档(p=0.5)连续采样,要么是从不同的文档中采样。除了掩码语言模型目标外,该模型还通过 NSP 损失来预测这两个句子是否连在一起。

BERT 作者认为去除 NSP 会导致性能下降,但 (Lample and Conneau, 2019; Yang et al., 2019; Joshi et al., 2019) 表示了怀疑。

  • SEGMENT-PAIR+NSP:BERT 的原始输入,总长度不超过 512 tokens
  • SENTENCE-PAIR+NSP:输入一对句子,每一对句子的长度远小于 512 tokens,所以使用更大的 batch size,输入是一对句子,可能来自同一文档或不同文档
  • FULL-SENTENCES:没有 NSP,不会截断句子,句子来自同一个文档或不同文档的连续句子,输入可能跨越文档,如果跨文档,则在上一个文档末尾添加文档边界 token
  • DOC-SENTENCES:没有 NSP,输入来自同一个文档的连续句子

实验发现,使用 SENTENCE-PAIR 会损害下游任务的性能,论文假设这是因为模型无法学习长期依赖关系所导致的。

不采用 NSP LOSS 可以轻微提升模型的效率。

同时发现 DOC-SENTENCES 的效果优于 FULL-SENTENCES 效果,因为 DOC-SENTENCES 任务中的 batch size 是动态调整的。

Training with large batches

过去在机器翻译方面的工作表明 (Ott et al., 2018),当学习率适当提高时,使用非常大的批次进行训练,可以提高优化速度和 end-task 的性能。

作者发现大的 batch size 效果更好(不过 2K 比 8K 的好一些)。

Chinese-BERT-wwm 也提到了:

另外一个公认的因素:降低 batch size 会显著降低实验效果,具体可参考 BERT,XLNet 目录的相关 Issue。

Text Encoding

BERT-base 中采用 WordPiece Encoding 进行分词。其主要形式就是字节对编码(BPE),即字符级和单词级表示形式的混合体,可以处理自然语言语料库中常见的大词汇。BPE 依赖于通过对训练语料库进行统计分析提取的子词单元,而不是完整的单词。BPE 算法的词表大小通常在 10K-100K 之间,词表大多数元素都是 unicode 编码。

Radford et al. (2019)介绍了一种巧妙的 BPE 实现,它使用字节而不是 unicode 字符作为基本子字单元。使用字节可以学习中等大小(50K 个单位)的子单词词汇表,它仍然可以对任何输入文本进行编码,而不引入任何“unknown”标记。作者基于此,将其增大到了 50K,相对于 BERTbase 和 BERTlarge 会增加 15M/20M 的参数。

这里就牵引出了 out of vocabulary words 这个概念,还没学到,先挖坑。

Q7 用于定量评估的数据集是什么?代码有没有开源?

GLUE, SQuAD, RACE

预训练数据是 CC-NEWS(76GB)等(BOOKCORPUS: 16GB, OPEN WEB TEXT: 38GB, STORIES:31GB)

代码已 开源

Q8 论文中的实验及结果有没有很好地支持需要验证的科学假设?

match state-of-the-art results on 4/9 of the GLUE tasks(MNLI, QNLI, RTE and STS-B), RACE and SQuAD

Q9 这篇论文到底有什么贡献?

通过实验,证明了通过更加精心的调参设计和更大的数据(新增一个 76GB 的英文新闻数据集 CC-NEWS,以及其它),BERT 仍有提升空间。

Q10 下一步呢?有什么工作可以继续深入?

  1. Studying architectural changes, including larger architectures, is an important area for future work.
  2. We leave further exploration of the limits of large batch training to future work.
  3. A more detailed comparison of these encodings is left to future work.
  4. 可解释性

其它

类似的对 BERT 进行改进的模型有很多,举两个例子(由于相关论文还没看完,可能不准确)。

  1. ERNIE(百度公司):针对 BERT 中的 MLM 任务做了一些改进。BERT 中只是 mask 了单个 token,但是在语言中,很多时候都是以短语或者实体存在的,如果不考虑其相关性,就可能无法很好地表达句法、语义等信息,因此引入了三种 mask 的方式,分别对 token,entity,phrase 进行 mask。
  2. BERT-wwm(哈工大):Whole Word Masking,全词掩码,对分词进行 mask
  3. ERNIE 2.0:引入了 Task Embedding,来区别不同的任务