新一届最强预训练模型上榜,出于BERT而胜于BERT

2019-08-06 14:37:56 浏览数 (1)

作者 | Facebook AI

译者 | Lucy

编辑 | Jane

出品 | AI科技大本营(ID: rgznai100)

【导读】预训练方法设计有不同的训练目标,包括语言建模、机器翻译以及遮蔽语言建模等。最近发表的许多论文都使用了微调模型,并预先训练了一些遮蔽语言模型的变体。然而,还有一些较新的方法是通过对多任务微调提高性能,结合实体嵌入,跨度预测和自回归预训练的多种变体。它们通常在更大数据上训练更大的模型来提高性能。本文的目标是通过复制、简化和更好地微调训练BERT,以作为更好理解上述方法的相对性能的参考值。

论文地址:

https://arxiv.org/abs/1907.11692

语言模型预训练能获得显著的性能提升,但是不同方法之间很难进行详细的比较。训练模型计算成本高,通常在各自的数据集上完成,并且作者将展示超参数对最终结果的显著影响。作者提出了BERT 预训练的复制研究,该研究测量了关键超参数和训练数据量对结果的影响。发现BERT 可以超过其后发布的每个模型的性能。该模型在 GLUE,RACE 和SQuAD 上实现了目前最好的结果。这些结果强调了先前被忽视的设计选择的重要性,然后提出了有关最近报告的改进的来源的问题,并发布了模型和公开了程序代码。

1、 介绍

自训练方法,如ELMo、 GPT、 BERT、 XLM 和XLNet 得到了显著的性能提升,但很难确定每种方法的哪些方面贡献最大。训练计算成本很高,限制了微调的数据量,并且通常使用不同大小的私人训练数据来完成,这限制了测量模型效果的能力。

作者提出了BERT 预训练的复制研究,其中包括评估超参数和训练数据量对结果的影响。提出了一个改进的训练BERT模型的方法,称之为 RoBERTa,该方法可以超过所有 post-BERT 方法的性能。修改的部分包括:(1)训练模型时间更长,batch更大,数据更多;(2)删除下一句预测目标;(3)对较长序列进行训练;(4)动态改变应用于训练数据的遮蔽模式。为了更好地控制训练集大小对结果的影响,作者收集了与其他私人使用的数据集大小相当的大型新数据集(CC-NEWS)。

在控制训练数据时,改进的训练程序比在GLUE 和SQUAD 上公布的BERT 结果有所提高。经过长时间训练,该模型在公共GLUE 排行榜上得分为88.5,与 Yang 等人报道的88.4 相当。该模型建立了一个最新的4/9GLUE 任务:MNLI, QNLI, RTE 和STS-B。在 SQuAD 和RACE 上获得最好的实验结果。总的来说,重新确定BERT的遮蔽语言模型训练目标是与其他最近提出的训练目标竞争,例如扰动自回归语言模型。

总之,本文的贡献是:(1)提出了一套重要的 BERT 设计选择和培训策略,并介绍了可以带来更好的下游任务绩效的替代方案;(2)使用一种新的数据集 CCNEWS,确认使用更多数据进行预训练可以进一步提高下游任务的性能;(3)训练结果表明,在配置正确的情况下,预训练的遮蔽语言模型比其他最近发布的模型效果更好。作者发布了模型,上传了基于 PyTorch 的预训练和微调代码。

2、 背景

2.1 设置

BERT 将两个段(令牌序列),x1,..., xN 和y1,..., yM 的串联作为输入。该模型首先在大的未标记文本语料库上预先训练,然后使用最终任务标记数据进行网络化。

2.2 结构

本文使用具有L 层的变压器架构,每个块使用A 自注意头和H 层隐藏层.

2.3 训练目标

在预训练期间,BERT 的两个目标:遮蔽语言模型和下一句话预测。遮蔽语言模型(MLM)使用已标记的随机样本作为输入序列,并用特殊标记[MASK] 替换。MLM的目标是预测被遮蔽标记的交叉熵损失。下一句话预测(NSP) NSP 是一种二元分类损失,用于预测原始文本中两个段落是否相连。

2.4 优化

BERT使用以下参数对Adam 进行优化:β1= 0.9,β2= 0.999,ǫ= 1e-6,L2 权重衰减为0.01。 学习率在最初的10,000次迭代中峰值为1e-4,然后线性衰减。BERT 每层Dropout 为0.9,以及一个 GELU 激活函数。模型预训练在S = 1,000,000时更新,最小的batch 包含序列最大长度B = 256 和标记T = 512。

2.5 数据

BERT 的训练数据包含BOOKCORPUS 和英语WIKIPEDIA,压缩前共 16GB。

3、 实验设置

3.1 配置

作者在FAIRSEQ 中重新实现了BERT。主要遵循第2节中给出的初始 BERT 优化超参数,除了峰值学习速率和预热步数,这些步骤针对每个设置单独调整。Adam 在训练中非常敏感,在某些情况下,调整后能提高性能。并设置β2= 0.98 以提高大批量训练时的稳定性。作者预先训练了最多T = 512 标记序列。不会随机注入短序列,并且不会针对前90% 的更新以减少的序列长度进行训练,只训练全长序列。在 DGX-1 机器上进行混合精密浮点运算,每个机器都有8×32GB Nvidia V100 GPU,并由 Infiniband 互连。

3.2 数据

