在这里插入图片描述

Abstract

作者提出了一种新的语言表示模型,称为 BERT,其全称为 Bidirectional Encoder Representations from Transformers(双向 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 分)。

1 Introduction

语言模型的预训练已被证明能有效提升众多自然语言处理任务(Dai 和 Le, 2015;Peters 等人,2018a;Radford 等人,2018;Howard 和 Ruder,2018)。这些任务既包括句子级任务,例如自然语言推理(Bowman 等人,2015;Williams 等人,2018)和释义检测(Dolan 和 Brockett, 2005),其目标是通过整体分析句子来预测句子之间的关系;也包括词元级任务,例如命名实体识别和问答(Tjong Kim Sang 和 De Meulder,2003;Rajpurkar 等人,2016),这类任务要求模型在词元级别生成细粒度的输出。

目前将预训练语言表示应用于下游任务主要有两类策略:基于特征的方法和微调方法。基于特征的方法,如 ELMo(Peters 等人,2018a),采用包含预训练表示作为额外特征的任务特定架构;微调方法,如生成式预训练 Transformer(OpenAI GPT)(Radford 等人,2018),引入极少的任务特定参数,并通过简单微调所有预训练参数来训练下游任务。这两种方法在预训练期间共享相同的目标函数,即使用单向语言模型来学习通用语言表示。

作者认为,当前的技术限制了预训练表示的能力,尤其是对于微调类方法而言。其主要局限在于标准语言模型都是单向的,这限制了预训练阶段可使用的架构选择。例如,在 OpenAI GPT 中,作者采用的是从左到右的架构,每个 token 在 Transformer 的自注意力层(Vaswani 等人,2017)中只能关注其前面的 token。这种限制对于句子级任务来说并不是最优选择,而在将基于微调的方法应用于 token 级任务(如问答)时可能产生严重弊端,因为在这类任务中整合来自两个方向的上下文是至关重要的。

在本文中,作者通过提出 BERT (双向 Transformer 编码器表示)来改进基于微调的方法。BERT 受完形填空任务(Taylor, 1953)启发,采用“掩码语言模型”(MLM)预训练目标来缓解前述的单向性限制。掩码语言模型随机遮蔽输入中的部分 token,其目标是仅根据上下文预测被遮蔽词语的原始词汇 ID。与从左到右的语言模型预训练不同,MLM 目标使得表示能够融合左右上下文,从而支持预训练一个深度双向 Transformer。除了掩码语言模型外,作者还使用了“下一句预测”任务,用于联合预训练文本对的表示。本文的贡献如下:

• 作者论证了双向预训练对于语言表示的重要性。与 Radford 等人(2018)使用单向语言模型进行预训练不同,BERT 采用掩码语言模型实现预训练的深度双向表示。这也区别于 Peters 等人(2018a)的方法,他们仅将独立训练的从左到右和从右到左的语言模型进行浅层拼接。

• 作者证明了预训练表示能够降低对大量高度工程化任务特定架构的需求。BERT 是首个基于微调的表示模型,在大量句子级和词元级任务上取得了最先进的性能,超越了许多任务特定架构。

• BERT 在 11 个 NLP 任务上推进了最先进水平。其代码和预训练模型已公开于 https://github.com/google-research/bert

2 Related Work

预训练通用语言表示的研究由来已久,本节作者将简要回顾最广泛使用的几种方法。

2.1 Unsupervised Feature-based Approaches

数十年来,学习具有广泛适用性的词表示一直是研究的活跃领域,包括非神经网络方法(Brown 等人,1992;Ando 和 Zhang,2005;Blitzer 等人,2006)与神经网络方法(Mikolov 等人,2013;Pennington 等人,2014)。预训练的词嵌入是现代 NLP 系统中不可或缺的组成部分,相比于从零开始学习的嵌入,它能够带来显著提升(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)从另一个维度推广了传统词嵌入的研究。它们在一个从左到右和一个从右到左的语言模型中提取上下文敏感特征。每个 token 的上下文表示是其从左到右表示与从右到左表示的拼接。在将上下文词嵌入与现有的任务特定架构集成时,ELMo 在多个主要 NLP 基准任务上刷新了最先进的结果(Peters 等人,2018a),包括问答(Rajpurkar 等人,2016)、情感分析(Socher 等人,2013)以及命名实体识别(Tjong Kim Sang 和 De Meulder,2003)。Melamud 等(2016)提出通过一个任务来学习上下文表示,即使用 LSTM 从左右两个方向的上下文来预测一个单词。与 ELMo 类似,他们的模型是基于特征的,而非深度双向的。Fedus 等(2018)证明了完形填空任务可用于提升文本生成模型的鲁棒性。

