BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
arXiv 📆 2019-5-24
Abstract
作者提出了一种新型的语言表示模型,名为 BERT(Bidirectional Encoder Representations from Transformers)。 BERT 旨在通过联合调节所有层中的左右上下文来预训练未标记文本的深度双向表示。 因此,只需一个额外的输出层即可对预训练的 BERT 模型进行微调,从而为问答和语言推理等各种任务创建最先进的模型,而无需对特定于任务的架构进行大量修改。
Introduction
语言模型预训练已被证明可以有效改善许多自然语言处理任务。 其中包括句子级任务,例如自然语言推理和释义,其目的是通过整体分析句子来预测句子之间的关系, 如标记级任务中命名实体识别和问答,其中模型需要在标记级产生细粒度的输出。
将预训练的语言表示应用于下游任务有两种现有策略:基于特征和微调。 基于特征的方法,例如 ELMo,使用特定于任务的架构,其中包括预训练的表示作为附加特征。 微调方法,例如生成式预训练Transformer(OpenAI GPT),引入了最少的特定于任务的参数,并通过简单地微调所有预训练参数来对下游任务进行训练。 这两种方法在预训练期间共享相同的目标函数,它们使用单向语言模型来学习通用语言表示。
认为当前的技术限制了预训练表示的能力,特别是对于微调方法。 主要限制是标准语言模型是单向的,这限制了预训练期间可以使用的架构的选择。 例如,在 OpenAI GPT 中,作者使用从左到右的架构,其中每个 token 只能关注 Transformer 的自注意力层中先前的 token。 这种限制对于句子级任务来说并不是最优的,并且当将基于微调的方法应用于标记级任务(例如问答)时可能非常有害,因为在这些任务中,从两个方向合并上下文至关重要。
作者过提出 BERT:来自 Transformers 的双向编码器表示来改进基于微调的方法。 BERT 通过使用受完形填空任务启发的"掩码语言模型"(MLM)预训练目标来缓解前面提到的单向性约束。 掩码语言模型随机屏蔽输入中的一些 token,目标是仅根据上下文来预测被屏蔽单词的原始词汇 ID。 与从左到右的语言模型预训练不同,MLM 目标使表示能够融合左右上下文,这使我们能够预训练深度双向 Transformer。
Related Work
预训练通用语言表示有着悠久的历史,我们在本节中简要回顾一下最广泛使用的方法。
无监督的基于特征的方法
学习广泛适用的单词表示几十年来一直是一个活跃的研究领域,包括非神经和神经方法。 预训练的词嵌入是现代 NLP 系统不可或缺的一部分,与从头开始学习的嵌入相比,它提供了显着的改进。 为了预训练词嵌入向量,使用了从左到右的语言建模目标,以及区分左右上下文中正确和错误单词的目标。
这些方法已推广到更粗的粒度,例如句子嵌入或段落嵌入。 为了训练句子表示,先前的工作使用目标对候选下一个句子进行排名,在给定前一个句子的表示的情况下从左到右生成下一个句子单词, 或去噪自动编码器导出的目标。ELMo 及其前身沿着不同的维度概括了传统的词嵌入研究。 他们从从左到右和从右到左的语言模型中提取上下文相关的特征。 每个标记的上下文表示是从左到右和从右到左表示的串联。 当将上下文词嵌入与现有的特定于任务的架构集成时,ELMo 推进了几个主要 NLP 基准的最新技术,包括问答、情感分析,以及命名实体识别。 梅拉穆德等人。 (2016) 提出通过使用 LSTM 从左右上下文预测单个单词的任务来学习上下文表示。 与 ELMo 类似,他们的模型是基于特征的,而不是深度双向的。费杜斯等人。 (2018) 表明完形填空任务可用于提高文本生成模型的鲁棒性。
无监督微调方法
与基于特征的方法一样,第一个在这个方向上仅使用来自未标记文本的预训练词嵌入参数。 最近,产生上下文标记表示的句子或文档编码器已经根据未标记的文本进行了预训练,并针对监督下游任务进行了微调。 这些方法的优点是几乎不需要从头开始学习参数。至少部分由于这一优势,OpenAI GPT在 GLUE 基准测试的许多句子级任务上取得了先前最先进的结果。 从左到右的语言建模和自动编码器目标已用于预训练此类模型。
从监督数据迁移学习
还有一些工作展示了从具有大型数据集的监督任务中的有效迁移,例如自然语言推理和机器翻译。 计算机视觉研究还证明了从大型预训练模型中进行迁移学习的重要性,其中一个有效的方法是对使用 ImageNet 预训练的模型进行微调。
BERT
Figure 1: Overall pre-training and fine-tuning procedures for BERT.
BERT 框架有两个步骤:预训练和微调。在预训练期间,模型在不同的预训练任务中使用未标记的数据进行训练。 对于微调,BERT 模型首先使用预先训练的参数进行初始化,然后使用来自下游任务的标记数据对所有参数进行微调。 每个下游任务都有单独的微调模型,即使它们是使用相同的预训练参数进行初始化的。 图 1 中的问答示例将作为本节的运行示例。
BERT 的一个显着特点是跨不同任务的统一架构。
模型结构
BERT 的模型架构是一个多层双向 Transformer 编码器,基于 Vaswani 等人描述的原始实现并在tensor2tensor库中发布。 在这项工作中,我们将层数(即 Transformer 块)表示为 L,隐藏大小表示为 H,自注意力头的数量表示为 A 。 我们主要报告两种模型大小的结果:BERTBASE(L= 12,H=768,A=12,总参数=110M)和BERTLARGE(L=24,H=1024,A=16,总参数=340M)。 为了进行比较,选择 BERTBASE 与 OpenAI GPT 具有相同的模型大小。 然而,重要的是,BERT Transformer 使用双向自注意力,而 GPT Transformer 使用受限自注意力,其中每个令牌只能关注其左侧的上下文。
输入输出表示

