文章目录
- 0. 摘要
- 1. 介绍
- 2. 相关工作
- 2.1 无监督的基于特征的方法
- 2.3 无监督微调方法
- 2.3 从受监督数据中迁移学习
- 3. BERT
- 3.1 预训练 BERT
- 3.2 微调 BERT
- 4. 实验
- 4.1 GLUE
- 4.2 SQuAD v1.1
- 4.3 SQuAD v2.0
- 4.4 SWAG
- 5. 消融研究
- 5.1 预训练任务的影响
- 5.2 模型大小的影响
- 5.3 使用 BERT 的基于特征的方法
- 6. 总结
- 7. 碎碎念
0. 摘要
我们引入了一种新的语言表示模型,称为 BERT,即来自 Transformer 的双向编码器表示。与最近的语言表示模型(Peters 等人,2018a;Radford 等人,2018)不同,BERT 旨在通过在所有层中共同基于左右上下文进行条件训练,从未标记的文本中预训练深度双向表示。因此,经过预训练的 BERT 模型只需一个额外的输出层即可进行微调,以创建用于各种任务(如问答和语言推理)的最先进模型,而无需进行大量特定于任务的架构修改。
BERT 在概念上简单且在经验上强大。它在 11 项自然语言处理任务上取得了新的最先进结果,包括将 GLUE 分数提高到 80.5%(绝对提高 7.7 个百分点),MultiNLI 准确率提高到 86.7%(绝对提高 4.6 个百分点),SQuAD v1.1 问答测试 F1 值提高到 93.2(绝对提高 1.5 个百分点),以及 SQuAD v2.0 测试 F1 值提高到 83.1(绝对提高 5.1 个百分点)。
注:
a. GLUE 分数是一个用于评估自然语言处理(NLP)模型性能的基准,旨在衡量模型在多种语言理解任务上的表现
b. MultiNLI 准确率是一个用于自然语言推理的任务,模型需要判断两个句子之间的关系(如蕴含、矛盾或中立)
c. SQuAD v1.1 问答测试 F1 值: 是一个问答数据集,模型需要从给定的上下文中提取答案。
d. SQuAD v2.0 问答测试 F2 值:在 SQuAD v1.1 的基础上增加了不包含答案的问题,要求模型能够判断问题是否有答案。
1. 介绍
语言模型预训练已被证明对改进许多自然语言处理任务有效。这些任务包括句子级任务,如自然语言推理和释义,其目的是通过整体分析句子来预测句子之间的关系,以及标记级任务,如命名实体识别和问答,在这些任务中,模型需要在标记级别产生细粒度的输出。
目前将预训练语言表示应用于下游任务有两种现有策略:基于特征的方法和微调方法。基于特征的方法,如 ELMo,使用特定于任务的架构,将预训练表示作为额外特征。微调方法,如生成式预训练 Transformer(OpenAI GPT)(Radford 等人,2018),引入极少的特定于任务的参数,并通过简单地微调所有预训练参数在下游任务上进行训练。这两种方法在预训练期间具有相同的目标函数,它们使用单向语言模型来学习通用语言表示。
我们认为,当前的技术限制了预训练表示的能力,尤其是对于微调方法而言。主要的局限性在于标准语言模型是单向的,这限制了在预训练期间可以使用的架构选择。例如,在 OpenAI GPT 中,作者使用从左到右的架构,其中每个标记在 Transformer 的自注意力层中只能关注前面的标记(Vaswani 等人,2017)。这种限制对于句子级任务而言并非最优,并且在将基于微调的方法应用于标记级任务(如问答)时可能非常有害,因为在问答任务中,从两个方向整合上下文至关重要。
在本文中,我们通过提出 BERT(来自 Transformer 的双向编码器表示)来改进基于微调的方法。BERT 受完形填空任务(Taylor,1953)的启发,使用「掩码语言模型」(MLM)预训练目标来缓解前面提到的单向性约束。掩码语言模型随机掩盖输入中的一些标记,目标是预测被掩盖标记的原始词汇 ID。
仅根据上下文确定单词。与从左到右的语言模型预训练不同,掩码语言模型(MLM)目标使表示能够融合左右上下文,这使我们能够预训练深度双向 Transformer。除了掩码语言模型之外,我们还使用「下一句预测」任务,该任务共同预训练文本对表示。我们论文的贡献如下:
-
我们展示了语言表示双向预训练的重要性。与 Radford 等人(2018 年)使用单向语言模型进行预训练不同,BERT 使用掩码语言模型来实现预训练的深度双向表示。这也与 Peters 等人(2018a)形成对比,后者使用独立训练的从左到右和从右到左的语言模型的浅层连接。
-
我们表明,预训练表示减少了对许多经过大量工程设计的特定任务架构的需求。BERT 是第一个基于微调的表示模型,在一系列句子级和标记级任务上实现了最先进的性能,优于许多特定任务架构。
-
BERT 推动了 11 项自然语言处理任务的技术水平。代码和预训练模型可在 GitHub - google-research/bert: TensorFlow code and pre-trained models for BERT 上获取。
2. 相关工作
预训练通用语言表示有着悠久的历史,在本节中我们简要回顾一下最广泛使用的方法。
2.1 无监督的基于特征的方法
几十年来,学习广泛适用的单词表示一直是一个活跃的研究领域,包括非神经方法(Brown 等人,1992;Ando 和 Zhang,2005;Blitzer 等人,2006)和神经方法(Mikolov 等人,2013;Pennington 等人,2014)。预训练的词嵌入是现代自然语言处理系统的一个组成部分,与从头开始学习的嵌入相比有显著的改进(Turian 等人,2010)。为了预训练词嵌入向量,已经使用了从左到右的语言建模目标(Mnih 和 Hinton,2009),以及在左右上下文中区分正确和错误单词的目标(Mikolov 等人,2013)。
这些方法已被推广到更粗的粒度,如句子嵌入(Kiros 等人,2015 年;Logeswaran 和 Lee,2018 年)或段落嵌入(Le 和 Mikolov,2014 年)。为了训练句子表示,先前的工作使用了对候选下一个句子进行排序的目标(Jernite 等人,2017 年;Logeswaran 和 Lee,2018 年)、给定上一个句子的表示生成下一个句子单词的从左到右的方法(Kiros 等人,2015 年),或去噪自编码器派生的目标(Hill 等人,2016 年)。
ELMo 及其前身(Peters 等人,2017 年、2018a 年)沿着不同的维度推广了传统的词嵌入研究。它们从从左到右和从右到左的语言模型中提取上下文敏感特征。每个标记的上下文表示是从左到右和从右到左表示的连接。当将上下文词嵌入与现有的特定任务架构集成时,ELMo 在几个主要的自然语言处理基准测试中取得了最先进的成果(Peters 等人,2018a),包括问答(Rajpurkar 等人,2016)、情感分析(Socher 等人,2013)和命名实体识别(Tjong Kim Sang 和 De Meulder,2003)。Melamud 等人(2016)提出通过一项任务来学习上下文表示,即使用 LSTMs 从左右上下文预测单个单词。与 ELMo 类似,他们的模型是基于特征的,并且不是深度双向的。Fedus 等人(2018)表明,完形填空任务可用于提高文本生成模型的鲁棒性。
注:
a. ELMo 是一种重要的语言表示模型,通过其上下文感知的词嵌入和双向语言模型架构,推动了 NLP 领域的进步。虽然现在有许多其他更先进的模型(如 BERT 和 GPT),但 ELMo 仍然是理解现代 NLP 技术发展的一个重要里程碑。
b. LSTM 是一种强大的序列建模工具,能够有效处理长序列数据中的依赖关系。尽管近年来 Transformer 架构(如 BERT 和 GPT)逐渐流行,但 LSTM 仍在许多应用中发挥着重要作用,尤其是在需要处理时间序列和序列数据的任务中。
2.3 无监督微调方法
和基于特征的方法一样,这个方向上的早期工作只是从无标注文本中预训练词嵌入参数(Collobert 和 Weston,2008)。
最近,产生上下文词元表示的句子或文档编码器已经从无标签文本中进行了预训练,并针对有监督的下游任务进行了微调(Dai 和 Le,2015;Howard 和 Ruder,2018;Radford 等人,2018)。这些方法的优点是只需从头学习很少的参数。至少部分由于这个优点,OpenAI GPT(Radford 等人,2018)在来自 GLUE 基准测试的许多句子级任务上取得了先前的最先进结果(Wang 等人,2018a)。从左到右的语言模型。
图 1:BERT 的整体预训练和微调过程。除了输出层之外,预训练和微调都使用相同的架构。相同的预训练模型参数用于初始化不同下游任务的模型。在微调期间,所有参数都被微调。[CLS]是添加在每个输入示例前面的特殊符号,[SEP]是特殊分隔符(例如分隔问题/答案)。
ing 和自编码器目标已被用于此类模型的预训练(Howard 和 Ruder,2018;Radford 等人,2018;Dai 和 Le,2015)。
2.3 从受监督数据中迁移学习
也有研究表明,从具有大型数据集的有监督任务中进行有效迁移是可行的,例如自然语言推理(Conneau 等人,2017)和机器翻译(McCann 等人,2017)。计算机视觉研究也证明了从大型预训练模型进行迁移学习的重要性,其中一个有效的方法是对使用 ImageNet 预训练的模型进行微调(Deng 等人,2009;Yosinski 等人,2014)。
3. BERT
我们在本节中介绍 BERT 及其详细实现。我们的框架有两个步骤:预训练和微调。在预训练期间,模型在不同的预训练任务上针对无标签数据进行训练。对于微调,BERT 模型首先使用预训练参数进行初始化,然后使用来自下游任务的有标签数据对所有参数进行微调。每个下游任务都有单独的微调模型,尽管它们都是使用相同的预训练参数进行初始化的。图 1 中的问答示例将作为本节的一个示例。
BERT 的一个显著特点是其在不同任务之间的统一架构。预训练架构与最终下游架构之间的差异很小。
BERT 的模型架构是一个多层双向 Transformer 编码器,基于 Vaswani 等人(2017 年)中描述的原始实现,并在 tensor2tensor 库中发布。由于 Transformer 的使用已经很常见,并且我们的实现与原始实现几乎相同,因此我们将省略对模型架构的详尽背景描述,并建议读者参考 Vaswani 等人(2017 年)以及诸如「带注释的 Transformer」等优秀指南。
在这项工作中,我们将层数(即 Transformer 块的数量)表示为 L,隐藏大小表示为 H,自注意力头的数量表示为 A。我们主要报告两种模型大小的结果: B E R T B A S E {BERT_{BASE}} BERTBASE(L = 12,H = 768,A = 12,总参数 = 1.1 亿)和 B E R T L A R G E {BERT_{LARGE}} BERTLARGE(L = 24,H = 1024,A = 16,总参数 = 3.4 亿)。
B E R T B A S E {BERT_{BASE}} BERTBASE 被选来与 OpenAI GPT 具有相同的模型大小以进行比较。然而,关键的是,BERT Transformer 使用双向自注意力,而 GPT Transformer使用受约束的自注意力,其中每个标记只能关注其左侧的上下文。
输入/输出表示 为了使 BERT 能够处理各种下游任务,我们的输入表示能够明确地在一个标记序列中表示单个句子和一对句子(例如,⟨问题,答案⟩)。在整个这项工作中,「句子」可以是任意连续的文本片段,而不是实际的语言句子。「序列」是指输入到 BERT 的标记序列,它可以是单个句子或打包在一起的两个句子。
我们使用具有 30,000 个词表的 WordPiece 嵌入(Wu 等人,2016)。每个序列的第一个标记始终是特殊分类标记([CLS])。与该标记对应的最终隐藏状态用作分类任务的聚合序列表示。句子对被打包成一个单一序列。我们以两种方式区分句子。首先,我们用一个特殊标记([SEP])将它们分开。其次,我们向每个标记添加一个学习到的嵌入,以指示它属于句子 A 还是句子 B。如图 1 所示,我们将输入嵌入表示为 E,特殊 [CLS] 标记的最终隐藏向量表示为 C ∈ R H C\in\mathbb{R}^{H} C∈RH,第 i i i个输入标记的最终隐藏向量表示为 T i ∈ R H T_{i}\in\mathbb{R}^{H} Ti∈RH。
对于给定的标记,其输入表示是通过对相应的标记、片段和位置嵌入求和来构建的。这种构建的可视化可以在图 2 中看到。
3.1 预训练 BERT
与 Peters 等人 (2018a) 和 Radford 等人 (2018) 不同,我们不使用传统的从左到右或从右到左的语言模型来预训练 BERT。相反,我们使用本节中描述的两个无监督任务来预训练 BERT。此步骤如图 1 的左侧所示。
任务 #1:掩码语言模型。 直观地说,有理由相信深度双向模型严格来说比从左到右的模型或从左到右和从右到左的浅层连接模型更强大。不幸的是,标准的条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用会让每个单词间接「看到自己」,并且在多层上下文中模型可以轻而易举地预测目标单词。
为了训练深度双向表示,我们只是随机屏蔽一定比例的输入标记,然后预测那些被屏蔽的标记。我们将这个过程称为「掩码语言模型」(MLM),尽管在文献中它通常被称为完形填空任务(Taylor,1953)。在这种情况下,与掩码标记相对应的最终隐藏向量被输入到词汇表上的输出 softmax 中,就像在标准语言模型中一样。在我们所有的实验中,我们随机屏蔽每个序列中所有 WordPiece 标记的 15%。与去噪自编码器(Vincent 等人,2008)不同,我们只预测被屏蔽的单词,而不是重建整个输入。
虽然这使我们能够获得双向预训练模型,但不利的一面是我们在预训练和微调之间造成了不匹配,因为 [MASK] 标记在微调期间不会出现。为了缓解这个问题,我们并不总是用实际的 [MASK] 标记替换「被掩盖」的词。训练数据生成器随机选择 15% 的标记位置进行预测。如果选择了第 i 个标记,我们将第 i 个标记替换为(1)[MASK] 标记 80% 的时间,(2)随机标记 10% 的时间,(3)不变的第 i 个标记 10% 的时间。然后, T i T_{i} Ti将用于以交叉熵损失预测原始标记。我们在附录 C.2 中比较了此过程的变体。
任务 #2:下一句预测(NSP)。 许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都基于理解两个句子之间的关系,而这一点并非直接由语言建模所捕获。为了训练一个能够理解句子关系的模型,我们针对一个二值化的下一句预测任务进行预训练,该任务可以很容易地从任何单语语料库中生成。具体来说,在为每个预训练示例选择句子 A 和 B 时,50%的情况下 B 是实际跟随 A 的下一个句子(标记为「是下一句」),50%的情况下它是来自语料库的随机句子(标记为「非下一句」)。如图 1 所示,c 用于下一句预测(NSP)。尽管这个任务很简单,但我们在第 5.1 节中表明,针对这个任务进行预训练对问答和自然语言推理都非常有益。
图 2:BERT 输出表示。输入嵌入式标记嵌入、分段嵌入和位置嵌入的总和。
NSP 任务与 Jernite 等人(2017 年)和 Logeswaran 与 Lee(2018 年)中使用的表示学习目标密切相关。然而,在先前的工作中,只有句子嵌入被转移到下游任务中,而 BERT 则转移所有参数以初始化最终任务模型参数。
预训练数据。预训练过程在很大程度上遵循了关于语言模型预训练的现有文献。对于预训练语料库,我们使用 BooksCorpus(8 亿词)(Zhu 等人,2015)和英文维基百科(25 亿词)。对于维基百科,我们只提取文本段落,忽略列表、表格和标题。为了提取长的连续序列,使用文档级语料库而不是像 Billion Word Benchmark(Chelba 等人,2013)这样的打乱的句子级语料库至关重要。
3.2 微调 BERT
微调很简单,因为 Transformer 中的自注意力机制允许 BERT 对许多下游任务进行建模——无论它们涉及单个文本还是文本对——只需替换适当的输入和输出即可。对于涉及文本对的应用,一种常见模式是在应用双向交叉注意力之前独立编码文本对,如 Parikh 等人(2016 年);Seo 等人(2017 年)。而 BERT 则使用自注意力机制来统一这两个阶段,因为用自注意力编码连接的文本对实际上包括两个句子之间的双向交叉注意力。
对于每个任务,我们只需将特定于任务的输入和输出插入 BERT 中,并对所有参数进行端到端的微调。在输入方面,预训练中的句子 A 和句子 B 类似于(1)释义中的句子对,(2)蕴含中的假设-前提对,(3)问答中的问题-段落对。(4)文本分类或序列标注中的退化文本-∅对。在输出端,标记表示被输入到用于标记级任务(如序列标注或问答)的输出层,而 [CLS] 表示被输入到用于分类(如蕴涵或情感分析)的输出层。
与预训练相比,微调相对成本较低。论文中的所有结果都可以在单个云 TPU 上最多 1 小时内复制,或者在 GPU 上几个小时内复制,且都从完全相同的预训练模型开始。我们在第 4 节的相应子部分中描述了特定任务的细节。更多细节可以在附录 A.5 中找到。
4. 实验
在本节中,我们展示了在 11 个自然语言处理任务上的 BERT 微调结果。
4.1 GLUE
通用语言理解评估(General Language Understanding Evaluation,GLUE)基准(Wang 等人,2018a)是一系列不同的自然语言理解任务的集合。GLUE 数据集的详细描述包含在附录 B.1 中。
为了在 GLUE 上进行微调,我们按照第 3 节中的描述表示输入序列(对于单个句子或句子对),并使用对应于第一个输入标记([CLS])的最终隐藏向量 C ∈ R H C∈R^{H} C∈RH作为聚合表示。在微调过程中引入的唯一新参数是分类层权重 W ∈ R K × H W∈R^{K×H} W∈RK×H,其中 K 是标签的数量。我们使用 c 和 W 计算标准分类损失,即 log(softmax ( C W T ) (CW^{T}) (CWT))。
表 1:GLUE 测试结果,由评估服务器(https://gluebenchmark.com/leaderboard)评分。每个任务下方的数字表示训练示例的数量。“平均”列与官方 GLUE 分数略有不同,因为我们排除了有问题的 WNLI 集。BERT 和 OpenAI GPT 是单模型、单任务。对于 QQP 和 MRPC 报告 F1 分数,对于 STS-B 报告斯皮尔曼相关性,对于其他任务报告准确率分数。我们排除将 BERT 用作其组件之一的条目。
我们使用 32 的批量大小,并在所有 GLUE 任务的数据上进行 3 个周期的微调。对于每个任务,我们在开发集上选择最佳的微调学习率(在 5e-5、4e-5、3e-5 和 2e-5 中)。此外,对于 BERTLARGE,我们发现微调在小数据集上有时不稳定,因此我们进行了几次随机重启,并在开发集上选择了最佳模型。对于随机重启,我们使用相同的预训练检查点,但进行不同的微调数据洗牌和分类器层初始化。
结果如表 1 所示。 B E R T B A S E BERT _{BASE } BERTBASE 和 B E R T L A R G E BERT _{LARGE } BERTLARGE 在所有任务上的性能都大大优于所有系统,分别比以前的技术水平提高了 4.5% 和 7.0% 的平均精度。请注意,除了注意力掩盖之外, B E R T B A S E BERT _{BASE } BERTBASE 和 OpenAI GPT 在模型架构方面几乎相同。对于最大和报告最广泛的 GLUE 任务 MNLI,BERT 获得了 4.6% 的绝对精度提升。在官方 GLUE 排行榜上10 B E R T L A R G E BERT _{LARGE } BERTLARGE 获得 80.5 分,而 OpenAI GPT 在撰写本文之日获得 72.8 分。
我们发现, B E R T L A R G E BERT _{LARGE } BERTLARGE在所有任务中都显著优于 B E R T B A S E BERT _{BASE } BERTBASE,尤其是在那些训练数据非常少的任务中。模型大小的影响将在 5.2 节中进行更深入的探讨。
4.2 SQuAD v1.1
斯坦福问答数据集(SQuAD v1.1)是一个包含 100,000 对众包问题/答案对的集合(Rajpurkar 等,2016)。给定一个问题和一个包含答案的维基百科段落,任务是预测段落中答案的文本跨度。
如图 1 所示,在问答任务中,我们将输入问题和段落表示为单个打包序列,问题使用 A 嵌入,段落使用 B 嵌入。在微调期间,我们仅引入起始向量 S ∈ R H S\in\mathbb{R}^{H} S∈RH和结束向量 E ∈ R H E\in\mathbb{R}^{H} E∈RH。单词 i 是答案跨度开始的概率计算为 T i T_{i} Ti与 S 的点积,然后对段落中的所有单词进行 softmax 运算: P i = e S ⋅ T i ∑ j e S ⋅ T j P_{i}=\frac{e^{S\cdot T_{i}}}{\sum_{j}e^{S\cdot T_{j}}} Pi=∑jeS⋅TjeS⋅Ti。对于答案跨度的结束位置使用类似的公式。从位置 i 到位置 j 的候选跨度的得分定义为 S ⋅ T i + E ⋅ T j S\cdot T_{i}+E\cdot T_{j} S⋅Ti+E⋅Tj,并且将 j ≥ i j\geq i j≥i的最大得分跨度用作预测。训练目标是正确起始和结束位置的对数似然之和。我们以 5e-5 的学习率和 32 的批量大小进行 3 个 epoch 的微调。
表 2 展示了排行榜前列的条目以及顶级已发表系统的结果(Seo 等人,2017;Clark 和 Gardner,2018;Peters 等人,2018a;Hu 等人,2018)。SQuAD 排行榜的顶级结果没有最新的公开系统描述,并且在训练他们的系统时可以使用任何公开数据。因此,我们在我们的系统中使用适度的数据增强,首先在 TriviaQA(Joshi 等人,2017)上进行微调,然后在 SQuAD 上进行微调。
我们表现最好的系统在集成方面比排行榜榜首的系统的 F1 值高 +1.5,作为单个系统比其高 +1.3 的 F1 值。事实上,我们的单个 BERT 模型在 F1 分数方面超过了顶级的集成系统。没有 TriviaQA 的微调。
表 2:SQuAD 1.1 结果。BERT 集成是 7x 个系统,它们使用不同的预训练检查点和微调种子。
表 3:SQuAD 2.0 结果。我们排除将 BERT 用作其组件之一的条目。
调整数据,我们只损失了 0.1-0.4 F1,仍然大大优于所有现有系统12。
4.3 SQuAD v2.0
SQuAD 2.0 任务通过允许在提供的段落中可能不存在简短答案来扩展 SQuAD 1.1 的问题定义,使问题更加现实。
我们使用一种简单的方法来扩展用于此任务的 SQuAD v1.1 BERT 模型。我们将没有答案的问题视为在 [CLS] 标记处具有答案跨度,其起始和结束位置都在 [CLS] 标记处。起始和结束答案跨度位置的概率空间被扩展以包括 [CLS] 标记的位置。对于预测,我们比较无答案跨度的得分: s n u l l = s_{null }= snull= S ⋅ C + E ⋅ C S\cdot C + E\cdot C S⋅C+E⋅C与最佳非空跨度的得分。
表 4:SWAG 开发集和测试集的准确率。†人类表现是用 100 个样本测量的,如 SWAG 论文中所报告的那样。
s i , j ^ = max j ≥ i S ⋅ T i + E ⋅ T j \hat{s_{i, j}}=\max_{j≥i}S\cdot T_{i}+E\cdot T_{j} si,j^=maxj≥iS⋅Ti+E⋅Tj。当 s i , j > s n u l l + τ s_{i, j}>s_{null}+\tau si,j>snull+τ 时,我们预测一个非空答案,其中阈值 T 在开发集上被选择以最大化 F1。我们没有将 TriviaQA 数据用于此模型。我们以 5e-5 的学习率和 48 的批量大小进行了 2 个周期的微调。
与先前的排行榜条目和顶级已发表的工作(Sun 等人,2018 年;Wang 等人,2018 年 b)相比的结果如表 3 所示,不包括将 BERT 用作其组件之一的系统。我们观察到比先前最佳系统的 F1 值提高了 +5.1。
4.4 SWAG
Situations With Adversarial Generations (SWAG) 数据集包含 113,000 个句子对完成示例,用于评估有根据的常识推理(Zellers et al., 2018)。给定一个句子,任务是从四个选项中选择最合理的延续。
在对 SWAG 数据集进行微调时,我们构建了四个输入序列,每个序列都包含给定句子(句子 A)和一个可能的延续(句子 B)的连接。引入的唯一特定于任务的参数是一个向量,其与 [CLS] 标记表示 c 的点积表示每个选项的分数,该分数通过 softmax 层进行归一化。
我们对模型进行了 3 个 epoch 的微调,学习率为 2e-5,批量大小为 16。结果在表 4 中呈现。 B E R T L A R G E BERT_{LARGE} BERTLARGE 比作者的基线 ESIM+ELMo 系统性能高 27.1%,比 OpenAI GPT 高 8.3%。
5. 消融研究
在本节中,我们对 BERT 的多个方面进行消融实验,以更好地了解它们的相对重要性。此外。
表 5:使用 BERTBASE 架构对预训练任务进行消融。「No NSP」在没有下一句预测任务的情况下进行训练。「LTR & No NSP」像 OpenAI GPT 一样作为从左到右的语言模型进行训练,且没有下一句预测任务。「+ BiLSTM」在微调期间在 「LTR + No NSP」 模型之上添加一个随机初始化的双向长短期记忆网络(BiLSTM)。
消融研究可在附录 C 中找到。
5.1 预训练任务的影响
我们通过使用与 B E R T B A S E {BERT_{BASE}} BERTBASE完全相同的预训练数据、微调方案和超参数来评估两个预训练目标,从而展示了 BERT 的深度双向性的重要性。
「No NSP」: 一种双向模型,使用「掩码语言模型」(MLM)进行训练,但没有「下一句预测」(NSP)任务。
「LTR & No NSP」: 一种仅使用左上下文的模型,它使用标准的从左到右(LTR)语言模型进行训练,而不是掩码语言模型(MLM)。在微调时也应用了仅左上下文的约束,因为去除该约束会引入预训练/微调不匹配的情况,从而降低下游性能。此外,该模型在预训练时没有进行下一句预测(NSP)任务。这与 OpenAI 的 GPT 直接可比,但使用了我们更大的训练数据集、我们的输入表示以及我们的微调方案。
我们首先研究 NSP 任务带来的影响。在表 5 中,我们表明去除 NSP 会对 QNLI、MNLI 和 SQuAD 1.1 的性能产生显著影响。接下来,我们通过比较「No NSP」和 「LTR & No NSP」来评估训练双向表示的影响。在所有任务上,从左到右(LTR)模型的表现都比掩码语言模型(MLM)差,在 MRPC 和 SQuAD 上有很大的下降。
对于 SQuAD 来说,很直观地可以看出,从左到右(LTR)的模型在标记预测方面表现会很差,因为标记级别的隐藏状态没有右侧上下文。为了真诚地尝试加强从左到右的系统,我们在顶部添加了一个随机初始化的双向长短期记忆网络(BiLSTM)。这确实显著提高了 SQuAD 的结果,但是结果仍然远逊于那些预训练的双向模型。双向长短期记忆网络(BiLSTM)会损害 GLUE 任务的性能表现。
我们认识到,也可以像 ELMo 那样训练单独的从左到右(LTR)和从右到左(RTL)模型,并将每个标记表示为两个模型的串联。然而:(a)这比单个双向模型的成本高一倍;(b)对于像问答这样的任务来说,这是不直观的,因为从右到左的模型无法根据问题来确定答案;(c)这严格来说不如深度双向模型强大,因为它在每一层都可以同时使用左右上下文。
5.2 模型大小的影响
在本节中,我们探讨模型大小对微调任务准确性的影响。我们训练了许多具有不同层数、隐藏单元数和注意力头数的 BERT 模型,同时在其他方面使用与前面描述的相同的超参数和训练过程。
所选 GLUE 任务的结果如表 6 所示。在该表中,我们报告了 5 次随机重新微调的平均开发集准确率。我们可以看到,更大的模型在所有四个数据集上都能带来严格的准确率提升,即使对于只有 3600 个标记训练样本的 MRPC 也是如此,并且与预训练任务有很大不同。同样令人惊讶的是,我们能够在相对于现有文献已经相当大的模型基础上实现如此显著的改进。例如,Vaswani 等人(2017)探索的最大 Transformer 是( L = 6 L = 6 L=6, H = 1024 H = 1024 H=1024, A = 16 A = 16 A=16),编码器有 1 亿个参数,而我们在文献中找到的最大 Transformer 是( L = 64 L = 64 L=64, H = 512 H = 512 H=512, A = 2 A = 2 A=2),有 2.35 亿个参数(AI-Rfou 等人,2018)。相比之下, B E R T B A S E {BERT_{BASE}} BERTBASE 包含 1.1 亿个参数, B E R T L A R G E {BERT_{LARGE}} BERTLARGE 包含 3.4 亿个参数。
长期以来,人们都知道增加模型规模会在大规模任务(如机器翻译和语言建模)上带来持续的改进,这一点在表 6 中展示的保留训练数据的语言模型困惑度中得到了体现。然而,我们相信,这是第一个令人信服地证明,只要模型经过充分的预训练,扩展到极大的模型规模也会在非常小规模的任务上带来巨大改进的工作。Peters 等人(2018b)提出下游任务中增加预训练双向语言模型(bi-LM)的规模从两层到四层会产生不同的结果。Melamud 等人(2016)顺便提到,将隐藏维度大小从 200 增加到 600 有所帮助,但进一步增加到 1000 并没有带来进一步的改进。这两项先前的工作都使用了基于特征的方法——我们假设,当模型直接在下游任务上进行微调,并且只使用非常少量的随机初始化的额外参数时,即使下游任务数据非常少,特定任务模型也可以从更大、更具表现力的预训练表示中受益。
5.3 使用 BERT 的基于特征的方法
到目前为止,所有 BERT 结果都使用了微调方法,其中在预训练模型中添加一个简单的分类层,并且所有参数都在下游任务上联合微调。然而,基于特征的方法(即从预训练模型中提取固定特征)具有一定的优势。首先,并非所有任务都可以用 Transformer 编码器架构轻松表示,因此需要添加特定于任务的模型架构。其次,预先计算一次昂贵的训练数据表示,然后在此表示之上使用更便宜的模型运行许多实验,这具有很大的计算优势。
在本节中,我们通过将 BERT 应用于 CoNLL-2003 命名实体识别(NER)任务(Tjong Kim Sang 和 De Meulder,2003 年)来比较这两种方法。在输入到 BERT 时,我们使用保留大小写的 WordPiece 模型,并包括数据提供的最大文档上下文。按照标准做法,我们将其表述为标记任务,但不使用条件随机场(CRF)。
表 6:BERT 模型大小的消融。#L = 层数;#H = 隐藏大小;#A = 注意力头的数量。「LM (ppl)」 是保留训练数据的掩蔽 LM 困惑度。
表 7:CoNLL-2003 命名实体识别结果。超参数是使用开发集选择的。所报告的开发集和测试集分数是使用这些超参数进行 5 次随机重启后的平均值。
输出中的层。我们将第一个子词的表示作为输入,提供给在命名实体识别标签集上的词级别分类器。
为了消融微调方法,我们应用基于特征的方法,从一层或多层中提取激活值,而不微调 BERT 的任何参数。这些上下文嵌入在分类层之前被用作随机初始化的两层 768 维双向长短期记忆网络(BiLSTM)的输入。
结果在表 7 中呈现。 B E R T L A R G E {BERT_{LARGE}} BERTLARGE 与最先进的方法相比具有竞争力。表现最佳的方法是将预训练 Transformer 的前四个隐藏层的标记表示连接起来,这仅比微调整个模型低 0.3 的 F1 值。这表明 BERT 在微调方法和基于特征的方法中均有效。
6. 总结
最近,由于语言模型的迁移学习带来的经验性改进表明,丰富的无监督预训练是许多语言理解系统不可或缺的一部分。特别是,这些结果使得即使是低资源任务也能从深度单向架构中受益。我们的主要贡献是将这些发现进一步推广到深度双向架构,使相同的预训练模型能够成功地处理广泛的自然语言处理任务。
7. 碎碎念
本篇论文的翻译借助于豆包 + gpt-4o-mini ,如有准确或者写的有误的地方,欢迎指出。
关于深度学习的论文似乎没有一篇是能够直接一次读懂的,但是那也没有关系,学多少都行,重要的是不能因为懈怠而放弃学习吖
-
你们知道我们取得是什么经? 佛祖让我们取经,经字的真正意义是人生经历的意思,只要在我们一生之中所经历尽皆普度众生之事,心中早已成佛。 by 港版《西游记》
-
没有谁的生活会一直完美,但无论什么时候,都要看着前方,满怀希望就会所向披靡。
-
我常常一个人,走很长的路,在起风的时候觉得自己像一片落叶。