2.2 Unsupervised Fine-tuning Approaches

与基于特征的方法类似,这一方向的早期研究仅从未标注的文本中预训练词嵌入参数(Collobert 和 Weston,2008)。

更近期的研究则从未标注的文本中预训练能够生成上下文 token 表示的句子或文档编码器,并在有监督的下游任务上进行微调(Dai 和 Le,2015;Howard 和 Ruder,2018;Radford 等人,2018)。这些方法的优势在于需要从零开始学习的参数量极少。至少部分由于这一优势,OpenAI GPT(Radford 等人,2018)在 GLUE 基准(Wang 等人,2018a)中的许多句子级任务上取得了当时最先进的结果。从左到右的语言建模和自编码器目标已被应用于预训练此类模型(Howard 和 Ruder,2018;Radford 等人,2018;Dai 和 Le,2015)。

2.3 Transfer Learning from Supervised Data

也有研究表明,从具有大规模数据集的监督任务(例如,自然语言推理(Conneau 等人,2017)和机器翻译(McCann 等人,2017))中进行迁移学习具有显著效果。计算机视觉领域的研究也证实了从大型预训练模型进行迁移学习的重要性,其中一种行之有效的方法是对使用 ImageNet 预训练的模型进行微调(Deng 等人,2009;Yosinski 等人,2014)。

3 BERT

本节将介绍 BERT 及其详细实现。作者的框架包含两个步骤:预训练和微调。在预训练阶段,模型通过不同的预训练任务在未标注的数据上进行训练。对于微调阶段,BERT 模型首先使用预训练好的参数进行初始化,然后使用下游任务的标注数据对所有参数进行微调。每个下游任务都有独立的微调模型,尽管它们都使用相同的预训练参数进行初始化。图 1 中的问答示例将在本节中作为贯穿示例加以说明。

在这里插入图片描述

BERT 的一个显著特点是其在不同任务上保持统一的架构。预训练阶段的模型架构与最终用于下游任务的架构之间只有微小的差异。

模型架构 BERT 的模型架构是一个多层的、双向的 Transformer 编码器,其基于 Vaswani 等(2017)中描述的并在 tensor2tensor 库中发布的原始实现。由于 Transformer 的使用已经十分普遍,而且作者的实现与原始版本几乎一致,此处不再赘述模型架构的详细背景说明,建议读者参阅 Vaswani 等(2017)的研究以及诸如 “The Annotated Transformer.” 等优秀指南。

在本研究中,作者将层数(即 Transformer 块的数量)记为 L L L,隐藏层维度记为 H H H,自注意力头数记为 A A A。作者主要报告两种模型规模的结果: BERT BASE \text{BERT}_{\text{BASE}} BERTBASE(L = 12,H = 768,A = 12,总参数量 = 110M)和 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE(L = 24,H = 1024,A = 16,总参数量 = 340M)。

为了进行比较, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE 被选择为与 OpenAI GPT 具有相同的模型规模。然而,关键区别在于:BERT 的 Transformer使用的是双向自注意力机制,而 GPT 的 Transformer 则使用受限的自注意力机制,其中每个 token 只能关注其左侧的上下文。

输入/输出表示 为了使 BERT 能够处理多种下游任务,作者的输入表示方式能够在一个 token 序列中无歧义地表示单个句子或句子对(例如〈问题,答案〉)。在本研究中,“句子”可以是任意连续文本片段,而非严格意义上的语言学句子。“序列”指输入到 BERT 的 token 序列,可以是单个句子或打包在一起的两个句子。

作者使用 WordPiece 嵌入(Wu 等人,2016),其词表大小为 30,000。每个序列的第一个 token 始终是一个特殊的分类token([CLS])。对应于该 token 的最终隐藏状态被用作分类任务的整体序列表示。句子对会被打包成单个序列。作者通过两种方式区分不同的句子:首先,使用特殊 token ([SEP]) 将它们分隔开;其次,为每个 token 添加一个可学习的嵌入,用以指示它属于句子 A 还是句子 B。如图 1 所示,作者将输入嵌入记为 E E E,特殊 token [CLS] 的最终隐藏向量记为 C ∈ R H C \in \mathbb{R}^H CRH,第 i i i 个输入 token 的最终隐藏向量记为 T i ∈ R H T_i \in \mathbb{R}^H TiRH

