论文阅读-RoBERTa

今天分享一个Bert的改进工作RoBERTa。RoBERTa是训练充分的Bert。

论文RoBERTa: A Robustly Optimized BERT Pretraining Approach
代码https://github.com/brightmart/roberta_zh

1. 方法改进

与Bert相比较,RoBERTa主要改进了一下几点:

  • 去掉下一句预测(NSP)任务
  • 动态掩码。BERT 依赖随机掩码和预测 token。原版的 BERT 实现在数据预处理期间执行一次掩码,得到一个静态掩码。 而 RoBERTa 使用了动态掩码:每次向模型输入一个序列时都会生成新的掩码模式。这样,在大量数据不断输入的过程中,模型会逐渐适应不同的掩码策略,学习不同的语言表征。
  • 文本编码。Byte-Pair Encoding(BPE)是字符级和词级别表征的混合,支持处理自然语言语料库中的众多常见词汇。原版的 BERT 实现使用字符级别的 BPE 词汇,大小为 30K,是在利用启发式分词规则对输入进行预处理之后学得的。Facebook 研究者没有采用这种方式,而是考虑用更大的 byte 级别 BPE 词汇表来训练 BERT,这一词汇表包含 50K 的 subword 单元,且没有对输入作任何额外的预处理或分词。

2. Masking

动态掩码 or 静态掩码

  • 原来Bert对每一个序列随机选择15%的Tokens替换成[MASK],为了消除与下游任务的不匹配,还对这15%的Tokens进行
    (1)80%的时间替换成[MASK];(2)10%的时间不变;(3)10%的时间替换成其他词。
    但整个训练过程,这15%的Tokens一旦被选择就不再改变,也就是说从一开始随机选择了这15%的Tokens,之后的N个epoch里都不再改变了。这就叫做静态Masking

  • 而RoBERTa一开始把预训练的数据复制10份,每一份都随机选择15%的Tokens进行Masking,也就是说,同样的一句话有10种不同的mask方式。比如我仍然是训练40个epoches,复制了十份样本,相当于每4个epoches使用的是同一个mask的样本。这种方式称为:动态掩码

全词Masking(Whole Word Masking)

Whole Word Masking (wwm),暂翻译为全词Mask或整词Mask,原有基于WordPiece的分词方式会把一个完整的词切分成若干个子词,在生成训练样本时,这些被分开的子词会随机被mask。
在全词Mask中,如果一个完整的词的部分WordPiece子词被mask,则同属该词的其他部分也会被mask,即全词Mask

3. NSP和数据输入格式

SEGMENT-PAIR+NSP:就是Bert的输入形式
SENTENCE-PAIR+NSP:输入的是一对句子,即前后是单个句子
FULL-SENTENCES:输入为全量的句子,填满512的长度,采集样本的时候可以跨越文章的界限,去除了NSP loss
DOC-SENTENCES:输入和FULL-SENTENCE类似,但是一个样本不能跨越两个document

  • RoBERTa删除了NSP任务,同时改变了输入格式,并不是使用上下两句的输入格式,而是类似文档中的句子全部填满这512个字符的格式进行输入。
  • 简单说就是,去掉了NSP任务的同时,去掉了构造数据中NSP数据格式。

4. 总结

RoBERTa包括如下改进

  1. 数据生成方式和任务改进:取消下一个句子预测,并且数据连续从一个文档中获得。
  2. 更大更多样性的数据:使用 30G 中文训练,包含 3 亿个句子,100 亿个字 (即 token)。由于新闻、社区讨论、多个百科,保罗万象,覆盖数十万个主题,共160+G数据。
  3. Byte-Pair Encoding(BPE)是字符级和词级别表征的混合。
  4. 训练更久:超过500k steps
  5. 更大批次:使用了超大(8k)的批次 batch size。
  6. 调整优化器的参数。
  7. 使用全词 mask(whole word mask)和动态的mask。

参考

posted @ 2022-04-20 16:41  topbookcc  阅读(187)  评论(0编辑  收藏  举报
/* 鼠标点击求赞文字特效 */