Figure 2: BERT input representation.
为了使 BERT 处理各种下游任务,我们的输入表示能够在一个 token 序列中明确表示单个句子和一对句子(例如,〈问题,答案〉)。 在整个工作中,“句子”可以是连续文本的任意范围,而不是实际的语言句子。 “序列”是指 BERT 的输入 token 序列,它可以是单个句子,也可以是打包在一起的两个句子。 我们使用包含 30,000 个 token 词汇的 WordPiece 嵌入。 与该标记对应的最终隐藏状态用作分类任务的聚合序列表示。 句子对被打包成一个序列。我们以两种方式区分句子。首先,我们用一个特殊的标记([SEP])将它们分开。 其次,我们向每个标记添加一个学习嵌入,指示它属于句子 A 还是句子 B。 如图 1 所示,我们将输入嵌入表示为 E,将特殊 [CLS] 标记的最终隐藏向量表示为 C ∈ RH ,第 i 个输入标记的最终隐藏向量为 Ti ∈ RH 。 对于给定的标记,其输入表示是通过对相应的标记、段和位置嵌入求和来构造的。这种结构的可视化如图 2 所示。
预训练BERT
与彼得斯等人不同。 (2018a) 和 Radford 等人。 (2018),我们不使用传统的从左到右或从右到左的语言模型来预训练 BERT。 相反,我们使用本节中描述的两个无监督任务来预训练 BERT。此步骤如图 1 的左侧部分所示。
Masked LM
直观上,我们有理由相信深度双向模型严格来说比从左到右模型或从左到右和从右到左模型的浅层串联更强大。 不幸的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件允许每个单词间接“看到自己”,并且该模型可以简单地以多层语境中方式预测目标单词。
为了训练深度双向表示,我们只需随机屏蔽一定比例的输入标记,然后预测这些屏蔽标记。 我们将此过程称为“掩码 LM”(MLM),尽管它在文献中经常被称为完形填空任务(Taylor,1953)。 在这种情况下,与掩码标记相对应的最终隐藏向量被输入到词汇表上的输出 softmax 中,就像在标准 LM 中一样。 在我们所有的实验中,我们随机屏蔽每个序列中所有 WordPiece 标记的 15%。 与去噪自动编码器(Vincent et al., 2008)相比,我们只预测屏蔽词而不是重建整个输入。
虽然这使我们能够获得双向预训练模型,但缺点是我们在预训练和微调之间造成了不匹配,因为 [MASK] 标记在微调期间不会出现。 为了缓解这种情况,我们并不总是用实际的 [MASK] 标记替换“屏蔽”单词。 训练数据生成器随机选择 15% 的 token 位置进行预测。 如果选择第 i 个令牌,我们将第 i 个令牌替换为 (1) 80% 的时间为 [MASK] 令牌 (2) 10% 的时间为随机令牌 (3) 未更改的第 i 个令牌10%的时间。 然后,Ti 将用于通过交叉熵损失来预测原始令牌。我们在附录 C.2 中比较了该过程的变体。
Next Sentence Prediction
许多重要的下游任务,例如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系,而语言建模不能直接捕获这种关系。 为了训练理解句子关系的模型,我们预先训练二值化的下一个句子预测任务,该任务可以从任何单语语料库轻松生成。 具体来说,当为每个预训练示例选择句子 A 和 B 时,50% 的时间 B 是 A 之后的实际下一个句子(标记为 IsNext), 50% 的时间它是来自语料库的随机句子(标记为 IsNext)作为NotNext)。 如图 1 所示,C 用于下一句预测 (NSP)。5 尽管它很简单,但我们在第 5.1 节中证明,针对此任务的预训练对 QA 和 NLI 都非常有益。
NSP 任务与 Jernite 等人使用的表征学习目标密切相关。 (2017) 以及 Logeswaran 和 Lee (2018)。然而,在之前的工作中,只有句子嵌入被传输到下游任务,其中 BERT 传输所有参数来初始化最终任务模型参数。
预训练数据
预训练过程很大程度上遵循现有的语言模型预训练文献。 对于预训练语料库,我们使用 BooksCorpus(8 亿字)(Zhu et al., 2015)和英语维基百科(2,500M 字)。 对于维基百科,我们仅提取文本段落并忽略列表、表格和标题。 为了提取长的连续序列,使用文档级语料库而不是打乱的句子级语料库(例如十亿字基准(Chelba et al., 2013))至关重要。
微调BERT
微调非常简单,因为 Transformer 中的自注意力机制允许 BERT 通过交换适当的输入和输出来对许多下游任务进行建模,无论它们涉及单个文本还是文本对。 对于涉及文本对的应用,常见的模式是在应用双向交叉注意力之前独立编码文本对,例如 Parikh 等人。 相反,BERT 使用自注意力机制来统一这两个阶段,因为使用自注意力对串联文本对进行编码,有效地包括两个句子之间的双向交叉注意力。
对于每个任务,我们只需将特定于任务的输入和输出插入 BERT 中,并端到端地微调所有参数。 在输入端,预训练中的句子 A 和句子 B 类似于 (1) 释义中的句子对,(2) 蕴涵中的假设-前提对(3)问答中的问题-段落对
(4) 文本分类或序列标记中的简并文本-∅对。 在输出处,令牌表示被馈送到令牌级任务的输出层,例如序列标记或问答,并且 [CLS] 表示被馈送到输出层以进行分类,例如蕴涵或情感分析。
与预训练相比,微调相对便宜。从完全相同的预训练模型开始,论文中的所有结果最多可以在 1 小时内在单个 Cloud TPU 上复制,或者在 GPU 上几个小时内复制。 7 我们在相应的文章中描述了特定于任务的细节第 4 节的小节。更多详细信息请参见附录 A.5。
Conclusion
最近由于语言模型的迁移学习而取得的实证改进表明,丰富的、无监督的预训练是许多语言理解系统不可或缺的一部分。 特别是,这些结果甚至使低资源任务也能从深度单向架构中受益。 我们的主要贡献是将这些发现进一步推广到深层双向架构,从而使相同的预训练模型能够成功处理广泛的 NLP 任务。