对于给定的一个 token,它的输入表示是通过将对应的 token 嵌入、segment 嵌入和 position 嵌入相加构成的。这一构成方式的可视化见图 2 所示。

在这里插入图片描述

3.1 Pre-training BERT

与 Peters 等(2018a)和 Radford 等(2018)不同,作者并没有使用传统的从左到右或从右到左的语言模型来预训练 BERT。相反,作者使用了两种无监督任务来预训练 BERT,本节将对它们进行介绍。该步骤展示在图 1 的左半部分。

任务 #1:掩码语言模型(Masked LM) 直观地说,有理由相信一个深度双向的模型严格比从左到右的模型或从左到右与从右到左浅层拼接的模型更强大。但不幸的是,标准的条件语言模型只能从左到右或从右到左进行训练,因为双向条件会使每个词间接地“看到自己”,导致模型在多层的上下文中能够轻易地预测该目标词。

为了训练一个深度双向的表示,作者简单地随机遮蔽一定比例的输入 token,然后预测那些被遮蔽的 token。作者将此过程称为“掩码语言模型”(MLM),尽管在文献(Taylor, 1953)中它常被称为完形填空任务。在这种方式下,对应被遮蔽 token 的最终隐藏向量会被输入到一个对整个词表做 softmax 的输出层中,就像标准语言模型一样。在所有的实验中,作者会随机遮蔽每个序列中所有 WordPiece token 的 15%。与去噪自编码器(Vincent 等人,2008)不同的是,作者仅预测被遮蔽的单词,而不是重构整个输入。

虽然这种方法使作者能够获得一个双向的预训练模型,但其缺点是会造成预训练与微调之间的不匹配,因为在微调阶段 [MASK] token 并不会出现。为缓解这一问题,作者不会总是将被“mask”的词替换成真正的 [MASK] token。训练数据生成器会随机选择 15% 的 token 位置用于预测。如果第 i i i 个 token 被选中,作者将其进行替换:(1) 80% 的概率替换为 [MASK] token;(2) 10% 的概率替换为一个随机 token;(3) 10% 的概率保持第 i i i 个 token 不变。之后, T i T_i Ti 将被用来通过交叉熵损失预测原始 token。作者在附录 C.2 中比较了该过程的多种变体。

任务 #2:下一句预测(NSP) 许多重要的下游任务(例如问答(QA)和自然语言推理(NLI))都基于理解两个句子之间的关系,而这一点不能通过语言建模来直接捕获。为了训练一个能够理解句子关系的模型,作者对一个二值化的下一句预测任务进行预训练,这一任务可以从任何单语语料库中轻松生成。具体来说,在为每个预训练样本选择句子 A 和句子 B 时,50% 的情况下,B 是语料中真实紧跟在 A 之后的下一句(标记为 IsNext),50% 的情况下,B 是语料库中随机抽取的一句(标记为 NotNext)。如图 1 所示, C C C 用于进行下一句预测(NSP)。尽管任务简单,但作者在第 5.1 节中证明了针对这一任务进行预训练对 QA 和 NLI 任务都是非常有益的。

NSP 任务与 Jernite 等(2017)以及 Logeswaran 和 Lee(2018)中使用的表示学习目标密切相关。然而,在以往的工作中,只有句子嵌入被迁移到下游任务中,而 BERT 将所有的参数都迁移到初始化终端任务模型的参数中。

预训练数据 预训练过程在很大程度上遵循已有的关于语言模型预训练的文献。作者使用 BooksCorpus(8 亿词)(Zhu 等人,2015)和 英文维基百科(25 亿词)作为预训练语料库。对于维基百科,作者仅提取其中的文本段落,忽略列表、表格和标题。使用文档级语料而不是打乱的句子级语料(例如 Billion Word Benchmark(Chelba 等人,2013))对提取长连续序列至关重要。

3.2 Fine-tuning BERT

微调过程非常直接,因为 Transformer 中的自注意力机制使得 BERT 能够通过替换相应的输入和输出来建模多种下游任务——无论它们涉及的是单个文本还是文本对。对于涉及文本对的应用,一种常见的模式是在应用双向的交叉注意力之前独立编码文本对,例如 Parikh 等 (2016)、Seo 等 (2017) 的方法。而 BERT 则使用自注意力机制将这两个阶段统一起来,对拼接后的文本对进行自注意力编码,有效地实现了两个句子之间的双向交叉注意力。

