当前位置:   article > 正文

BERT家族的那些事——RoBERTa篇_bert roberta

bert roberta

本文是BERT家族系列文章的第二篇,主要是自己对于RoBERTa模型的一些理解,写的不好的地方还请大佬们多多指教。

目录

  • RoBERTa简介
  • RoBERTa模型结构
    模型结构层面的修改
    数据层面的修改
  • 总结

RoBERTa简介

RoBERTa全称:“A Robustly Optimized BERT Pretraining Approach”,从名字上可以看出RoBERTa是对BERT模型做了若干改进。RoBERTa模型在众多数据集上的效果相较于BERT提高了5%-20%,

RoBERTa模型结构

RoBERTa模型主要从模型结构和数据两个层面对BERT模型进行了修改,具体如下:

模型结构层面:

1.Static vs Dynamic Masking(MLM):

(1)原始Bert版Static Mask
原始的bert模型在与训练任务中会抽取15%的token进行mask,但之后的每个epoche中mask不会再发生变化,这将导致在整个预训练过程中,mask不会发生变化,即单个static mask。

(2)改进版Static Mask
RoBERTa中对于static mask稍做改进,将整个预训练任务的40个epoche分为10组,每组预训练过程依旧抽取15%的token进行mask,但与原始版static mask不同的是每组预训练任务随机选取的token位置,这相当于每个mask位置大约会参与4个epoche过程,与此同时被mask的token数量大约增加了10倍,有利于提高预训练任务的效果。

(3)动态版Dynamic Masking
RoBERTa中也提出了dynamic mask的方法,即每次向模型输入数据时动态的生成mask,在40个epoche的情况下与原始版static mask相比,被mask的token数量大约增加了40倍。

具体结果如下图所示,文章后续使用Dynamic Masking预训练任务。
在这里插入图片描述
2.Next Sentence Prediction(NSP)

原始Bert版NSP任务:
Bert中的NSP任务使用两句话拼接到一起输入进模型进行预训练,其中50%的正例数据是统一文章中的上下句,50%的负例是不同文章中的两个句子句。MLM任务和NSP任务本是Bert的两大核心预训练任务,但(Lample and Conneau,2019; Yang et al.2019; Joshi et al.2019)对NSP任务的作用产生质疑,RoBERTa对NSP任务进行了四个方面的改进尝试:

(1) SEGMENT-PAIR+NSP:
输入分两部分,分别是来自同一文档和不同文档的片段,每个文档片段包括若干个完整的句子,文档片段长度必须小于512。预训练仍为MLM和NSP两个任务。

(2) SENTENCE-PAIR+NSP:
和SEGMENT-PAIR+NSP类似,输入包括两部分,分别是来自于同一文档和不同文档的单个句子,考虑到一般句子的长度远小于512,所以增加了训练时的batch size,这样可以使得SENTENCE-PAIR+NSP预训练任务和SEGMENT-PAIR+NSP预训练任务更为相似。预训练仍为MLM和NSP两个任务。

(3) FULL-SENTENCES:
输入只有一部分,是由来着同一文档或更多文档中的若干个连续句子组成,输入长度不超过512,但因为输入文本长度较长,所以可能会遇到跨越文档边界问题,文章的处理是在两篇文档之间插入一个特殊的token用于区分。预训练中去除了NSP任务。

(4) DOC-SENTENCES
和FULL-SENTENCES类似,只是用另一种方式处理输入跨越文档边界问题,文档边界附近的输入长度小于512,对于这些输入会动态的增加训练时的batch size,这样可以使得FULL-SENTENCES预训练任务和DOC-SENTENCES预训练任务更为相似。预训练中去除了NSP任务。

具体结果如下图所示,从结果来看,DOC-SENTENCES的表现结果略好于其他三种,但考虑到DOC-SENTENCES需要动态调整batch size,故文章后续使用效果近似的FULL-SENTENCES预训练任务。
在这里插入图片描述
3.Training with large batches

(Ott et al.2018)的工作证明增大batche-size能够加速机器翻译任务的训练速度和正确率,(You et al.2019)的工作证明BERT增大batche-size后也会有类似效果。

(Devlin et al.2019) 采用256的batche-size训练1M个epoches,这种训练方式与采用2K的batche-size训练125K个epoches或采用8K的batche-size训练31K个epoches在计算成本上是基本等价的。

实验结果证明适当增大batche-size会降低语言模型的困惑度和提高模型效果。具体结果如下图所示,文章后续采用8K的batche-size进行训练,增大batche-size数量将会是未来模型迭代的一个研究方向。
在这里插入图片描述
4.Text Encoding

Byte-Pair Encoding(BPE)是字符级和单词级的混合表示,BPE依赖于子词(sub-word)单元,这些子词单元是通过对训练语料库进行统计分析而提取的,BPE词表大小通常在 1万到 10万之间。当对海量多样语料建模时,unicode characters占据了该词表的大部分。(Radford et al.2019)的工作中介绍了一个简单但高效的BPE, 该BPE使用字节对而非unicode characters作为子词单元。

当采用 bytes-level 的 BPE 之后,词表大小从30K增加到50K。这分别为 BERT-base和 BERT-large增加了15M和20M额外的参数。

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

数据层面:

1.增加预训练过程的语料数量,增加训练的step

下图中给出了和原始BERT模型及XLNet相比的结果,其中RoBERTa模型的正常训练步数为100Kstep,pretrain longer的训练步数为300Kstep,pretrain even longer的训练步数为500Kstep。
在这里插入图片描述
模型效果:

1.在GLUE上的结果
在这里插入图片描述
2.在SQuAD上的结果
在这里插入图片描述

总结

在预训练过程中,我们发现延长模型训练时间,在更大量的训练数据的基础上使用更大的batche-size,移除NSP预训练任务,在训练中使用更长的句子序列以及使用dynamic masking预训练任务等一系列模型改进方法均可提升模型效果,即本文提出的RoBERTa模型,模型在GLUE,RACE和SQuAD上均取得state-of-the-art结果,这些结果说明之前被忽略决策的重要性,同时也证明了BERT模型的预训练过程和近期提出的替代方案相比仍具有竞争力。


博客不定时更新,欢迎NLP爱好者们加我微信:kaifeng3922,一起学习一起冲~

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号