BERT模型的出现在自然语言处理(NLP)领域取得了重大进步。BERT从Transformer模型中得到架构,在语言建模、下一个句子预测、问题回答、命名实体识别等各种下游任务上取得了最先进的结果。
尽管BERT的性能出色,但研究人员仍在不断尝试调整其配置,希望取得更好的指标。幸运的是,他们成功地提出了一种名为RoBERTa(Robustly Optimized BERT Approach)的新模型。
在本文中,我们将参考关于RoBERTa模型的官方论文,其中包含了该模型的详细信息。简单来说,RoBERTa在原始BERT模型的基础上进行了几项独立的改进,但其他原则和架构保持不变。本文将涵盖并解释所有这些改进。
动态掩码
我们还记得BERT的架构,在预训练过程中,BERT通过尝试预测一定比例的掩码标记来进行语言建模。原始实现的问题在于,在给定的文本序列上,不同批次之间选择进行掩码的标记有时是相同的。
更准确地说,训练数据集被复制了10倍,因此每个序列只以10种不同的方式进行掩码。考虑到BERT运行了40个训练时期,每个带有相同掩码的序列都会被传递给BERT四次。研究人员发现,使用动态掩码会稍微更好,意味着每次将序列传递给BERT时都会生成唯一的掩码。总体而言,这在训练过程中减少了重复数据,使模型有机会处理更多样化的数据和掩码模式。
下一个句子预测
论文的作者对下一个句子预测任务进行了研究,试图找到一种最优的建模方式。结果,他们得出了一些有价值的见解:
最终,在RoBERTa的最终实现中,作者选择保留前两个方面,而忽略第三个方面。尽管第三个见解背后观察到了改进,研究人员没有继续使用它,否则将使之前的实现之间的比较更加复杂。这是因为到达文档边界并停止意味着输入序列将包含少于512个标记。为了在所有批次中具有相似数量的标记,这些情况下的批次大小需要增加。这导致批次大小可变以及更复杂的比较,而研究人员希望避免这种情况。
增加批次大小
最近在NLP领域的进展表明,适当降低学习率和训练步数的情况下增加批次大小通常会提高模型的性能。
提醒一下,BERT基础模型是在256个序列的批次大小下进行百万步的训练。作者尝试使用2K和8K的批次大小进行BERT的训练,而后者的值被用于训练RoBERTa。相应的训练步数和学习率分别为31K和1e-3。
字节文本编码
在NLP中,存在三种主要的文本标记化类型:
原始的BERT使用子词级标记化,词汇表大小为30K,根据输入预处理和使用几种启发式方法学习得到。RoBERTa使用字节而不是Unicode字符作为子词的基础,并将词汇表大小扩展到50K,无需进行任何预处理或输入标记化。这导致BERT基础模型和BERT大模型分别增加了1500万和2000万个额外参数。RoBERTa引入的编码版本的结果略逊于之前的版本。
然而,RoBERTa中词汇表的增长使其能够对几乎所有单词或子词进行编码,而无需使用未知标记。这使RoBERTa能够更好地理解包含罕见词汇的复杂文本。
预训练
除此之外,RoBERTa将上述四个方面应用于与BERT大模型相同的架构参数上。RoBERTa的总参数数量为3.55亿。
RoBERTa在五个大型数据集的组合上进行预训练,总共使用160GB的文本数据。相比之下,BERT大模型仅在13GB的数据上进行预训练。最后,作者将训练步数从100K增加到500K。
结果是,在最流行的基准测试中,RoBERTa比BERT大模型和XLNet大模型表现优异。
RoBERTa版本
与BERT类似,研究人员开发了RoBERTa的两个版本。基础版本和大模型版本中的大部分超参数都是相同的。下图显示了两者之间的主要区别:
RoBERTa中的微调过程类似于BERT。
结论
本文中,我们研究了BERT的改进版本,它通过引入以下方面修改了原始的训练过程:
结果表明,RoBERTa模型在主要基准测试中优于其前身。尽管配置更复杂,RoBERTa只增加了1500万个额外参数,同时保持与BERT相当的推理速度。