对于每个任务,作者只需将任务特定的输入和输出接入到 BERT 中,并对所有参数进行端到端微调。在输入端,预训练中的句子 A 和句子 B 可类比为:(1)释义任务中的句子对;(2)蕴含任务中的假设-前提对;(3)问答任务中的问题-段落对;以及(4)文本分类或序列标注任务中的退化文本-∅对。在输出端,token 表示会被送入输出层用于 token 级任务,例如序列标注或问答;而 [CLS] 表示则会被送入输出层用于分类任务,例如文本蕴含或情感分析。

与预训练相比,微调的成本相对较低。论文中的所有结果都可以在单个 Cloud TPU 上最多 1 小时或在一块 GPU 上数小时内复现,只需从完全相同的预训练模型开始即可。作者将在第 4 节相应的小节中描述各任务的具体细节。更多细节可见附录 A.5。

4 Experiments

在本节中,作者展示了 BERT 在 11 个 NLP 任务上的微调结果。

4.1 GLUE

通用语言理解评估(GLUE)基准(Wang 等人,2018a)是一个包含多种自然语言理解任务的集合。GLUE 数据集的详细描述见附录 B.1。

为了在 GLUE 上进行微调,作者按照第 3 节所述的方式表示输入序列(无论是单句还是句子对),并使用对应于第一个输入 token ([CLS]) 的最终隐藏向量 C ∈ R H C \in \mathbb{R}^H CRH 作为整体表示。在微调过程中,引入的唯一新参数是分类层的权重 W ∈ R K × H W \in \mathbb{R}^{K\times H} WRK×H,其中 K K K 是标签的数量。作者使用 C C C W W W 计算标准的分类损失,即: log ⁡ ( softmax ( C W T ) ) \log(\text{softmax}(CW^T)) log(softmax(CWT))

作者设置批次大小为 32,并在所有 GLUE 任务的数据上微调 3 个 epoch。对于每个任务,作者在 Dev 集选择了最佳的微调学习率(在 5e-5、4e-5、3e-5 和 2e-5 中选择)。此外,对于 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE,作者发现微调在小数据集上有时不稳定,因此作者进行了多次随机重启,并在 Dev 集上选择了最优的模型。在随机重启过程中,作者使用相同的预训练检查点,但进行不同的微调数据打乱和分类器层初始化。

在这里插入图片描述

结果如表 1 所示。 BERT BASE \text{BERT}_{\text{BASE}} BERTBASE BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE 在所有任务上均大幅超越了所有其他系统,相比之前的最新技术水平分别获得了 4.5% 和 7.0% 的平均准确率提升。需要注意的是,除了注意力掩码机制外, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE 和 OpenAI GPT 在模型架构上几乎完全一致。对于规模最大且最广泛报告的 GLUE 任务 MNLI,BERT 获得了 4.6% 的绝对准确率提升。在官方 GLUE 排行榜上, BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE 获得了 80.5 分,而 OpenAI GPT 在撰稿时的得分为 72.8。

作者发现, BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE 在所有任务上都显著优于 BERT BASE \text{BERT}_{\text{BASE}} BERTBASE,特别是在那些训练数据非常少的任务上。模型规模的影响将在第 5.2 节中进行更为深入的探讨。

4.2 SQuAD v1.1

斯坦福问答数据集(SQuAD v1.1)是一个包含 10 万个众包问题/答案对的集合(Rajpurkar 等人,2016)。给定一个问题和包含答案的维基百科段落,任务是预测段落中的答案文本片段。

如图 1 所示,在问答任务中,作者将输入问题和段落表示为单个打包序列,其中问题使用 A 嵌入,段落使用 B 嵌入。在微调期间,作者仅引入一个起始向量 S ∈ R H S \in \mathbb{R}^H SRH 和一个结束向量 E ∈ R H E \in \mathbb{R}^H ERH。词 i 作为答案区间起始位置的概率,通过计算 T i T_i Ti S S 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=jeSTjeSTi。答案区间结束位置的概率计算方式与此类似。从位置 i i i 到位置 j j j 的候选答案片段的得分定义为: S ⋅ T i + E ⋅ T j S \cdot T_i + E \cdot T_j STi+ETj,并将满足 j ≥ i j \ge i ji 的最大得分片段作为预测结果。训练目标是正确起始位置和结束位置的对数似然之和。作者以 5e-5 的学习率和 32 的批次大小微调 3 个 epoch。

