BERT论文中文版:用于语言理解的深度双向Transformer的预训练
BERT论文中文版:用于语言理解的深度双向Transformer的预训练
Jacob Devlin Ming-Wei Chang Kenton Lee kristina Toutanova
Google AI Language
{jacobdevlin, mingweichang, kentonl, kristout}@google.com
摘要
本文介绍了一种新的语言表示模型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., 2017, 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)。在SQuAD问答系统中,要求模型能生成在标记级别可微调的输出。
目前有两种策略可用于将预训练语言表示应用于下游任务:基于特征和微调。基于特征方法,如ELMo(Peters et al., 2018),使用特定于任务的架构,其中包含预训练的表示,作为附加的功能。微调方法,如Generative Pre-trained Transformer (OpenAI GPT) (Radford et al., 2018),引入最少的特定于任务的参数,仅仅通过微调预训练的参数,在下游任务中进行训练。在以前的工作中,两种方法在预训练期间共享相同的目标函数。在这些方法中,他们使用单向语言模型来学习常规的语言表示。
我们认为,当前的技术严重限制了预训练表示的能力,特别是对于微调方法。主要的限制是标准语言模型是单向的,这限制了在预训练期间可以使用的架构的选择。例如,在OpenAI GPT中,作者使用了从左到右的架构,其中每一个标记只能处理transformer的自我关注层中前面的标记(Vaswani et al., 2017)。这些限制对于句子级别任务来说并不是好事,而且在将基于微调的方法应用于标记级别的任务(如SQuAD问答系统)时,可能会造成灾难性的后果(Rajpurkar et al., 2016),在这些任务中,从两个方向结合上下文是至关重要的。
在本文中,我们提出BERT(来自transformer的双向编码器表示)方法,来改进基于微调的方法。受到完型填空任务的启发,BERT通过提出一个新的预训练目标来解决前面提到的单向约束问题:“遮蔽语言模型”(MLM)。这个遮蔽语言模型随机地遮盖输入中的一部分单词,训练的目标是仅仅基于其上下文来预测被遮盖住单词的原始词汇id。与从左到右的语言模型不同,MLM允许融合左右两侧的上下文,这样就可以预训练一个深度双向transformer。除了MLM,本文还介绍“预测下一句”任务,与MLM预训练任务联合使用,预训练文本对表示。
本文的贡献如下:
-
- 证明了双向预训练对于语言表示的重要性。与Radford等人不同(2018),他们使用单向语言模型进行预训练,BERT使用遮蔽语言模型实现预训练的深度双向表示。这也与Peters等人(2018)所使用的方法形成鲜明对比,他们使用的是一种浅层连接,从左到右和从右到左的模型单独训练。
- 论文表明,有些特定于任务的架构需要经过大量的工程设计,预训练的表示消除了这种需求。BERT是第一个基于微调的表示模型,它在大量句子级别和标记级别的任务中实现了最先进的性能,优于许多面向特定任务架构的系统。
- BERT刷新了11项NLP任务的性能记录。本文还报告了大量有关BERT的消融研究,证明模型的双向性是一项最重要的新贡献。相关代码和预训练的模型将会公布在goo.gl/language/bert上1。
2 相关工作
预训练通用语言表示有很长的历史,我们将在本节简要回顾最常用的方法。
2.1 基于特征的方法
几十年来,学习广泛适用的词语表达一直是一个活跃的研究领域,包括非神经方法(Brown et al., 1992; Ando and Zhang, 2005; Blitzer et al., 2006)和神经方法(Collobert and Weston, 2008; Mikolov et al., 2013; Pennington et al., 2014)。预训练的单词嵌入被认为是现代NLP系统不可或缺的一部分,与从头学习的嵌入相比有显著改进(Turian et al., 2010)。
这些方法已经被推广到较大的粒度,如句子嵌入(Kiros et al., 2015; Logeswaran and Lee, 2018)或段落嵌入(Le and Mikolov, 2014)。和传统的单词嵌入一样,这些经过学习的表示通常也用作下游模型中的特征。
ELMo(Peters et al., 2017)从一个不同的维度对传统的词汇嵌入研究进行了概括。他们建议从语言模型中提取上下文敏感的特征。当将上下文单词嵌入与现有任务特定体系结构集成时,ELMo推进了几项主要NLP基准测试的最新技术(Peters et al., 2018),包括SQuAD上的问答(Rajpurkar et al., 2016)、情感分析(Socher et al., 2013)和命名实体识别(Tjong Kim Sang and De Meulder, 2003)。
2.2 微调方法
从语言模型(LMs)迁移学习的最新趋势是,先在目标语言模型上预训练一些模型架构,然后再对监督下游任务的模型进行微调(Dai and Le, 2015; Howard and Ruder, 2018;
Radford et al., 2018)。这种方法的优点是,只需要从头开始学习很少的参数。至少部分归功于这一优势,OpenAI GPT(Radford et al., 2018)在GLUE基准测试中获得了许多句子级别的此前最先进的成果(Wang et al., 2018)。
2.3 从监督数据迁移学习
虽然无监督预训练的优点是可以获得几乎无限的数据量,还是有研究表明,可以实现从具有大量数据集的有监督的任务进行有效迁移,如自然语言推断(Conneau et al., 2017)和机器翻译(Mc-Cann et al., 2017)。在NLP领域之外,计算机视觉研究也显示了从大型预训练模型进行迁移学习的重要性,其中一个有效的方法就是对ImageNet上的预训练模型进行微调(Deng et al., 2009; Yosinski et al., 2014)。
3 BERT
本节介绍BERT及其实现细节。首先介绍模型的体系结构和BERT的输入表示,然后在3.3节中介绍预训练任务,即本文的核心创新。预训练过程和微调过程分别在3.4和3.5节介绍。最后,在3.6节介绍BERT和OpenAI GPT的差异。
3.1 模型体系结构
BERT的模型架构是一个多层双向transformer编码器,基于Vaswani et al.(2017) 中描述的原始实现,并在tensor2tensor库2中发布。因为transformer的使用现在已经变得很普及,而且我们的实现和原始的实现本质上是相同的,因此,我们将省略对模型架构的详细的背景描述,推荐读者阅读Vaswani et al. (2017),以及如“The Annotated transformer3”等出色的文档指南。
在这项工作中,我们将层数(即transformer模块)表示为L,隐藏层大小表示为H,自注意力头部的数量为A。在所有的情况下,设置前馈/过滤器大小为4H,即H=768时为3072,H=1024时为4096。我们主要介绍两种模型大小情况下的结果:
- BERTBASE: L=12,H=768, A=12,Total Parameters = 110M。
- BERTLARGE: L=24,H=1024,A=16,Total Parameters = 340M。
为了进行比较,选择BERTBASE和OpenAI GPT具有相同的模型大小。然而,关键的是,BERT transformer使用的是双向的自我关注,而GPT transformer使用的是受限的自我关注,每一个标记只能关注它左侧的上下文。我们注意到,在文献中,双向transformer通常被称为“transformer编码器”,而左侧上下文因为可以用于生成文本,因而被称为“transformer解码器”。BERT、OpenAI GPT和ELMo之间的比较如图1所示。
图1:几种预训练模型架构的差异。BERT使用双向transformer;OpenAI GPT使用从左到右的transformer;ELMo使用经过单独训练的从左到右和从右到左LSTM
的串联,生成下游任务的特征。三者之中,只有BERT表示在所有层中同时依赖于上下文。
3.2 输入表示
我们的输入表示能够在一个标记序列4中明确地表示单个文本句子,或一对文本句子(例如:[问题,答案])。对于给定的标记,它的输入表示通过对相应的标记嵌入、段落嵌入和位置嵌入进行求和组成。输入的可视化表示如图2所示。
图2:BERT输入表示。输入嵌入是标记嵌入、段落嵌入和位置嵌入的总和。
具体规定如下:
- 我们使用WordPiece嵌入(Wu et al., 2016),具有30000个标记词汇表。使用“##”表示分词。
- 使用训练过的位置嵌入,支持的序列长达512个标记。
- 每个序列的第一个标记始终是特殊分类嵌入([CLS])。对应于该token的最终的隐藏状态(即:transformer的输出)被用于分类任务的聚合序列表示。对于非分类任务,此向量被忽略。
- 句子对被打包成一个序列。我们以两种方式区分句子。首先,使用一个特殊标记([SEP])将句子分开;其次,添加一个经过训练的句子A嵌入到第一个句子的每一个标记中,添加一个句子B嵌入到第二个句子的每一个标记中。
- 对于只有单句输入的情况,我们只使用句子A嵌入。
3.3 预训练任务
与Peters et al. (2018)和Radford et al. (2018)等人不同的是,我们不使用传统的从左到右或从右到左的语言模型预训练BERT。相反,我们使用两个新的无监督预测任务对BERT进行预训练,如本节所述。
3.3.1 1#任务:Masked LM(遮蔽语言模型)
目前,有的模型是从左到右的模型,有的模型是从左到右和从右到左模型的简单连接,
直观地说,我们有理由相信,深度双向模型比前面的两种模型更强大。遗憾的是,因为双向调节将允许每一个单词在一个多层上下文环境中,间接地“看到自己”,所以,标准条件语言模型只能从左到右或从右到左进行训练。
为了训练深度双向表示,我们采用了一种直观的方法,随机屏蔽一定比例的输入标记,然后仅预测这些被屏蔽的标记。我们把这种方法称为“Masked LM(MLM,遮蔽语言模型)”,尽管它在文献中通常被称为“完型”任务(Taylor, 1953)。在这种情况下,对应于被遮蔽标记的最终隐藏向量被馈送到词汇表上的输出softmax中,如在标准语言模型中一样。在我们的所有实验中,我们随机地屏蔽每个序列中所有WordPiece标记的15%。与去噪自动编码器(Vincent et al., 2008)相反,我们只预测被屏蔽的单词,而不是重建整个输入。
虽然这确实可以让我们获得双向预训练模型,但这种方法有两个缺点。第一个是,因为被“屏蔽”的标记在微调过程中永远不可见,所以,我们在预训练和微调之间制造了一种不平衡。为了减轻这种影响,我们并不总是用实际被“屏蔽”的标记代替那些屏蔽位置的词。相反,训练数据生成器随机选择15%的标记。例如:在句子“my dog is hairy”中,它选择了“hairy”,然后执行以下过程:
- 数据生成器并不总是用[MASK]替代所选的单词,而是执行以下操作:
- 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%),似乎不会影响模型的语言理解能力。
使用遮蔽语言模型的第二个缺点是,每一批次中只预测了15%的标记,这表明模型可能需要更多的预训练步骤才能收敛。在5.3节,我们证明了遮蔽语言模型的收敛速度略慢于从左到右的模型(这种模型预测每一个标记)。但是,遮蔽语言模型的实证改进远远超过增加的训练成本。
3.3.2 2#任务:预测下一句话
许多重要的下游任务,如问答(QA)和自然语言推理(NLI),都是基于对两个文本句子之间的关系的理解,通过语言建模,并不能直接捕获到这种关系。为了训练能够理解句子之间关系的模型,我们预训练一个二进制化的下一句预测任务,这种任务可以很容易地从任何单语语料库生成。具体来说,当为每个预训练例子选择句子A和B时,50%的时间里,B就是紧跟A的那个实际的句子,另外50%的时间,B是从语料库中随机选择的一个句子。例如:
Input = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]
Label= IsNext
Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]
Label = NotNext
这个“NotNext”句子完全是我们随机选择的,最终预训练模型在这个任务中达到了97%-98%的准确率。尽管它很简单,但是,在5.1节中我们可以看到,针对这种任务的预训练对问答和自然语言推理还是很有用的。
3.4 预训练过程
预训练主要遵循以往文献中的语言模型预训练过程。我们使用BooksCorpus语料库(有800M单词)(Zhu et al., 2015)和英语维基百科(2500M单词)组合成预训练语料库。对于维基百科,我们只提取文本段落,忽略列表、表格和标题。为了提取较长的连续的序列,使用文档级的语料库,而不是如“十亿单词基准”(Billion Word Benchmark)(Chelba et al., 2013)之类混乱的句子级的语料库,是非常重要的。
为了生成每个训练输入序列,我们从语料库中采样两段文本,我们称其为“句子”,即使它们通常比单个句子长得多(也可能短得多)。第一个句子接收A嵌入,第二个句子接收B嵌入。50%的时间,B是紧跟A的实际的句子;另外50%的时间,B是随机的句子。这是为“预测下一句”任务准备的。采样时要保证两个句子组合后的长度≤512个标记。在进行WordPiece标记后,应用遮蔽语言模型,按照15%的统一遮蔽率进行,对部分单词片段不做特别考虑。
我们训练的批次大小为256个序列(256个序列 * 512个标记= 128000个标记/批次),共训练了1,000,000步,语料库中共有33亿个单词,大约训练40遍。我们使用Adam算法,学习率为1e-4,β1=0.9,β2=0.999,L2权重衰减为0.01。前面的10,000步中,对学习速率进行热身;在后面的步骤中,学习速率线性衰减。在所有层上使用0.1的退化概率。我们使用gelu激活函数(Hendrycks and Gimpel, 2016),和OpenAI GPT所使用的激活函数一样,而没有使用标准的relu激活函数。训练过程中的损失函数是遮蔽语言模型似然平均值和下一句预测似然平均值的总和。
在Pod配置的4块云TPU(共含有16块TPU)上训练BERTBASE5,在16块云TPU(共含有64块TPU)上训练BERTLARGE,每次预训练需要4天才能完成。
3.5 微调过程
对于序列级的分类任务,BERT微调是非常简单的。为了获得输入序列固定维度的汇总表示,对于输入中的第一个标记,我们采用最后隐藏状态(即:transformer的输出),通过构造,对应特殊的[CLS]字嵌入。我们将该向量表示为C∈RH。微调过程中唯一增加的新参数是分类层W∈RK*H,其中,K是分类器标签的数量。 分类标签的概率P∈RK用标准softmax函数计算,P = softmax(CWT)。BERT和W的所有参数都经过联合微调,来最大化正确标签的对数概率。对于区间级和标记级的预测任务,要根据任务的特殊情况稍微修改上述过程。具体过程见第4节的相关内容。
在微调过程中,除了批次大小、学习速率和训练周期数以外,大部分模型超参数和预训练过程时所用的相同。退化率始终保持在0.1。最佳超参值与特定任务相关,但是,我们发现,以下可能的取值范围,在所有的任务中都可以很好地工作:
- 批次大小:16,32
- 学习速率(Adam算法):5e-5,3e-5,2e-5
- 训练周期数:3,4
我们也观察到,大数据集(100K以上的标记训练集)对超参数选择的敏感性远小于较小的数据集。微调通常很快,因此,简单地对上述参数进行详尽搜索,并选择在验证集上表现最佳的模型,是可行的。
3.6 BERT和OpenAI GPT的比较
在现在的预训练方法中,与BERT最具有可比性的是OpenAI GPT,它在一个大型文本语料库上训练一个从左到右的transformer语言模型。事实上,BERT中的许多设计决策都是有意地选择为尽可能地接近GPT的,这样两种方法就可以更加直接地进行比较。这项工作的核心论点是,在3.3节中提出的两项新的预训练任务占了实验效果改进的大部分,但是,我们还要指出,BERT和GPT在如何训练方面,还存在其他一些差异:
- GPT在BooksCorpus(800M单词)上训练;BERT在BooksCorpus(800M单词)和Wikipedia(2500M单词)上训练出来的。
- GPT使用句子分隔符([SEP])和分类标记([CLS]),它们仅在微调时引入;在预训练期间,BERT学习[SEP]、[CLS]和句子A/B的嵌入。
- GPT在含有32,000个单词的批次上训练了1M步;BERT在含有128,000个单词的批次上训练了1M步。
- GPT对所有微调实验使用相同的学习率5e-5,BERT根据不同的任务,选择不同的学习率,以便在验证集上获得最好的表现。
为了分清楚这些差异所带来的影响,我们在5.1节中进行了消融实验,证明大多数改进实际来自于新的预训练任务。
4 实验
在本节中,我们将介绍BERT在11个NLP任务中的微调结果。
4.1 GLUE数据集
通用语言理解评估(General Language Understanding Evaluation,GLUE)基准(Wang et al., 2018)是各种自然语言理解任务的集合。大多数GLUE数据集已经存在多年。建立GLUE的目的,一是以分离的训练集、验证集和测试集的标准形式发布这些数据集;二是建立一个评估服务器,来缓解评估不一致和测试集过度拟合的问题。GLUE不发布测试集标签,用户必须将他们的预测上传到GLUE服务器进行评估,服务器还会对提交的数量进行限制。
GLUE基准包括以下数据集,其描述最初在Wang等人的文章(2018)中进行了总结:
- MNLI:多类型自然语言推理(Multi-Genre Natural Language Inference,MNLI)是一项大规模的、众包的蕴含分类任务(Williams et al., 2018)。给定一对句子,目标是预测第二个句子相对于第一个句子是蕴含、对立还中立的关系。
- QQP:Quora问题对(Quora Question Pairs,QQP),是一个二元分类任务,目标是确定在Quora上提出的两个问题在语义上是否等价(Chen et al., 2018)。
- QNLI:问题自然语言推理(Question Natural Language Inference,QNLI),是Stanford问答数据集(Rajpurkar et al., 2016),一个已经转换为二进制分类任务(Wang et al., 2018)的版本。正类的例子是包含正确答案的问答对,反类的例子是包含不正确答案的同一个问答对。
- SST-2:Stanford情感树库(Stanford Sentiment Treebank,SST-2),是一个二元单句分类任务,数据由电影评论中提取的句子组成,这些评论中包含由人手工注释的情感信息(Socher et al., 2013)。
- CoLA:语言可接受性语料(Corpus of Linguistic Acceptability,CoLA),是一个二元单句分类任务,目标是预测一个英语句子在语言上是否是“可接受的”(Warstadt et al., 2018)。
- STS-B:语义文本相似度基准(Semantic Textual Similarity Benchmark,STS-B),是从新闻标题和其他来源里提取的句子对的集合((Cer et al., 2017)。它们用1到5的分数进行注释,表示两个句子在语义上的相似程度。
- MRPC:微软研究院释义语料库(Microsoft Research Paraphrase Corpus,MRPC),由在线新闻源中自动提取的句子对组成,用人工注释这两个句子在语义上是否相等(Dolan and Brockett, 2005)。
- RTE:识别文本蕴含(Recognizing Textual Entailment,RTE),是一个与MNLI相似的二元蕴含任务,只是RTE的训练数据更少(Bentivogli et al., 2009)6。
- WNLI:Winograd自然语言推理(Winograd NLI),是一个来自(Levesque et al., 2011)的小型自然语言推理数据集。GLUE网页提示这个数据集的构造存在问题7,每一个提交给GLUE的经过训练的系统在预测大多数类时都低于65.1这个准确度基线。因此,出于对OpenAI GPT的公平考虑,我们排除了这个数据集。对于提交到GLUE服务器的内容,我们只预测多数类。
4.1.1 GLUE结果
为了在GLUE上微调模型,我们按照第3节中所描述的那样表示输入的序列或序列对,并且使用对应于第一个输入标记([CLS])的最后一层的隐藏向量C∈RH作为聚合表示,如图3(a)和(b)所示。微调过程中引入的唯一新参数是一个分类层W∈RK*H,其中,K是标记的数量。用C和W计算标准分类损失,即:log(softmax(CWT))。
(a) 句子对分类任务:NMLI,QQP,ANLI,STS-B,MRPC,RTE和SWAG
(b) 单句分类任务:SST-2,CoLA
(c) 问答任务:SQuAD v1.1 (d) 单句标记任务:CoNLL-2003 NER
图3:特定于任务的模型是通过给BERT增加一个额外的输出层构成的,因此,仅需要从头学起最小数量的参数。在这些任务中,
(a)和(b)是序列级别的任务,(c)和(d)是标记级别的任务。图中E代表输入嵌入,Ti代表第i个标记的上下文表示,[CLS]是分类输出的特殊符号,
[SEP]是分离非连续标记序列的特殊符号。
在所有GLUE任务中,我们使用的数据批次大小为32,训练三个周期。对于每一项任务,使用学习率5e-5,4e-5,3e-5和2e-5进行微调,选择在验证集上表现最好的一个学习率。此外,对于BERTLARGE,我们发现,在小数据集上,微调有时是不稳定的(也就是说,有时的运行会使结果更差),因此,我们进行了几次随机重启,并选择在验证集上表现最好的模型。对于随机重启,我们使用相同的预训练检查点,但是执行不同的微调数据混洗和分类器层初始化。我们注意到,GLUE发布的数据集不包括测试标签,所以,我们只向GLUE评估服务器提交了一个BERTBASE和BERTLARGE预测。
结果如表1所示。在所有的任务中,BERTBASE和BERTLARGE都比现有的系统明显出色,与目前先进的系统相比,分别取得4.4%和6.7%的平均改善。请注意,除了BERTBASE具有注意力遮蔽机制,BERTBASE和OpenAI GPT的模型结构几乎是一样的。对于最大最广泛使用的GLUE任务,MNLI,和当前最先进的模型相比,BERT的准确率获得了4.7%的绝对提升。在GLUE官方的排行榜上8,BERTLARGE获得了80.4的分数,而原来排在榜首的OpenAI GPT,在本文写作时,仅获得72.8分。
表1:GLUE测试结果,由GLUE评估服务器打分。每项任务下的数值表示训练例子的数量。“Average”列与官方GLUE评估略有不同,因为我们排除了有问题的WNLI数据集。OpenAI GPT=(L=12, H=768, A=12);BERTBASE和=(L=12, H=768, A=12);BERTLARGE =(L=24, H=1024, A=16)。BERT和OpenAI GPT都是单模型,单任务。可以通过访问https://gluebenchmark.com/leaderboard和https://blog.openai.com/language-unsupervised/ 获得所有的结果。
有趣的是,在所有任务中,BERTLARGE都显著优于BERTBASE。即使是在那些只有很少训练数据的任务中,也是如此。BERT模型大小的影响在5.2节有更深入的探讨。
4.2 SQuAD v1.1
Standford问答数据集(Standford Question Answering Dataset,SQuAD)是一个由100K个众包的问题/答案对(Rajpurkar et al., 2016)组成的集合。给出一个问题,和一个来自维基百科包含这个问题答案的段落,我们的任务是预测这个答案在段落中的文本区间。例如:
- 输入问题:Where do water droplets collide with ice crystals to form precipitation?
- 输入段落:…Precipitation forms as smaller droplets coalesce via collision with other rain drops or ice crystals within a cloud. …
- 输出答案: Within a cloud.
这种类型的文本区间预测与GLUE的序列分类任务有很大的区别,但是我们可以调整BERT,让它以一种直接的方式在SQuAD上运行。就像GLUE一样,我们把输入的问题和段落表示成一个打包的序列,其中问题使用A嵌入,段落使用B嵌入。微调过程中唯一需要学习的新参数是一个区间起始向量S∈RH和一个区间终止向量E∈RH。BERT模型最后一层隐藏向量的第ith个输入标记表示为Ti∈RH,如图3(c)所示。然后,计算单词i作为答案区间起始的概率,它是Ti和S的点积,然后在这段中的所有单词上运用softmax分类器:
可以使用同样的公式计算单词作为答案区间结束的概率,并采用得分最高的区间作为预测结果。训练的目标是正确的开始和结束位置的可能性。
我们使用学习率5e-5,数据批次大小为32,训练三个周期。在模型推断期间,因为结束位置的预测和起始位置没有关系,我们增加了结束位置必须在开始位置之后的限制,但是没有使用其他的启发式规则。为了方便评估,把序列化后的标记区间对齐回原始未序列化的输入。
结果如表2所示,SQuAD的测试过程非常严格,提交者必须手动联系SQuAD的组织人员,在一个隐藏的测试集上运行他们的系统,所以我们只提交了最好的模型进行测试。表2中的结果是我们的第一个,也是唯一的一个测试。在此指出,SQuAD排行榜中的最好结果没有最新的公共系统描述,而且,在训练他们的系统时,允许使用任何公共数据。因此,我们在提交的模型中,通过联合训练SQuAD和TriviaQA(Joshi et al., 2017),使用适度增强的数据。
表2:SQuAD结果。BERT集成是7X系统,使用不同的预训练检查点和微调种子。
我们表现最好的模型系统在集成模型排名中,F1值比排名第一的模型高出1.5;在单一模型系统排行榜中,F1值比排名第一的模型高出1.3。事实上,在F1值方面,我们的单模型BERT系统比最优的集成模型表现还好。如果只是在SQuAD(不考虑TriviaQA)上进行微调,F1值仅损失0.1-04,而且我们的模型输出结果仍然比现有模型的表现好很多。
4.3 命名实体识别
要评估标记任务的性能,我们在CoNLL 2003命名实体识别(Named Entity Recognition,NER)数据集上微调BERT模型。这个数据集包括200K的训练词汇,这些训练词已经被标注为人名、组织机构名、地名、杂项和其他(非命名实体)。
为了微调,我们将最后一层每个单词的隐藏表示 Ti∈RH 送入 NER 标签集合的一个分类层。每个单词的分类不以周围预测为条件(也就是说,没有自回归和CRF)。为了与词块(WordPiece)序列化相适应,我们把 CoNLL-序列化的(CoNLL-tokenized)的输入词输入 WordPiece 标记器,然后使用对应于第一个块的隐藏状态作为分类器的输入。例如:
Jim Hen ##son was a puppet ##eer
I-PER I-PER X O O O X
不对X做任何预测。由于词块序列化边界是输入的一个已知部分,因此对训练和测试都进行了预测。在图3(d)中也给了可视化的表示。一个区分大小写的词块模型被用于命名实体识别,所有其他任务都使用不区分大小写的模型。
结果如表3所示。BERTLARGE优于现有的SOTA,使用多任务学习的交叉视野训练(Clark et al., 2018),在CoNLL-2003命名实体识别测试集上的测试结果,F1值高出0.2。
表3:CoNLL-2003命名实体识别测试结果。模型超参数使用验证集进行选择,使用这些超参数
进行随机五次以上的实验,报告的验证和测试分数取实验结果的平均值。
4.4 SWAG
SWAG(The Situations With Adversarial Generations,具有对抗性生成的情境)数据集包含113K个句子对,用于评估基于常识的推理(Zellers et al., 2018)。给定视频字幕数据集中的句子,任务是在四个选项中决定最合理的后续句子。例如:
A girl is going across a set of monkey bars. She
(i) Jumps up across the monkey bars.
(ii) Struggles onto the bars to grab her head.
(iii) Gets to the end and stands on a wooden plank.
(iv) Jumps up and does a back flip.
为SWAG数据集调整BERT模型的运行方式,调整为与GLUE数据集所使用的方式类似。对于每个例子,我们构造四个输入序列,每一个序列都连接给定的句子(句子A)和可能的后续句子(句子B)。我们引入的唯一特定于任务的参数是一个向量V∈RH,它和最终的聚合表示C i∈RH 的点积代表每一个选择i的得分。概率分布是这四种选择的softmax函数:
我们使用2e-5的学习率,批次大小为16,训练三个周期,结果如表4所示。BERTLARGE比作者的基线模型ESIM+ELMo系统性能高出27.1%。
表4:SWAG验证集和测试集准确率。测试结果由SWAG作者根据隐含的标签
进行评分,如SWAG论文所述,人类的表现为100分。
5 消融研究
虽然我们已经展示了非常强大的实证结果,但是到目前为止,所呈现的结果并没有完全体现BERT框架每个方面的具体贡献。本节中,我们对BERT的许多方面进行了消融试验,以便更好地理解每个部分的相对重要性。
5.1 预训练任务的影响
我们的核心观点之一是,和以前的工作相比,BERT模型的深度双向性,通过预训练遮蔽语言模型实现,是最重要的改进。为了证明这一观点,我们评估了两个新模型,它们使用与BERTBASE完全相同的预训练数据、微调方案和transformer超参数:
- 无NSP:使用遮蔽语言模型(MLM),但是没有“预测下一句(NSP)”任务。
- LTR和无NSP:使用从左到右(LTR)语言模型,而不是遮蔽语言模型。在这种情况下,我们预测每一个输入词,不进行任何遮蔽。微调过程中也应用了左侧约束,因为我们发现,使用左侧上下文进行预训练和使用双向上下文进行微调,效果总是不好。此外,该模型没有使用预测下一句任务进行预训练。这与OpenAI GPT有直接的可比较性,但使用了更大的训练数据集、输入表示和微调方案。
结果如表5所示。我们首先分析了NSP任务所带来的影响。我们可以看到,去掉NSP任务,对QNLI,MNLI和SQuAD的性能影响比较严重。这些结果表明,我们的预训练方法对于获得前面提出的强有力的实证结果是至关重要的。
接下来,我们通过对比“无NSP”和“LTR和无NSP”来评估训练双向表示的影响。从左到右模型(LTR)在所有任务上的表现都比遮蔽语言模型(MLM)差,在MRPC和SQuAD上的表现下降尤其厉害。对于SQuAD,很明显从左到右的模型在区间和标记预测方面表现很差,因为标记级别的隐含状态没有右侧上下文。对于MRPC,表现不佳,是因为数据量小,还是因为任务本身的性质,这一点还不清楚。但是我们发现,这种表现不佳,在完全超参数扫描过程中是保持一致的,而且中间还进行了多次随机重启。
表5:在预训练任务中使用BERTBASE框架进行消融实验。“No NSP”表示不进行下一句预测任务来训练模型;“LTR & No NSP”表示就像OpenAI GP一样,使用从左到右的语言模型,不进行下一句预测任务来训练模型;“+BiLSTM”表示“LTR & No NSP”模型微调时添加一个随机初始化的BiLSTM层。
为了增强从左到右的系统,我们尝试在其上添加一个随机初始化的BiLSTM来进行微调。这确实大大提高了SQuAD的表现,但是结果仍然比双向预训练的模型差。而且,它还影响了所有四个GLUE任务的性能。
我们注意到,也可以训练单独从左到右和从右到左的模型,并将每个标记表示为两个模型的连接,就像ELMo所做的那样。然而,(a) 这需要单个双向模型两倍的代价;(b) 这对于如QA之类的任务来说,不是直观的,因为从右到左的模型不能根据问题确定答案。(c) 这比深度双向模型要弱得多,因为深度双向模型可以选择使用左上下文或右上下文。
5.2 模型大小的影响
本节中,我们探讨模型大小对微调任务准确度的影响。我们用不同的层数、隐藏单元、注意力头部的数量训练了很多BERT模型,同时使用了如前所述的超参数和训练过程。
选定GLUE任务的结果如表6所示。在这个表中,我们列出了微调过程中5次随机重启后的平均验证集准确度。可以看到,较大的模型在所选四个数据集上表现更好,甚至对于只有3600个训练数据的MRPC,也是如此,并且与预训练任务有明显的不同。令人惊讶的是,相对于现有文献,我们能够在现有模型基础上实现如此显著的改进。 例如,Vaswani et al. (2017)研究的最大的transformer为(L=6,H=1024,A=16),编码器参数为100M;我们所知的文献中提到的最大的transformer为(L=64,H=512,A=2),编码器参数为235M(Al-Rfou et al., 2018)。相比之下,BERTBASE含有110M参数,而BERTLARGE含有340M参数。
表6:调整BERT模型的大小。#L=层数;#H=隐藏维度大小;#A=注意力头的数量;
“LM(ppl)”表示遮蔽语言模型在预留训练数据上的困惑度。
人们早已经知道,增加模型的大小将持续提升在大型任务上的表现,如机器翻译和语言建模,这一点从表6中预留训练数据上的困惑度可以看得出来。然而,我们相信,如果模型得到了足够的预训练,那么将模型扩展到极端的规模,也可以在非常小的任务中得到巨大的改进,这一点,我们是第一次得到证明。
5.3 训练步数的影响
图4显示了从经过K步预训练后的检查点进行微调后的MNLI验证集的精度。根据此图,我们可以回答以下的问题:
- 问题:BERT真的需要这么多的预训练 (128,000个单词/批次 * 1,000,000步) 来实现较高的微调精度吗?
回答:是的。BERTBASE 在 MNLI 上进行 1M 步预训练时的准确率比 500k 步时提高了近 1.0%。
- 问题:遮蔽语言模型的预训练是否比从左到右的模型预训练收敛得慢,因为每批只训练15%的单词,而不是每个单词?
回答:遮蔽语言模型的收敛速度确实比从左到右的模型稍慢。然而,在绝对准确性方面,遮蔽语言模型在训练一开始就超越从左到右的模型。
图4:多次训练步骤的消融。图中显示了经过微调的MNLI准确率,
从已经预训练了k步的模型参数开始,x轴是k的值。
5.4 BERT基于特征的方法
到目前为止,所有的BERT结果都使用了微调方法,将一个简单的分类层添加到预训练的模型中,所有参数在下游任务中联合微调。然而,基于特征的方法,即从预训练的模型中提取固定的特征,具有一定的优势。首先,并不是所有的NLP任务都可以通过transformer编码器体系结构轻松实现,因此,需要添加特定于任务的模型架构。其次,预先计算训练数据的表示,这些表示要花费高昂的代价,在这种表示的基础上,使用相对节省计算的模型完成许多试验,这具有很大的计算优势。
本节中,我们评估BERT在基于特征的方法中的表现性能,在CoNLL-2003命名实体识别任务中,通过生成类似于ELMo的预训练上下文表示来完成评估。为此,我们使用和4.3节中相同的输入表示,但是使用来自一层或多层的激活输出,而不对BERT的任何参数进行微调。随机初始化一个双层768维的BiLSTM,这些上下文嵌入被作为BiLSTM的分类层之前的输入。
结果如表7所示。性能最佳的方法是预训练transformer的前四个隐藏层串联标记表示,这仅比整个模型微调性能低0.3个F1值。这说明,BERT对于微调和基于特征的方法都是有效的。
表7:在CoNLL-2003命名实体识别上,BERT基于特征方法的消融。来自指定层的激活输出
被组合起来送入一个双层的BiLSTM,而没有反向传播到BERT。
6 结论
最近由于使用语言模型进行迁移学习而取得的实证改进表明,大量无监督的预训练是许多语言理解系统不可或缺的一部分。尤其是,这些结果甚至能够使得那些消耗资源少的任务从非常深的单向结构模型中受益。我们的主要贡献是将这些发现进一步推广到深层的双向结构,使得同样的预训练模型能够成功地处理多种NLP任务。
虽然这些实证结果很有说服力,在某些情况下甚至超过了人类的表现,但是,未来还有很多重要的研究工作要做,还需要研究BERT捕捉到或未捕捉到的语言现象。
标注
1将在2018年十月底之前发行。
2https://github.com/tensorflow/tensor2tensor
3http://nlp.seas.harvard.edu/2018/04/03/attention.html
4在这项工作中,一个“句子”可以是任意跨度的连续文本,而不是实际语言中的句子。“序列”指的是输入到BERT中的标记序列,可能是一个句子,也可能是两个句子的一个包。
5https://cloudplatform.googleblog.com/2018/06/Cloud-TPU-now-offers-preemptible-pricing-and-globalavailability
html
6在此指出,本文中我们只报告单任务微调结果。多任务微调方法会更进一步推进结果。例如,我们确实观察到了使用MNLI进行多任务训练取得了实质性的改进。
7 https://gluebenchmark.com/faq
8https://gluebenchmark.com/leaderboard
参考文献
- Rami Al-Rfou, Dokook Choe, Noah Constant, Mandy Guo, and Llion Jones. 2018. Character-level language modeling with deeper self-attention. arXiv preprint arXiv:1808.04444.
- Rie Kubota Ando and Tong Zhang. 2005. A framework for learning predictive structures from multiple tasks and unlabeled data. Journal of Machine Learning Research, 6(Nov):1817–1853.
- Luisa Bentivogli, Bernardo Magnini, Ido Dagan, Hoa Trang Dang, and Danilo Giampiccolo. 2009.The fifth PASCAL recognizing textual entailment challenge. In TAC. NIST.
- John Blitzer, Ryan McDonald, and Fernando Pereira. 2006. Domain adaptation with structural correspondence learning. In Proceedings of the 2006 conference on empirical methods in natural language processing, pages 120–128. Association for Computational Linguistics.
- Samuel R. Bowman, Gabor Angeli, Christopher Potts, and Christopher D. Manning. 2015. A large annotated corpus for learning natural language inference. In EMNLP. Association for Computational Linguistics.
- Peter F Brown, Peter V Desouza, Robert L Mercer, Vincent J Della Pietra, and Jenifer C Lai. 1992. Class-based n-gram models of natural language. Computational linguistics, 18(4):467–479.
7.Daniel Cer, Mona Diab, Eneko Agirre, Inigo Lopez-Gazpio, and Lucia Specia. 2017. Semeval-2017 task 1: Semantic textual similarity-multilingual and cross-lingual focused evaluation. arXiv preprint
arXiv:1708.00055.
- Ciprian Chelba, Tomas Mikolov, Mike Schuster, Qi Ge, Thorsten Brants, Phillipp Koehn, and Tony Robinson. 2013. One billion word benchmark for measuring progress in statistical language modeling. arXiv preprint arXiv:1312.3005.
- Z. Chen, H. Zhang, X. Zhang, and L. Zhao. 2018. Quora question pairs.
- Kevin Clark, Minh-Thang Luong, Christopher D Manning, and Quoc V Le. 2018. Semi-supervised sequence modeling with cross-view training. arXiv preprint arXiv:1809.08370.
- Ronan Collobert and Jason Weston. 2008. A unified architecture for natural language processing: Deep neural networks with multitask learning. In Proceedings of the 25th International Conference on Machine Learning, ICML ’08.
- Alexis Conneau, Douwe Kiela, Holger Schwenk, Lo¨ıc Barrault, and Antoine Bordes. 2017.Supervised learning of universal sentence representations from natural language inference data. In Proceedings of the 2017 Conference on Empirical Methods in Natural Language Processing, pages 670–680, openhagen, Denmark. Association for Computational Linguistics.
- AndrewMDai and Quoc V Le. 2015. Semi-supervised sequence learning. In Advances in neural information processing systems, pages 3079–3087.
- J. Deng,W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei-Fei. 2009. ImageNet: A Large-Scale Hierarchical Image Database. In CVPR09.
- William B Dolan and Chris Brockett. 2005. Automatically constructing a corpus of sentential paraphrases. In Proceedings of the Third International Workshop on Paraphrasing (IWP2005).
- Dan Hendrycks and Kevin Gimpel. 2016. Bridging nonlinearities and stochastic regularizers with Gaussian error linear units. CoRR, abs/1606.08415.
- Jeremy Howard and Sebastian Ruder. 2018. Universal language model fine-tuning for text classification. In ACL. Association for Computational Linguistics.
- Mandar Joshi, Eunsol Choi, Daniel S Weld, and Luke Zettlemoyer. 2017. Triviaqa: A large scale distantly supervised challenge dataset for reading comprehension. In ACL.
- Ryan Kiros, Yukun Zhu, Ruslan R Salakhutdinov, Richard Zemel, Raquel Urtasun, Antonio Torralba, and Sanja Fidler. 2015. Skip-thought vectors. In Advances in neural information processing systems,
pages 3294–3302.
- Quoc Le and Tomas Mikolov. 2014. Distributed representations of sentences and documents. In International Conference on Machine Learning, pages 1188–1196.
- Hector J Levesque, Ernest Davis, and Leora Morgenstern. 2011. The winograd schema challenge. In Aaai spring symposium: Logical formalizations of commonsense reasoning, volume 46, page 47.
- Lajanugen Logeswaran and Honglak Lee. 2018. An efficient framework for learning sentence representations. In International Conference on Learning Representations.
- Bryan McCann, James Bradbury, Caiming Xiong, and Richard Socher. 2017. Learned in translation: Contextualized word vectors. In NIPS.
- Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg S Corrado, and Jeff Dean. 2013. Distributed representations of words and phrases and their compositionality. In Advances in Neural Information Processing Systems 26, pages 3111–3119. Curran Associates, Inc.
- Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. Glove: Global vectors for word representation. In Empirical Methods in Natural Language Processing (EMNLP), pages 1532–1543.
- Matthew Peters, Waleed Ammar, Chandra Bhagavatula, and Russell Power. 2017. Semi-supervised sequence tagging with bidirectional language models. In ACL.
- Matthew Peters, Mark Neumann, Mohit Iyyer, Matt Gardner, Christopher Clark, Kenton Lee, and Luke Zettlemoyer. 2018. Deep contextualized word representations. In NAACL.
- Alec Radford, Karthik Narasimhan, Tim Salimans, and Ilya Sutskever. 2018. Improving language understanding with unsupervised learning. Technical report, OpenAI.
- Pranav Rajpurkar, Jian Zhang, Konstantin Lopyrev, and Percy Liang. 2016. Squad: 100,000+ questions for machine comprehension of text. arXiv preprint arXiv:1606.05250.
- Richard Socher, Alex Perelygin, Jean Wu, Jason Chuang, Christopher D Manning, Andrew Ng, and Christopher Potts. 2013. Recursive deep models for semantic compositionality over a sentiment treebank. In Proceedings of the 2013 conference on empirical methods in natural language processing, pages 1631–1642.
- Wilson L Taylor. 1953. cloze procedure: A new tool for measuring readability. Journalism Bulletin,30(4):415–433.
- Erik F Tjong Kim Sang and Fien De Meulder. 2003. Introduction to the conll-2003 shared task: Language-independent named entity recognition. In Proceedings of the seventh conference on Natural
language learning at HLT-NAACL 2003-Volume 4, pages 142–147. Association for Computational Linguistics.
- Joseph Turian, Lev Ratinov, and Yoshua Bengio. 2010. Word representations: A simple and general method for semi-supervised learning. In Proceedings of the 48th Annual Meeting of the Association for Computational Linguistics, ACL ’10, pages 384–394.
- Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Lukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In Advances in Neural Information Processing Systems, pages 6000–6010.
- Pascal Vincent, Hugo Larochelle, Yoshua Bengio, and Pierre-Antoine Manzagol. 2008. Extracting and composing robust features with denoising autoencoders In Proceedings of the 25th international
conference on Machine learning, pages 1096–1103. ACM.
- Alex Wang, Amapreet Singh, Julian Michael, Felix Hill, Omer Levy, and Samuel R Bowman. 2018. Glue: A multi-task benchmark and analysis platform for natural language understanding. arXiv preprint arXiv:1804.07461.
- A. Warstadt, A. Singh, and S. R. Bowman. 2018. Corpus of linguistic acceptability.
- Adina Williams, Nikita Nangia, and Samuel R Bowman. 2018. A broad-coverage challenge corpus for sentence understanding through inference. In NAACL.
- Yonghui Wu, Mike Schuster, Zhifeng Chen, Quoc V Le, Mohammad Norouzi, Wolfgang Macherey, Maxim Krikun, Yuan Cao, Qin Gao, Klaus Macherey, et al. 2016. Google’s neural machine
translation system: Bridging the gap between human and machine translation. arXiv preprint arXiv:1609.08144.
- Jason Yosinski, Jeff Clune, Yoshua Bengio, and Hod Lipson. 2014. How transferable are features in deep neural networks? In Advances in neural information processing systems, pages 3320–3328.
- Rowan Zellers, Yonatan Bisk, Roy Schwartz, and Yejin Choi. 2018. Swag: A large-scale adversarial dataset for grounded commonsense inference. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing (EMNLP).
- Yukun Zhu, Ryan Kiros, Rich Zemel, Ruslan Salakhutdinov, Raquel Urtasun, Antonio Torralba, and Sanja Fidler. 2015. Aligning books and movies: Towards story-like visual explanations by watching movies and reading books. In Proceedings of the IEEE international conference on computer vision, pages 19–27.