BERT 式预训练依赖于大量的文本。本文考虑了不同大小和域的五种英语语料库,总共超过160GB 的未压缩文本。使用的文本语料库如下:

  • BOOKCORPUS 和英语WIKIPEDIA:这是用于训练 BERT 的原始数据(16 GB)。
  • CC-NEWS:收集的 CommonCrawl 新闻数据集的英文部分。该数据包含2016 年9 月至2019 年2 月期间6300 万份英文新闻(过滤后为76GB)。
  • OPENWEBTEXT:Radford 等人的WebText 语料库的开源数据。该文本是从Reddit 上共享的URL 中提取的网页内容,爬取的每个内容都至少有三个人点赞(38GB)。
  • STORIES:是 Trinh 和Le 引入的数据集,其中包含一部分CommonCrawl 数据,用于匹配Winograd 模式的故事风格(31GB)。

3.3 评估

作者使用以下三个基准评估下游任务的预训练模型。

  • GLUE 通用语言理解评估(GLUE)基准是用于评估自然语言理解系统的 9 个数据集的集合。
  • SQuAD 斯坦福问题答疑数据集(SQuAD)提供了一段背景和一个问题。任务是通过从上下文中提取相关跨度来回答问题。
  • RACE 考试的重新理解(RACE)任务是一个大型阅读理解数据集,有超过 28000 个段落和近100000 个问题。该数据集来自中国的英语考试,专为中学生和高中生设计。

4、 训练程序分析

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

4.1 静态与动态掩蔽

可以发现使用静态遮蔽重新实现的功能与原始BERT模型类似,动态遮蔽与静态遮蔽效果差距不大。

表1:BERTBASE 的静态遮蔽和动态遮蔽之间的比较。

4.2 模型输入格式和下一句预测

本文比较了几种可选择训练模式:

  • SEGMENT-PAIR NSP:BERT 中使用带NSP 损失的原始输入格式。每个输入都有两个段落,每个段可以包含多句话,但总组合长度必须小于512 个tokens。
  • SENTENCE-PAIR NSP:每个输入包含两句话,从一个文档的连续部分或从单独的文档中采样。由于这些输入明显少于512 个tokens,因此我们增加batch的大小,以使 tokens 总数保持与SEGMENT-PAIR NSP 相似,同时保留了NSP 损失。
  • FULL-SENTENCES:每个输入都包含从一个或多个文档连续采样的完整句子,使得总长度最多为512 个tokens。输入可能跨越文档边界。当到达一个文档的末尾时,从下一个文档开始对句子进行抽样,并在文档之间添加一个额外的分隔符号,这里不使用 NSP 损失。
  • DOC-SENTENCES:输入的构造类似于FULL-SENTENCES,除了它们可能不需要跨越文档边界。在文档末尾附近采样的输入可以短于 512 个tokens,因此在这些情况下动态增加batch大小以达到与 FULLSENTENCES 相同的tokens总数,这里不使用 NSP 损失。

表2:在 BOOKCORPUS 和WIKIPEDIA 上预训练的基础模型的开发集结果。

首先比较Devlin等人的原始SEGMENT-PAIR输入格式。采用SENTENCE-PAIR格式;两种格式都保留了NSP损失,但后者使用单句。发现单个句子会损害下游任务的性能,认为这是因为模型无法学习远程依赖。

4.3 大批量训练

在神经网络机器翻译模型中,当学习率适当增加时,使用非常大的mini-batch 训练可以提高优化速度和终端任务性能。研究结果表明,BERT 也适用于大批量训练。

表3:在不同 batchs(bsz)下, BOOKCORPUS 和WIKIPEDIA 作为训练数据,模型的持续训练数据(ppl)和开发集准确率。

比较了BERTBASE 的性能,因为增加了batch 的大小,控制了通过训练数据的次数。观察到大批量训练可以改善遮蔽语言模型目标的困惑度,以及最终任务的准确性。通过分布式数据并行训练,大批量也更容易并行化,后续的实验中,作者使用8K 序列进行训练。

4.4 文本编码

字节对编码(BPE)是字符和单词级表示之间的混合,允许处理自然语言语料库中常见的大词汇表。BPE 不依赖于完整的单词,而是依赖于子词单元,这些子单元是通过对训练语料库进行统计分析而提取的。

5、RoBERTa

表4:RoBERTa的开发集结果,因为预先训练了更多数据(16GB→160GB的文本)和预训练更长时间(100K→300K→500K步),每行累积上述行的改进。RoBERTa 符合BERTLARGE 的架构和训练目标。

当控制训练数据时,观察到RoBERTa 比最初报告的BERTLARGE 结果有了明显的改进。

5.1 GLUE结果

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

5.2 SQuAD结果

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

5.3 RACE结果

表7 :RACE 测试集的结果

RoBERT在中学和高中设置上都能获得最好的实验结果。

6、结论

在预训练BERT模型时,作者会仔细评估一些设计决策。通过更长时间地训练模型,处理更多数据,可以显著提高模型性能;删除下一句预测目标; 培训更长的序列; 并动态地改变应用于训练数据的遮蔽模式。改进的预训练程序,称之为RoBERTa,在GLUE,RACE和SQuAD上实现了目前最好的结果,没有GLUE的多任务网络化或SQuAD的附加数据。这些结果说明这些先前被忽视的设计决策的重要性,并表明BERT的预训练目标仍与最近提出的替代方案不相上下。

作者还使用了一个新的数据集CC-NEWS,并发布了用于预训练和网络训练的模型和代码。

Github地址:

https://github.com/pytorch/fairseq

0 人点赞