在这里插入图片描述

表 2 展示了顶级排行榜条目以及来自顶级已发表系统的结果(Seo 等人,2017;Clark 和 Gardner,2018;Peters 等人,2018a;Hu 等人,2018)。SQuAD 排行榜上的顶级结果暂无最新的公开系统描述,且允许在训练他们的系统时使用任何公开数据。因此,作者在系统中采用了适度的数据增强方法:先在 TriviaQA(Joshi 等人,2017)上进行微调,然后再在 SQuAD 上进行微调。

作者表现最好的系统在集成设置中比排行榜顶级系统高出 1.5 F1,作为单一模型时高出 1.3 F1。实际上,作者的单一 BERT 模型在 F1 得分上已经超越了顶级集成系统。在不使用 TriviaQA 微调数据的情况下,作者仅损失 0.1–0.4 F1,仍大幅领先所有现有系统。

4.3 SQuAD v2.0

SQuAD 2.0 任务扩展了 SQuAD 1.1 的问题定义,允许在给定的段落中没有简短答案存在的可能性,从而使问题更加符合真实场景。

作者使用一种简单的方法来扩展 SQuAD v1.1 的 BERT 模型以适配该任务。作者将没有答案的问题视为其答案区间的起始和结束都位于 [CLS] token 上。答案区间起始和结束位置的概率空间被扩展到包含 [CLS] token 的位置。在预测时,作者比较无答案区间的得分: s n u l l = S ⋅ C + E ⋅ C s_{null} = S \cdot C + E \cdot C snull=SC+EC 与最佳非空区间的得分 s i , j ^ = max ⁡ j ≥ i ( S ⋅ T i + E ⋅ T j ) s_{i,j}^{\hat{}} = \max_{j \ge i}(S \cdot T_i + E \cdot T_j) si,j^=maxji(STi+ETj)。当 s i , j ^ > s n u l l + τ s_{i,j}^{\hat{}} > s_{null} + \tau si,j^>snull+τ 时预测为非空答案,其中阈值 τ \tau τ 在 dev 集上选择以最大化 F1。该模型未使用 TriviaQA 数据。作者以 5e−5 的学习率和 48 的批次大小微调 2 个 epoch。

与之前的排行榜条目和顶级已发表工作(Sun 等人,2018;Wang 等人,2018b)的对比结果如表 3 所示,其中排除了使用 BERT 作为组件之一的系统。作者观察到相比之前最好的系统,F1 分数提升了 5.1。

在这里插入图片描述

4.4 SWAG

对抗生成情境(SWAG)数据集包含 11.3 万个句子对补全示例,用于评估基础常识推理能力(Zellers 等人,2018)。给定一个句子,任务是从四个选项中选择最合理的后续句。

在 SWAG 数据集上进行微调时,作者构造了四个输入序列,每个序列都包含给定句子(句子 A)与一个可能的后续句(句子 B)的拼接。唯一引入的任务特定参数是一个向量,它与 [CLS] token 的表示 C C C 的点积表示每个选项的得分,并使用 softmax 层对得分进行归一化。

作者以 2e-5 的学习率和 16 的批次大小对模型进行 3 个 epoch 的微调。结果如表 4 所示。 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE 比作者的基准系统 ESIM+ELMo 高出 27.1%,并比 OpenAI GPT 高出 8.3%。

在这里插入图片描述

5 Ablation Studies

在本节中,作者对 BERT 的多个组成部分进行了消融实验,以更好地理解它们各自的重要性。更多的消融研究可以在附录 C 中找到。

5.1 Effect of Pre-training Tasks

