摘要
我们介绍了一种新的语言表示模型,名为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个百分点)。
1 引言
语言模型预训练已被证明对改善许多自然语言处理任务有效(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 中,作者使用了从左到右的架构,其中每个词元在 Transformer 的自注意力层中只能关注前面的词元(Vaswani 等,2017)。这种限制对于句子级任务来说是次优的,并且在将基于微调的方法应用于词元级任务(如问答)时可能非常有害,因为在问答任务中,结合双向上下文至关重要。
在本文中,通过提出 BERT:来自 Transformer 的双向编码器表示,改进了基于微调的方法。BERT 通过使用“掩码语言模型”(MLM)预训练目标来缓解上述的单向性限制,该目标受到完形填空任务(Taylor,1953)的启发。掩码语言模型随机掩码输入中的一些词元,目标是仅根据上下文预测被掩码词的原始词汇 ID。与从左到右的语言模型预训练不同,MLM 目标使表示能够融合左右上下文,从而使我们能够预训练一个深度双向 Transformer。除了掩码语言模型外,我们还使用“下一句预测”任务来联合预训练文本对表示。本文的贡献如下:
- 证明了双向预训练对语言表示的重要性。与 Radford 等(2018)使用单向语言模型进行预训练不同,BERT 使用掩码语言模型来实现预训练的深度双向表示。这也与 Peters 等(2018a)形成对比,后者使用独立训练的左到右和右到左语言模型的浅层拼接。
- 我们展示了预训练表示减少了对许多高度工程化的任务特定架构的需求。BERT 是第一个基于微调的表示模型,在大量句子级和词元级任务上实现了最先进的性能,超越了许多任务特定的架构。
- BERT 在十一个 NLP 任务上推进了最新技术水平。代码和预训练模型可在 https://github.com/google-research/bert 获取。
2 相关工作
预训练通用语言表示有着悠久的历史,本节我们简要回顾最广泛使用的方法。
2.1 无监督的基于特征的方法
学习广泛适用的词表示是几十年来一直活跃的研究领域,包括非神经方法(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)从另一个维度推广了传统的词嵌入研究。它们从左到右和从右到左的语言模型中提取上下文敏感的特征。每个词元的上下文表示是左到右和右到左表示的拼接。当将上下文词嵌入与现有的任务特定架构集成时,ELMo 在多个主要 NLP 基准测试中取得了最先进的成果(Peters 等,2018a),包括问答(Rajpurkar 等,2016)、情感分析(Socher 等,2013)和命名实体识别(Tjong Kim Sang 和 De Meulder,2003)。Melamud 等(2016)提出通过使用 LSTM 从左右上下文预测单个词的任务来学习上下文表示。与 ELMo 类似,他们的模型是基于特征的,并且不是深度双向的。Fedus 等(2018)表明,完形填空任务可用于提高文本生成模型的鲁棒性。
2.2 无监督的微调方法
与基于特征的方法类似,这一方向的最早工作仅从无标签文本中预训练词嵌入参数(Collobert 和 Weston,2008)。
最近,能够生成上下文词元表示的句子或文档编码器已经从无标签文本中预训练,并针对有监督的下游任务进行微调(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 从有监督数据中进行迁移学习
还有一些研究表明,从具有大数据集的有监督任务中进行有效迁移是可行的,例如自然语言推理(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,隐藏层大小表示为 H,自注意力头的数量表示为 A。我们主要报告两种模型尺寸的结果:
- B E R T B A S E BERT_{BASE} BERTBASE(L=12,H=768,A=12,总参数=110M)
- B E R T L A R G E BERT_{LARGE} BERTLARGE(L=24,H=1024,A=16,总参数=340M)。
为了便于比较, B E R T B A S E BERT_{BASE} BERTBASE 的模型尺寸与 OpenAI GPT 相同。然而,关键区别在于,BERT 的 Transformer 使用双向自注意力,而 GPT 的 Transformer 使用受限的自注意力,其中每个词元只能关注其左侧的上下文。
输入/输出表示
为了使 BERT 能够处理各种下游任务,我们的输入表示能够明确地表示单个句子或句子对(例如,〈问题,答案〉)在一个词元序列中。在本工作中,“句子”可以是任意连续的文本片段,而不是实际的语言学句子。“序列”指的是输入到 BERT 的词元序列,可以是一个句子或两个句子打包在一起。
我们使用 WordPiece 嵌入(Wu 等,2016),词汇表大小为 30,000。每个序列的第一个词元始终是一个特殊的分类词元(
[
C
L
S
]
\mathrm{[CLS]}
[CLS])。与该词元对应的最终隐藏状态被用作分类任务的聚合序列表示。句子对被打包成一个序列。我们通过两种方式区分句子:首先,我们用一个特殊词元(
[ SEP ]
\text{[ SEP ]}
[ SEP ])分隔它们;其次,我们为每个词元添加一个学习的嵌入,指示它属于句子 A 还是句子 B。如图 1 所示,我们将输入嵌入表示为 E,特殊词元
[
C
L
S
]
\mathrm{[CLS]}
[CLS] 的最终隐藏向量表示为
C
∈
R
H
C\in\mathbb{R}^H
C∈RH,第 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)
直观上,可以合理地认为深度双向模型比从左到右的模型或左右模型的浅层拼接更强大。然而,标准的条件语言模型只能从左到右或从右到左训练,因为双向条件会使每个词间接“看到自己”,从而使模型能够在多层上下文中轻松预测目标词。为了训练深度双向表示,我们简单地随机掩码一定比例的输入词元,然后预测这些被掩码的词元。我们将此过程称为“掩码语言模型”(MLM),尽管在文献中它通常被称为完形填空任务(Taylor,1953)。在这种情况下,与被掩码词元对应的最终隐藏向量被输入到词汇表上的输出 softmax 中,就像在标准语言模型中一样。在所有实验中,我们随机掩码每个序列中 15% 的 WordPiece 词元。与去噪自编码器(Vincent 等,2008)不同,我们只预测被掩码的词,而不是重建整个输入。
尽管这使我们能够获得双向预训练模型,但一个缺点是预训练和微调之间存在不匹配,因为 [MASK] 词元在微调期间不会出现。为了缓解这个问题,我们并不总是用实际的 [MASK] 词元替换“被掩码”的词。训练数据生成器随机选择 15% 的词元位置进行预测。如果选择了第 i 个词元,我们将其替换为:(1)80% 的时间使用 [MASK] 词元;(2)10% 的时间使用随机词元;(3)10% 的时间保持不变。然后,T_i 将用于通过交叉熵损失预测原始词元。我们在附录 C.2 中比较了此过程的不同变体。
任务 #2:下一句预测(NSP)
许多重要的下游任务,如问答(QA)和自然语言推理(NLI),都基于理解两个句子之间的关系,而语言建模并未直接捕捉到这一点。为了训练一个理解句子关系的模型,我们对一个二分类的下一句预测任务进行预训练,该任务可以从任何单语语料库中轻松生成。具体来说,在为每个预训练示例选择句子 A 和 B 时,50% 的时间 B 是 A 的实际下一句(标记为 IsNext),50% 的时间是从语料库中随机选择的句子(标记为 NotNext)。如图 1 所示,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 BERT 的微调
微调非常简单,因为 Transformer 中的自注意力机制使 BERT 能够通过交换适当的输入和输出来建模许多下游任务——无论它们涉及单个文本还是文本对。对于涉及文本对的应用,常见的模式是在应用双向交叉注意力之前独立编码文本对,例如 Parikh 等(2016);Seo 等(2017)。BERT 则使用自注意力机制统一这两个阶段,因为用自注意力编码连接的文本对有效地包含了两句话之间的双向交叉注意力。
对于每个任务,我们只需将任务特定的输入和输出插入 BERT,并端到端地微调所有参数。在输入端,预训练中的句子 A 和句子 B 类似于:(1)释义中的句子对;(2)蕴含中的假设-前提对;(3)问答中的问题-段落对;(4)文本分类或序列标注中的退化文本-? 对。在输出端,词元表示被输入到词元级任务(如序列标注或问答)的输出层,而 [CLS] 表示被输入到分类任务(如蕴含或情感分析)的输出层。
与预训练相比,微调相对便宜。从完全相同的预训练模型开始,本文中的所有结果都可以在单个 Cloud TPU 上最多 1 小时或在 GPU 上几小时内复现。我们在第 4 节的相应小节中描述了任务特定的细节。更多细节可在附录 A.5 中找到。
4 实验
在本节中,我们展示了 BERT 在 11 个 NLP 任务上的微调结果。
4.1 GLUE
通用语言理解评估(GLUE)基准(Wang 等,2018a)是一个包含多种自然语言理解任务的数据集。GLUE 数据集的详细描述见附录 B.1。
为了在 GLUE 上进行微调,我们按照第 3 节中的描述表示输入序列(单句或句子对),并使用第一个输入词元([
[
C
L
S
]
\mathrm{[CLS]}
[CLS]])对应的最终隐藏向量
C
∈
R
H
C\in\mathbb{R}^H
C∈RH 作为聚合表示。微调期间引入的唯一新参数是分类层权重
W
∈
R
K
×
H
W\in\mathbb{R}^{K\times H}
W∈RK×H,其中 K 是标签数量。我们使用 C 和 W 计算标准分类损失,即
log
(
s
o
f
t
m
a
x
(
C
W
T
)
)
\log(\mathrm{softmax}(CW^T))
log(softmax(CWT))。
我们使用批量大小为 32,并在所有 GLUE 任务的数据上微调 3 个 epoch。对于每个任务,我们在开发集上选择了最佳的微调学习率(从 5 e − 5 , 4 e − 5 , 3 e − 5 5e-5,4e-5,3e-5 5e−5,4e−5,3e−5和 2 e − 5 \mathrm{2e-5} 2e−5 中选择)。此外,对于 BERTLARGE,我们发现微调在小数据集上有时不稳定,因此我们进行了多次随机重启,并选择了在开发集上表现最佳的模型。在随机重启中,我们使用相同的预训练检查点,但执行不同的微调数据打乱和分类层初始化。
结果如表 1 所示。BERTBASE 和 BERTLARGE 在所有任务上均大幅超越所有系统,分别比之前的最先进技术平均准确率提高了 4.5% 和 7.0%。需要注意的是,BERTBASE 和 OpenAI GPT 在模型架构上几乎相同,除了注意力掩码的差异。对于 GLUE 中最大且最广泛报道的任务 MNLI,BERT 取得了 4.6% 的绝对准确率提升。在官方 GLUE 排行榜上,BERTLARGE 获得了 80.5 的分数,而截至撰写本文时,OpenAI GPT 的得分为 72.8。
我们发现,BERTLARGE 在所有任务上均显著优于 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
S∈RH 和一个结束向量
E
∈
R
H
E\in\mathbb{R}^H
E∈RH。词元 i 作为答案范围起始的概率通过 T_i 和 S 的点积计算,然后对段落中的所有词元进行 softmax 归一化:
P
i
=
e
S
⋅
T
i
∑
j
e
S
⋅
T
j
P_i=\frac{e^{S\cdot T_i}}{\sum_je^{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)被用作预测结果。训练目标是正确起始和结束位置的对数似然之和。我们以
5
e
−
5
\mathrm{5e-5}
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 模型以应对此任务。我们将没有答案的问题视为答案范围从
[
C
L
S
]
\mathrm{[CLS]}
[CLS]词元开始和结束。答案范围起始和结束位置的概率空间被扩展以包括
[
C
L
S
]
\mathrm{[CLS]}
[CLS]词元的位置。对于预测,我们将无答案范围的得分:
s
n
u
l
l
=
S
⋅
C
+
E
⋅
C
s_{\mathrm{null}}=S\cdot C+E\cdot C
snull=S⋅C+E⋅C 与最佳非空范围的得分
s
i
,
j
^
=
max
j
≥
i
S
⋅
T
i
+
E
⋅
T
j
\hat{s_{i,j}}=\max_{j\geq i}S\cdot T_{i}+E\cdot T_{j}
si,j^=maxj≥iS⋅Ti+E⋅Tj进行比较。当
s
i
,
j
^
>
s
n
u
l
l
+
τ
\hat{s_{i,j}}>s_{\mathrm{null}}+\tau
si,j^>snull+τ 时,我们预测一个非空答案,其中阈值 τ 在开发集上选择以最大化 F1。 我们没有为此模型使用 TriviaQA 数据。我们以
5
e
−
5
\mathrm{5e-5}
5e−5 的学习率和 48 的批量大小微调了 2 个 epoch。
与之前排行榜条目和顶级已发表工作(Sun 等,2018;Wang 等,2018b)的结果对比见表 3,排除了使用 BERT 作为其组件的系统。我们观察到比之前最佳系统提高了 +5.1 F1。
4.4 SWAG
对抗生成情境数据集(SWAG)包含 11.3 万个句子对补全示例,用于评估基于常识的推理(Zellers 等,2018)。给定一个句子,任务是从四个选项中选择最合理的续写。
在对 SWAG 数据集进行微调时,我们构建了四个输入序列,每个序列包含给定句子(句子 A)和可能的续写(句子 B)的连接。引入的唯一任务特定参数是一个向量,其与
[
C
L
S
]
\mathrm{[CLS]}
[CLS] 词元表示 C 的点积表示每个选项的得分,并通过 softmax 层进行归一化。
我们以
2
e
−
5
\mathrm{2e-5}
2e−5的学习率和 16 的批量大小对模型进行了 3 个 epoch 的微调。结果如表 4 所示。
B
E
R
T
L
A
R
G
E
BERT_{LARGE}
BERTLARGE 比作者的基线
E
S
I
M
+
E
L
M
o
\mathrm{ESIM+ELMo}
ESIM+ELMo系统高出 +27.1%,比 OpenAI GPT 高出 8.3%。
5 消融实验
在本节中,我们对 BERT 的多个方面进行了消融实验,以更好地理解它们的相对重要性。其他消融实验见附录 C。
5.1 预训练任务的影响
我们通过评估两个预训练目标来展示 BERT 深度双向性的重要性,这两个目标使用与 B E R T B A S E BERT_{BASE} BERTBASE 完全相同的预训练数据、微调方案和超参数:
- 无 NSP:一个双向模型,使用“掩码语言模型”(MLM)进行训练,但没有“下一句预测”(NSP)任务。
- LTR 且无 NSP:一个仅使用左上下文的模型,使用标准的从左到右(LTR)语言模型进行训练,而不是 MLM。在微调时也应用了仅左上下文的约束,因为移除它会导致预训练/微调不匹配,从而降低下游性能。此外,该模型在没有 NSP 任务的情况下进行了预训练。这与 OpenAI GPT 直接可比,但使用了我们更大的训练数据集、输入表示和微调方案。
我们首先检查了 NSP 任务的影响。表 5 显示,移除 NSP 会显著降低 QNLI、MNLI 和 SQuAD 1.1 的性能。接下来,我们通过比较“无 NSP”和“LTR 且无 NSP”来评估训练双向表示的影响。LTR 模型在所有任务上的表现均不如 MLM 模型,尤其是在 MRPC 和 SQuAD 上表现大幅下降。
对于 SQuAD,直观上 LTR 模型在词元预测上表现会很差,因为词元级别的隐藏状态没有右侧上下文。为了尽力增强 LTR 系统,我们在其顶部添加了一个随机初始化的 BiLSTM。这确实显著改善了 SQuAD 的结果,但仍远不如预训练的双向模型。BiLSTM 在 GLUE 任务上反而降低了性能。
我们认识到,也可以像 ELMo 那样分别训练 LTR 和 RTL 模型,并将每个词元表示为两个模型的拼接。然而:(a)这比单个双向模型的成本高一倍;(b)这对于 QA 等任务来说不直观,因为 RTL 模型无法根据问题条件生成答案;(c)它的能力严格弱于深度双向模型,因为双向模型可以在每一层同时使用左右上下文。
5.2 模型大小的影响
在本节中,我们探讨了模型大小对微调任务准确率的影响。我们训练了多个不同层数、隐藏单元数和注意力头数的 BERT 模型,其他超参数和训练过程与之前描述的一致。
表 6 显示了在选定的 GLUE 任务上的结果。在表中,我们报告了 5 次随机重启微调后的开发集平均准确率。可以看出,更大的模型在所有四个数据集上都带来了严格的准确率提升,即使是只有 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)。相比之下,
B
E
R
T
B
A
S
E
BERT_{BASE}
BERTBASE 包含 1.1 亿参数,$BERT_{LARGE} $包含 3.4 亿参数。
长期以来,人们已经知道增加模型大小会在机器翻译和语言建模等大规模任务上带来持续改进,这通过表 6 中保留训练数据的语言模型困惑度得到了证明。然而,我们相信这是第一个令人信服地证明,只要模型经过充分的预训练,扩展到极大模型规模也会在非常小规模的任务上带来显著改进的工作。Peters 等(2018b)在将预训练的双向语言模型从两层增加到四层时,对下游任务的影响呈现了混合结果;Melamud 等(2016)提到将隐藏维度从 200 增加到 600 有帮助,但进一步增加到 1,000 并未带来更多改进。这两项先前的工作都使用了基于特征的方法——我们假设,当模型直接在下游任务上进行微调并且仅使用少量随机初始化的附加参数时,任务特定模型可以从更大、更具表现力的预训练表示中受益,即使下游任务数据非常少。
5.3 基于特征的 BERT 方法
到目前为止,所有 BERT 结果都使用了微调方法,即在预训练模型上添加一个简单的分类层,并在下游任务上联合微调所有参数。然而,基于特征的方法(从预训练模型中提取固定特征)具有某些优势。首先,并非所有任务都能轻松地用 Transformer 编码器架构表示,因此需要添加任务特定的模型架构。其次,预计算训练数据的昂贵表示并在其基础上运行更便宜的模型具有显著的计算优势。
在本节中,我们通过将 BERT 应用于 CoNLL-2003 命名实体识别(NER)任务(Tjong Kim Sang 和 De Meulder,2003)来比较这两种方法。在 BERT 的输入中,我们使用保留大小写的 WordPiece 模型,并包含数据提供的最大文档上下文。按照标准做法,我们将其表述为标注任务,但在输出中不使用 CRF 层。我们使用第一个子词元的表示作为 NER 标签集的词元级分类器的输入。
为了消融微调方法,我们应用基于特征的方法,通过从一个或多个层提取激活而不微调 BERT 的任何参数。这些上下文嵌入被用作随机初始化的两层 768 维 BiLSTM 的输入,然后再连接到分类层。
结果如表 7 所示。BERTLARGE 与最先进的方法竞争激烈。表现最好的方法将预训练 Transformer 顶部四个隐藏层的词元表示拼接起来,仅比微调整个模型低 0.3 F1。这表明 BERT 在微调和基于特征的方法中均有效。
6 结论
最近由于语言模型迁移学习带来的实证改进表明,丰富的无监督预训练是许多语言理解系统的核心部分。特别是,这些结果使得即使是低资源任务也能从深度单向架构中受益。我们的主要贡献是进一步将这些发现推广到深度双向架构,使相同的预训练模型能够成功应对广泛的 NLP 任务。
附录
“BERT:用于语言理解的深度双向 Transformer 预训练”
我们将附录分为三个部分:
- 附录 A:提供了 BERT 的额外实现细节;
- 附录 B:提供了实验的额外细节;
- 附录 C:提供了额外的消融实验。
我们提供了 BERT 的额外消融实验,包括:
- 训练步数的影响;
- 不同掩码策略的消融实验。
A BERT 的额外细节
A.1 预训练任务的示例
以下是预训练任务的示例:
掩码语言模型(MLM)及掩码过程
假设未标注的句子是 my dog is hairy
,在随机掩码过程中我们选择了第 4 个词元(对应 hairy
),掩码过程可以进一步说明如下:
- 80% 的时间:将词替换为
[MASK]
符号,例如:my dog is hairy → my dog is [MASK]
; - 10% 的时间:将词替换为随机词,例如:
my dog is hairy → my dog is apple
; - 10% 的时间:保持词不变,例如:
my dog is hairy → my dog is hairy
。这样做的目的是使表示偏向实际观察到的词。
这种方法的优点是 Transformer 编码器不知道哪些词会被要求预测或哪些词被随机替换,因此它被迫保留每个输入词元的分布上下文表示。此外,由于随机替换仅发生在所有词元的 1.5%(即 15% 的 10%),这似乎不会损害模型的语言理解能力。在 C.2 节中,我们评估了这种策略的影响。
与标准的语言模型训练相比,掩码语言模型仅对每批次中 15% 的词元进行预测,这表明模型可能需要更多的预训练步数才能收敛。在 C.1 节中,我们证明 MLM 的收敛速度略慢于从左到右的模型(预测每个词元),但 MLM 模型的实证改进远远超过了训练成本的增加。
下一句预测(NSP)
下一句预测任务的示例如下:
- 输入 =
[CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]
标签 =IsNext
- 输入 =
[CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]
标签 =NotNext
A.2 预训练过程
为了生成每个训练输入序列,我们从语料库中采样两段文本,我们称之为“句子”,尽管它们通常比单个句子长得多(但也可以更短)。第一段文本使用 A 嵌入,第二段使用 B 嵌入。50% 的时间 B 是 A 的实际下一句,50% 的时间是随机句子,这是为“下一句预测”任务设计的。采样时确保组合长度 ≤ 512 个词元。LM 掩码在 WordPiece 分词后以 15% 的统一掩码率应用,且不考虑部分词元。
我们以 256 个序列的批量大小(256 序列 * 512 词元 = 128,000 词元/批次)训练 1,000,000 步,这大约是在 33 亿词语料库上的 40 个 epoch。我们使用 Adam 优化器,学习率为 1e-4, β 1 = 0.9 \beta_1=0.9 β1=0.9, β 2 = 0.999 \beta_2=0.999 β2=0.999,L2 权重衰减为 0.01,前 10,000 步进行学习率预热,之后线性衰减学习率。所有层的 dropout 概率为 0.1。我们使用 gelu 激活函数(Hendrycks 和 Gimpel,2016),而不是标准的 relu,这是遵循 OpenAI GPT 的做法。训练损失是掩码 LM 似然和下一句预测似然的平均值之和。
B E R T B A S E BERT_{BASE} BERTBASE 的训练在 4 个 Cloud TPU Pod 配置(共 16 个 TPU 芯片)上进行, B E R T L A R G E BERT_{LARGE} BERTLARGE 的训练在 16 个 Cloud TPU(共 64 个 TPU 芯片)上进行。每次预训练需要 4 天完成。
由于注意力机制与序列长度成二次方关系,较长的序列成本更高。为了加速预训练,我们在 90% 的步骤中使用长度为 128 的序列进行预训练,然后在剩余的 10% 步骤中使用长度为 512 的序列来学习位置嵌入。
A.3 微调过程
在微调过程中,大多数模型超参数与预训练相同,除了批量大小、学习率和训练 epoch 数。dropout 概率始终保持在 0.1。最佳超参数值因任务而异,但我们发现以下范围在所有任务中表现良好:
- 批量大小:16, 32
- 学习率(Adam): 5e-5, 3e-5, 2e-5 \text{5e-5, 3e-5, 2e-5} 5e-5, 3e-5, 2e-5
- epoch 数:2, 3, 4
我们还观察到,大数据集(例如 10 万+标注训练样本)对超参数选择的敏感性远低于小数据集。微调通常非常快,因此可以简单地对上述参数进行穷举搜索,并选择在开发集上表现最好的模型。
A.4 BERT、ELMo 和 OpenAI GPT 的比较
我们研究了最近流行的表示学习模型(包括 ELMo、OpenAI GPT 和 BERT)之间的差异。模型架构的比较如图 3 所示。请注意,除了架构差异外,BERT 和 OpenAI GPT 是微调方法,而 ELMo 是基于特征的方法。
与 BERT 最接近的现有预训练方法是 OpenAI GPT,它在大型文本语料库上训练了一个从左到右的 Transformer 语言模型。事实上,BERT 的许多设计决策是为了使其尽可能接近 GPT,以便两种方法可以进行最小化比较。本文的核心论点是双向性和 3.1 节中提出的两个预训练任务占据了大部分实证改进,但我们注意到 BERT 和 GPT 的训练方式还有其他一些差异:
- GPT 在 BooksCorpus(8 亿词)上训练;BERT 在 BooksCorpus(8 亿词)和维基百科(25 亿词)上训练。
- GPT 在微调时才引入句子分隔符
[SEP]
和分类符[CLS]
;BERT 在预训练期间学习[SEP]
、[CLS]
和句子 A/B 嵌入。 - GPT 训练了 100 万步,批量大小为 32,000 词;BERT 训练了 100 万步,批量大小为 128,000 词。
- GPT 在所有微调实验中使用相同的学习率 5e-5;BERT 选择在开发集上表现最佳的任务特定学习率。
为了隔离这些差异的影响,我们在 5.1 节中进行了消融实验,证明大部分改进实际上来自两个预训练任务及其启用的双向性。
A.5 不同任务微调的图示
图 4 展示了在不同任务上微调 BERT 的图示。我们的任务特定模型通过将 BERT 与一个额外的输出层结合形成,因此需要从头学习的参数数量最少。在这些任务中,(a) 和 (b) 是序列级任务,而 © 和 (d) 是词元级任务。在图中,E 表示输入嵌入,T_i 表示词元 i 的上下文表示,[CLS]
是分类输出的特殊符号,[SEP]
是分隔非连续词元序列的特殊符号。
B 详细实验设置
B.1 GLUE 基准实验的详细描述
我们在表 1 中的 GLUE 结果来自 GLUE 排行榜 和 OpenAI 博客。GLUE 基准包括以下数据集,其描述最初总结在 Wang 等(2018a)中:
- MNLI:多类型自然语言推理,是一个大规模的众包蕴含分类任务(Williams 等,2018)。
- QQP:Quora 问题对,是一个二分类任务,目标是确定 Quora 上的两个问题是否语义等价(Chen 等,2018)。
- QNLI:问题自然语言推理,是斯坦福问答数据集(Rajpurkar 等,2016)的版本,已转换为二分类任务(Wang 等,2018a)。
- SST-2:斯坦福情感树库,是一个二分类单句任务,由从电影评论中提取的句子组成(Socher 等,2013)。
- CoLA:语言可接受性语料库,是一个二分类单句任务,目标是预测英语句子是否在语言学上“可接受”(Warstadt 等,2018)。
- STS-B:语义文本相似性基准,是一个从新闻标题和其他来源提取的句子对集合(Cer 等,2017)。
- MRPC:微软研究释义语料库,由从在线新闻源自动提取的句子对组成(Dolan 和 Brockett,2005)。
- RTE:识别文本蕴含,是一个类似于 MNLI 的二分类蕴含任务,但训练数据少得多(Bentivogli 等,2009)。
- WNLI:Winograd NLI,是一个小型自然语言推理数据集(Levesque 等,2011)。
GLUE 网页指出该数据集的构建存在问题,因此我们将其排除在外以确保对 OpenAI GPT 公平。在我们的 GLUE 提交中,我们始终预测多数类。
额外消融实验
C.1 训练步数的影响
图 5 展示了在预训练 k 步后微调的 MNLI 开发集准确率。这使我们能够回答以下问题:
- 问题:BERT 真的需要如此大量的预训练(128,000 词/批次 * 1,000,000 步)才能实现高微调准确率吗?
答案:是的, B E R T B A S E BERT_{BASE} BERTBASE 在训练 100 万步时比 50 万步在 MNLI 上实现了近 1.0% 的额外准确率。 - 问题:由于 MLM 预训练每批次仅预测 15% 的词元,而不是每个词元,它的收敛速度是否比 LTR 预训练慢?
答案:MLM 模型的收敛速度确实略慢于 LTR 模型。然而,就绝对准确率而言,MLM 模型几乎立即开始优于 LTR 模型。
C.2 不同掩码策略的消融实验
在 3.1 节中,我们提到 BERT 在使用掩码语言模型(MLM)目标进行预训练时,采用了混合策略来掩码目标词元。以下是对不同掩码策略效果的消融研究。
需要注意的是,掩码策略的目的是减少预训练和微调之间的不匹配,因为 [MASK]
符号在微调阶段从未出现。我们报告了 MNLI 和 NER 的开发集结果。对于 NER,我们同时报告了微调和基于特征的方法,因为我们预计这种不匹配在基于特征的方法中会被放大,因为模型没有机会调整表示。
结果如表 8 所示。在表中:
- MASK 表示我们将目标词元替换为
[MASK]
符号; - SAME 表示我们保持目标词元不变;
- RND 表示我们将目标词元替换为另一个随机词元。
表的左侧部分表示在 MLM 预训练期间使用的特定策略的概率(BERT 使用 80%、10%、10%),右侧部分表示开发集结果。对于基于特征的方法,我们拼接了 BERT 的最后 4 层作为特征,这在 5.3 节中被证明是最佳方法。
从表中可以看出,微调对不同掩码策略的鲁棒性令人惊讶。然而,正如预期的那样,仅使用 MASK 策略在将基于特征的方法应用于 NER 时存在问题。有趣的是,仅使用 RND 策略的表现也比我们的策略差得多。