当前位置: 首页 > news >正文

BERT:深度双向Transformer的预训练用于语言理解

摘要

我们介绍了一种新的语言表示模型,名为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 CRH,第 i 个输入词元的最终隐藏向量表示为 T i ∈ R H T_i\in\mathbb{R}^H TiRH
对于给定的词元,其输入表示通过将对应的词元嵌入、段嵌入和位置嵌入相加来构建。图 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 CRH 作为聚合表示。微调期间引入的唯一新参数是分类层权重 W ∈ R K × H W\in\mathbb{R}^{K\times H} WRK×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 5e5,4e5,3e5 2 e − 5 \mathrm{2e-5} 2e5 中选择)。此外,对于 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 SRH 和一个结束向量 E ∈ R H E\in\mathbb{R}^H ERH。词元 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=jeSTjeSTi。类似的公式用于计算答案范围的结束位置。从位置 i 到位置 j 的候选范围的得分定义为 S ⋅ T i + E ⋅ T j S\cdot T_{i}+E\cdot T_{j} STi+ETj,得分最高的范围(j ≥ i)被用作预测结果。训练目标是正确起始和结束位置的对数似然之和。我们以 5 e − 5 \mathrm{5e-5} 5e5的学习率和 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=SC+EC 与最佳非空范围的得分 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^=maxjiSTi+ETj进行比较。当 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} 5e5 的学习率和 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} 2e5的学习率和 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 开发集准确率。这使我们能够回答以下问题:

  1. 问题:BERT 真的需要如此大量的预训练(128,000 词/批次 * 1,000,000 步)才能实现高微调准确率吗?
    答案:是的, B E R T B A S E BERT_{BASE} BERTBASE 在训练 100 万步时比 50 万步在 MNLI 上实现了近 1.0% 的额外准确率。
  2. 问题:由于 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 策略的表现也比我们的策略差得多。

相关文章:

BERT:深度双向Transformer的预训练用于语言理解

摘要 我们介绍了一种新的语言表示模型,名为BERT,全称为来自Transformer的双向编码器表示。与最近的语言表示模型(Peters等,2018a;Radford等,2018)不同,BERT旨在通过在所有层中联合调…...

【AI-23】深度学习框架中的神经网络3

神经网络有多种不同的类型,每种类型都针对特定的任务和数据类型进行优化。根据任务的特点和所需的计算能力,可以选择适合的神经网络类型。以下是一些主要的神经网络类型及其适用的任务领域。 1. 深度神经网络(DNN) 结构&#xf…...

网站运营数据pv、uv、ip

想要彻底弄清楚pv uv ip的区别,首先要知道三者的定义: IP(独立IP)的定义: 即Internet Protocol,指独立IP数。24小时内相同公网IP地址只被计算一次。 PV(访问量)的定义: 即Page View,即页面浏览量或点击量,用户每次刷…...

高阶知识库搭建实战五、(向量数据库Milvus安装)

以下是关于在Windows环境下直接搭建Milvus向量数据库的教程: 本教程分两部分,第一部分是基于docker安装,在Windows环境下直接安装Milvus向量数据库,目前官方推荐的方式是通过Docker进行部署,因为Milvus的运行环境依赖于Linux系统。 如果你希望在Windows上直接运行Milvus…...

【TR369】RTL8197FH-VG+RTL8812F增加TR369 command节点

sdk说明 ** Gateway/AP firmware v3.4.14b – Aug 26, 2019**  Wireless LAN driver changes as:  Refine WiFi Stability and Performance  Add 8812F MU-MIMO  Add 97G/8812F multiple mac-clone  Add 97G 2T3R antenna diversity  Fix 97G/8812F/8814B MP issu…...

FPGA实现UART对应的电路和单片机内部配合寄存器实现的电路到底有何区别?

一、UART相关介绍 UART是我们常用的全双工异步串行总线,常用TTL电平标准,由TXD和RXD两根收发数据线组成。 那么,利用硬件描述语言实现UART对应的电路和51单片机内部配合寄存器实现的电路到底有何区别呢?接下来我们对照看一下。 …...

数据库模型全解析:从文档存储到搜索引擎

目录 前言1. 文档存储(Document Store)1.1 概念与特点1.2 典型应用1.3 代表性数据库 2. 图数据库(Graph DBMS)2.1 概念与特点2.2 典型应用2.3 代表性数据库 3. 原生 XML 数据库(Native XML DBMS)3.1 概念与…...