作者通过使用与 BERT BASE \text{BERT}_{\text{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 模型在 token 预测上表现不佳是直观清楚的,因为 token 级隐藏状态缺乏右侧上下文。为了尽可能增强 LTR 系统,作者在其顶端添加了一个随机初始化的 BiLSTM。这确实在 SQuAD 上显著提升了结果,但仍远逊于预训练的双向模型。BiLSTM 会导致 GLUE 任务上的性能下降。

作者认识到,也可以训练单独的 LTR 和 RTL 模型,并像 ELMo 那样将每个 token 表示为两个模型的拼接。然而:(a) 这种方式的计算成本是单个双向模型的两倍;(b) 对于像 QA 这样的任务来说,这种方式并不直观,因为 RTL 模型无法根据问题来生成答案;(c) 它的能力严格弱于深度双向模型,因为它无法在每层同时利用左侧和右侧上下文。

5.2 Effect of Model Size

在本节中,作者探讨模型规模对微调任务准确率的影响。作者训练了多个不同层数、隐藏单元数和注意力头数的 BERT 模型,而在其他方面则使用与前文描述相同的超参数和训练过程。

在部分 GLUE 任务上的结果如表 6 所示。在该表中,作者报告了 5 次随机重启微调的平均 Dev 集准确率。可以看到,更大的模型在所有四个数据集上都能带来明显的准确率提升,即便是仅有 3,600 个标注训练示例且与预训练任务差异较大的 MRPC 也是如此。或许更令人惊讶的是,在已经相对于现有文献相当大的模型基础之上,作者仍能获得如此显著的提升。例如,Vaswani 等(2017)探索的最大的 Transformer 是 (L=6, H=1024, A=16),编码器部分有 1 亿参数;而作者在文献中找到的最大的 Transformer 是 (L=64, H=512, A=2),共有 2.35 亿参数(Al-Rfou 等人,2018)。相比之下, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE 包含 1.1 亿参数, BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE 包含 3.4 亿参数。

在这里插入图片描述

长期以来,人们已经认识到,增大模型规模会在机器翻译和语言建模等大规模任务上带来持续的性能提升,这一点可以通过表 6 中展示的留出训练数据的语言模型困惑度来证明。然而,作者认为这是第一项工作来令人信服地证明,只要模型经过充分的预训练,扩大到极大的模型规模也会在非常小规模的任务上带来大幅的提升。Peters 等(2018b)将预训练双向语言模型的规模从两层增加到四层,在下游任务性能方面产生了好坏参半的结果。Melamud 等(2016)则提到,将隐藏维度大小从 200 增加到 600 是有帮助的,但进一步增加到 1000 并没有带来额外的提升。这两项先前的工作都使用了基于特征的方法——作者假设,当模型在下游任务上直接微调且仅使用极少量随机初始化的额外参数时,即使下游任务的数据量非常小,任务特定模型也能从更大、更具表达能力的预训练表示中获益。

5.3 Feature-based Approach with BERT

到目前为止展示的所有 BERT 结果都使用的是微调方法,即在预训练模型上添加一个简单的分类层,并在下游任务上对所有参数进行联合微调。然而,基于特征的方法,即从预训练模型中提取固定特征,也具有一定的优势。首先,并非所有任务都能轻松用 Transformer 编码器架构来表示,因此需要添加任务特定的模型架构。其次,预先进行一次训练数据的昂贵表示计算,然后在此表示之上运行许多更轻量级模型的实验,可以带来巨大的计算收益。

在本节中,作者通过将 BERT 应用于 CoNLL-2003 命名实体识别(NER)任务(Tjong Kim Sang 和 De Meulder,2003)来比较两种方法。在 BERT 的输入中,作者使用保留大小写的 WordPiece 模型,并包含数据所提供的最大文档上下文。按照标准做法,作者将此表述为一个标注任务,但在输出中并未使用 CRF 层。作者使用第一个子 token 的表示作为输入,传递给 NER 标签集的 token 级分类器。

为了对微调方法进行消融,作者采用基于特征的方法:从一个或多个层中提取激活值,而不对 BERT 的任何参数进行微调。这些上下文嵌入随后作为输入传入到一个随机初始化的、两层的、768 维的 BiLSTM,之后再接分类层。

结果如表 7 所示。 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE 与最先进的方法竞争力相当。表现最好的方法是将预训练 Transformer 的顶端四个隐藏层的 token 表示进行拼接,其效果仅比对整个模型进行微调低 0.3 F1。这证明了 BERT 对于微调和基于特征的方法都是有效的。

在这里插入图片描述

6 Conclusion

近期关于语言模型进行迁移学习的实证改进表明,丰富的无监督预训练已成为许多语言理解系统中不可或缺的组成部分。特别是,这些结果使得即使是资源匮乏的任务也能够从深度单向架构中受益。作者的主要贡献在于将这些发现进一步推广到深度双向架构中,使得同一个预训练模型能够成功应对一系列广泛的自然语言处理任务。

论文链接https://arxiv.org/abs/1810.04805
Github代码仓库https://github.com/google-research/bert

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