摘要
我们提出了一种新的称为BERT的语言表示模型,BERT代表来自Transformer的双向编码器表示(Bidirectional Encoder Representations from Transformers)。不同于最近的语言表示模型(Peters et al., 2018,Radford et al., 2018),BERT旨在通过联合调节所有层中的左右上下文来预训练深度双向表示。因此,只需要一个额外的输出层,就可以对预训练的BERT表示进行微调,从而为广泛的任务(比如回答问题和语言推断任务)创建最先进的模型,而无需对特定于任务进行大量模型结构的修改。
BERT的概念很简单,但实验效果很强大。它刷新了11个NLP任务的当前最优结果,包括将GLUE基准提升至80.4%(7.6%的绝对改进)、将MultiNLI 的准确率提高到86.7%(5.6%的绝对改进),以及将SQuAD v1.1的问答测试F1得分提高至93.2 分(提高1.5分)——比人类表现还高出2分。
1. 介绍
语言模型预训练可以显著提高许多自然语言处理任务的效果(Dai and Le, 2015;Peters et al., 2018;Radford et al., 2018;Howard and Ruder, 2018)。这些任务包括句子级任务,如自然语言推理(Bow-man et al., 2015;Williams et al., 2018)和释义(Dolan and Brockett, 2005),目的是通过对句子的整体分析来预测句子之间的关系,以及标记级任务,如命名实体识别(Tjong Kim Sang and De Meulder, 2003)和SQuAD问答(Rajpurkar et al., 2016),模型需要在标记级生成细粒度的输出。
现有的两种方法可以将预训练好的语言模型表示应用到下游任务中:基于特征的和微调。基于特征的方法,如 ELMo (Peters et al., 2018),使用特定于任务的模型结构,其中包含预训练的表示作为附加特特征。微调方法,如生成预训练 Transformer (OpenAI GPT) (Radford et al., 2018)模型,然后引入最小的特定于任务的参数,并通过简单地微调预训练模型的参数对下游任务进行训练。在之前的工作中,两种方法在预训练任务中都具有相同的目标函数,即使用单向的语言模型来学习通用的语言表达。
我们认为,当前的技术严重地限制了预训练表示的效果,特别是对于微调方法。主要的局限性是标准语言模型是单向的,这就限制了可以在预训练期间可以使用的模型结构的选择。例如,在 OpenAI GPT 中,作者使用了从左到右的模型结构,其中每个标记只能关注 Transformer 的自注意层中该标记前面的标记(Williams et al., 2018)。这些限制对于句子级别的任务来说还可以接受,但当把基于微调的方法用来处理标记级别的任务(如 SQuAD 问答)时可能会造成不良的影响(Rajpurkar et al., 2016),因为在 标记级别的任务下,从两个方向分析上下文是至关重要的。
在本文中,我们通过提出BERT改进了基于微调的方法:来自Transformer的双向编码器表示。受完形填空任务的启发,BERT通过提出一个新的预训练任务来解决前面提到的单向约束:"遮蔽语言模型"(MLM masked language model)(Tay-lor, 1953)。遮蔽语言模型从输入中随机遮蔽一些标记,目的是仅根据被遮蔽标记的上下文来预测它对应的原始词汇的id。与从左到右的语言模型预训练不同,MLM目标允许表示融合左右上下文,这允许我们预训练一个深层双向Transformer。除了遮蔽语言模型之外,我们还提出了一个联合预训练文本对来进行"下一个句子预测"的任务。
本文的贡献如下:
- 我们论证了双向预训练对语言表征的重要性。与Radford et al., 2018使用单向语言模型进行预训练不同,BERT使用遮蔽语言模型来实现预训练深层双向表示。这也与 Peters et al., 2018的研究形成了对比,他们使用了一个由左到右和由右到左的独立训练语言模型的浅层连接。
- 我们表明,预训练的表示消除了许多特定于任务的高度工程化的模型结构的需求。BERT是第一个基于微调的表示模型,它在大量的句子级和标记级任务上实现了最先进的性能,优于许多特定于任务结构的模型。
- BERT为11个NLP任务提供了最先进的技术。我们还进行大量的消融研究,证明了我们模型的双向本质是最重要的新贡献。代码和预训练模型将可在 goo.gl/language/bert 获取。
2 相关工作
预训练通用语言表示有很长的历史,我们将在本节简要回顾最流行的方法。
2.1 无监督基于特征的方法
几十年来,学习广泛适用的词语表示一直是一个活跃的研究领域,包括非神经网络学领域(Brown et al., 1992;;Blitzer et al., 2006)和神经网络领域(Collobert and Weston, 2008;Mikolov et al., 2013;Pennington et al., 2014)。经过预训练的词嵌入被认为是现代NLP系统的一个不可分割的部分,词嵌入提供了比从头开始学习的显著改进(Turian et al., 2010)。
为了预训练词嵌入向量,已经使用了从左到右的语言建模目标(姆尼和欣顿,2009),以及在左右上下文中区分正确单词和错误单词的目标(Mikolov等。,2013)。
这些方法已被推广到更粗的粒度,如句子嵌入(Kiros et al., 2015;Logeswaran and Lee, 2018)或段落嵌入(Le and Mikolov, 2014)。为了训练句子的表示形式,以前的工作使用目标对候选下一个句子进行排名(Jernite 等,2017;Logeswaran等,2018),从左到右生成下一句单词,并给出前一句的表示形式(Kiros,2015),或去除自动编码器得出的目标(希尔等。,2016).与传统的单词嵌入一样,这些学习到的表示通常也用作下游模型的输入特征。
ELMo(Peters et al., 2017)从不同的维度对传统的词嵌入研究进行了概括。他们建议从语言模型中提取上下文敏感的特征。他们从左到右和从右到左的语言模型中提取上下文相关的功能。每个标记的上下文表示是从左到右和从右到左表示的串联。在将上下文嵌入与特定于任务的架构集成时,ELMo为几个主要的NLP标准提供了最先进的技术(Peters et al., 2018),包括在SQuAD上的问答(Rajpurkar et al., 2016),情感分析(Socher et al., 2013),和命名实体识别(jong Kim Sang and De Meul-der, 2003)。Melamudetal. (2016)建议通过一项任务来学习上下文表示,以使用LSTM从左右上下文预测单个单词。与ELMo相似,它们的模型是基于特征的,并且不是双向的。Fedusetal.(2018)表明,完形填空任务可用于提高文本生成模型的鲁棒性。
2.2 无监督基于微调的方法
与基于特征的方法一样,第一种方法仅在此方向上有效,它仅来自未标记文本的预训练词嵌入参数(Col-洛伯特和韦斯顿,2008)。
最近,产生上下文标记表示的句子或文档编码器已经从未标记的文本中进行了预训练,并针对有监督的下游任务进行了微调(戴和乐,2015;霍华德与鲁德,2018;雷德福等,2018)。这些方法的优点是几乎不需要从头学习参数。至少部分得益于这一优势,OpenAI GPT(Radford et al., 2018)在GLUE基准测试的许多句子级任务上取得了此前最先进的结果(Wang et al.(2018))。从左到右的语言模型和自动编码器物镜已用于预训练此类模型。(Howard and Ruder, 2018; Radford et al., 2018; Dai and Le, 2015).
语言模型迁移学习(LMs)的一个最新趋势是,在对受监督的下游任务的模型进行微调之前,先对LM目标上的一些模型构造进行预训练(Dai and Le, 2015;Howard and Ruder, 2018;Radford et al., 2018)。这些方法的优点是只有很少的参数需要从头开始学习。
2.3 从有监督的数据中迁移学习
虽然无监督预训练的优点是可用的数据量几乎是无限的,但也有研究表明,从具有大数据集的监督任务中可以进行有效的迁移,如自然语言推理(Con-neau et al., 2017)和机器翻译(McCann et al., 2017)。在NLP之外,计算机视觉研究也证明了从大型预训练模型中进行迁移学习的重要性,其中一个有效的方法是可以在ImageNet上微调预训练的模型。(Deng et al., 2009;Yosinski et al., 2014)
3 BERT
本节将介绍BERT及其具体实现。我们的框架有两个步骤:预训练和微调。在预训练期间,通过不同的预训练任务对未标记的数据进行模型训练。为了进行微调,首先使用预训练的参数初始化BERT模型,然后使用下游任务中的标记数据对所有的参数进行微调。每个下游任务都有单独的微调模型,即使他们是被相同预训练参数初始化的。图一中的问答案例将作为本节的运行示范。
图1:BERT的总体预训练和微调程序。除输出层外,预训练和微调都使用相同的体系结构。相同的预训练模型参数用于初始化不同下游任务的模型。在微调期间,对所有参数进行微调。[CLS]是在每个输入示例前添加的特殊符号,[SEP]是特殊的分隔符标记(例如,分隔问题/答案)。
BERT的一个显着特征是其跨不同任务的统一体系结构。预训练的体系结构与最终的下游体系结构之间的差异很小。
首先介绍了BERT模型结构和输入表示。然后我们在3.3节介绍本文的核心创新——预训练任务。在3.4和3.5节中分别详细介绍了预训练过程和微调模型过程。最后,在3.6节中讨论了BERT和OpenAI GPT之间的区别。
模型体系结构
BERT的模型架构是多层双向Transformer编码器,基于Vaswani等人描述的原始实现,并在tensor2tensor库中发布。由于已经普遍使用了Transformers,并且我们的实现几乎与原始实现相同,因此,我们将省略对模型体系结构的详尽背景说明,并向读者介绍Vaswani等人以及出色的阐明,例如"The Annotated Transformer"。
在这项工作中,我们将层(即,Transformer块)的数量表示为L,将隐藏的大小表示为H,并将自注意力头的数量表示为A。我们主要报告两种模型尺寸的结果:(L=12,H=768,A=12,总参数=110M)和(L=24,H=1024,A=16,总参数=340M)。
为了进行比较,选择具有与OpenAI GPT相同的模型大小。但是,至关重要的是,BERT Tranformer使用双向自我关注,而GPT Transformer使用受限的自我关注,其中每个标记只能关注其左侧的上下文。
输入/输出表示
为了使BERT处理各种下游任务,我们的输入表示形式可以在一个标记序列中明确表示单个句子和一对句子(例如,Question,Answer)。在整个工作中,"句子"可以是连续文本的任意范围,而不是实际的语言句子。"序列"是指BERT的输入标记序列,它可以是一个句子或两个句子包装在一起。
我们使用具有30000个标记词汇表的词嵌入。每个序列的第一个标记始终是一个特殊的分类标记([CLS])。与该标记相对应的最终隐藏状态用作分类任务的聚合序列表示。句子对打包在一起形成单个序列。我们通过两种方式区分句子。首先,我们使用特殊标记([SEP])将它们分开。其次,我们向每个标记添加可学习的嵌入,以指示它是属于句子A还是句子B。如图1所示,我们将输入嵌入表示为E,将特殊[CLS]标记的最终隐藏向量表示为C∈RH,并且输入标记机的最终隐藏向量为Ti∈RH。
对于给定的token,其输入表示形式是通过将相应的词嵌入、分段和位置嵌入相加而构造的。这种结构的可视化效果如图2所示。
图2:BERT输入表示,输入的嵌入是标记嵌入,分段嵌入和位置嵌入的总和。
3.1 预训练BERT
与Peters等人和Radford等人不同,我们不使用传统的从左到右或从右到左的语言模型对BERT进行预训练。相反,我们使用本节中描述的两个无监督任务对BERT进行预训练。此步骤显示在图1的左侧。
任务一:Masked LM
任务2:Next Sentence Prediction(NSP)
NSP任务与Jernite等人以及Logeswaran和Lee所使用的表示学习目标密切相关。但是,在先验工作中,只有句子嵌入被传输到下游任务,BERT传输所有参数以初始化最终任务模型参数。
3.2 微调BERT
4. 实验(略)
在本节中,我们将介绍11个NLP任务的BERT fine-tuning结果。
5. 模型简化测试
在本节中,我们将对BERT的多个方面进行消融实验,以更好地了解它们的相对重要性。其他消融研究可在附录C中找到。
5.1 Effect of Pre-training Tasks
通过使用与完全相同的预训练数据、微调方案和超参数来评估两个预训练目标,我们证明了BERT双向深度的重要性:
No NSP:双向模型,使用"masked LM"(MLM)进行训练,但没有"next sentence prediction"(NSP)任务。
5.2 Effect of Model Size
在本节中,我们探索模型大小对微调任务准确性的影响。我们训练了许多具有不同层数,隐藏单元和注意头的BERT模型,而其他方面则使用了与之前所述相同的超参数和训练过程。
5.3 Feature-based Approach with BERT
为了对比这种微调方法,我们采用基于特征的方法,从一个或多个层中提取激活特征,而不需要微调bert的任何参数。这些上下文嵌入用作在分类层之前随机初始化的两层768维bilstm的输入中。