【Java基础】Java异常捕捉,throws/throw、finally、try、catch关键字的含义与运用

1. Java 异常处理: 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。 比如说,你的代码少了一个分号,那么运行出来结果是提示是错 java.lang.Error;如果你用System.out.p…...

Android Studio 安装配置(个人笔记)

Android studio安装的前提是必须保证安装了jdk1.8版本以上 一、查看是否安装jdk cmd打开命令行,输入java -version 最后是一个关键点 输入 javac ,看看有没有相关信息 没有就下载jdk Android studio安装的前提是必须保证安装了jdk1.8版本以上 可以到…...

计算机网络——数据链路层-介质访问控制

一、介质访问控制方法 在局域网中, 介质访问控制(medium access control)简称MAC,也就是信道访问控制方法,可以 简单的把它理解为如何控制网络节点何时发送数据、如何传输数据以及怎样在介质上接收数据, 是解决当局域网中共用信道的使用产生竞…...

pytest日志显示

在 pytest 中,可以通过 钩子函数 和 配置文件 pytest.ini 配置日志的显示方式,实现对日志的灵活控制。以下是常用实现方式及配置说明。 方式一:使用 conftest.py 钩子函数自定义日志显示 通过 conftest.py 文件中的钩子函数,实现…...

【信息系统项目管理师】第15章:项目风险管理过程详解

更多内容请见: 备考信息系统项目管理师-专栏介绍和目录 文章目录 一、规划风险管理1、输入2、工具与技术3、输出二、识别风险1、输入2、工具与技术3、输出三、实施定性风险分析1、输入2、工具与技术3、输出四、实施定量风险分析1、输入2、工具与技术3、输出五、规划风险应对1、…...

Diffusers 使用 LoRA

使用diffusers 加载 LoRA,实现文生图功能。摘自 diffusers文档。 模型可以根据名称去modelscope找对应资源下载。使用的时候需要替换成具体路径。虽然modelscope和diffusers都使用了模型id,但是并不能通用。 不同的LoRA对应了不同的“trigger” words&am…...

云安全博客阅读(二)

2024-05-30 Cloudflare acquires BastionZero to extend Zero Trust access to IT infrastructure IT 基础设施的零信任 不同于应用安全,基础设置的安全的防护紧急程度更高,基础设施的安全防护没有统一的方案IT基础设施安全的场景多样,如se…...

SpringCloud系列教程:微服务的未来(六)docker教程快速入门、常用命令

对于开发人员和运维工程师而言,掌握 Docker 的基本概念和常用命令是必不可少的。本篇文章将带你快速入门 Docker,并介绍一些最常用的命令,帮助你更高效地进行开发、测试和部署。 目录 前言 快速入门 docker安装 配置镜像加速 部署Mysql …...

Vue 快速入门:开启前端新征程

在当今的 Web 开发领域,Vue.js 作为一款极具人气的 JavaScript 前端框架,正被广泛应用于各类项目之中。它以简洁的语法、高效的数据绑定机制以及强大的组件化开发模式,为开发者们带来了前所未有的开发体验。如果你渴望踏入前端开发的精彩世界…...

UVM:uvm_component methods configure

topic UVM component base class uvm_config_db 建议使用uvm_config_db代替uvm_resource_db uvm factory sv interface 建议:uvm_config_db 以下了解 建议打印error...

LLM 训练中存储哪些矩阵:权重矩阵,梯度矩阵,优化器状态

LLM 训练中存储哪些矩阵 目录 LLM 训练中存储哪些矩阵深度学习中梯度和优化器是什么在 LLM 训练中通常会存储以下矩阵: 权重矩阵:这是模型的核心组成部分。例如在基于 Transformer 架构的 LLM 中,每一层的多头注意力机制和前馈神经网络都会有相应的权重矩阵。以 BERT 模型为…...

大模型思维链推理的进展、前沿和未来分析

大模型思维链推理的综述:进展、前沿和未来 "Chain of Thought Reasoning: A State-of-the-Art Analysis, Exploring New Horizons and Predicting Future Directions." 思维链推理的综述:进展、前沿和未来 摘要:思维链推理&#…...

NLP 技术的突破与未来:从词嵌入到 Transformer

在过去的十年中,自然语言处理(NLP)经历了深刻的技术变革。从早期的统计方法到深度学习的应用,再到如今Transformer架构的普及,NLP 的发展不仅提高了模型的性能,还扩展了其在不同领域中的应用边界。 1. 词嵌…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...