目录
原文翻译:BERT:用于语言理解的深度双向Transformer预训练
原文链接:https://aclanthology.org/N19-1423.pdf
摘要:
1 引言
2 相关工作
2.1 基于特征的方法
2.2 微调方法
2.3 在有监督数据上的迁移学习
3 BERT
3.1 模型架构
3.2 输入表示
3.3 预训练任务
3.4 预训练方法
3.5 微调方法
3.6 BERT和GPT的比较
4 实验
4.1 GLUE数据集
4.2 SQuAD数据集
4.3 命名实体识别
4.4 常识推理
5 消融实验
5.1 预训练任务的影响
5.2 模型大小的影响
5.3 训练步数的影响
5.4 BERT中基于特征的方法
6 总结
我们介绍了一个叫做BERT的模型,BERT是"Bidirectional Encoder Reprsentations from Transformers"首字母的缩写。与最近的语言表征模型(Peters et al.2018;Radford et al.2018)不同,BERT通过在每一层中连接左边(上文)和右边(下文)的内容而被设计成一个双向表征的深度预训练模型。这样做的结果是,预训练模型的BERT表征可以只添加一个额外输出层来进行微调,从而使很多任务达到SOTA(state-of-the-art)的结果。例如QA、语言推断,无需针对特定任务进行模型结构的修改。
BERT在概念上理解起来很简单,在实验中的表现也很强大。它在11种自然语言处理任务上获得了新的SOTA结果,包括将GLUE的bench-mark提高到80.4%(提高了7.6%),MultiNLI(多语型自然语言推理)的准确性提高到86.7(提高了5.6%)。SQuAD v1.1问题回答测试F1达到了93.2(提高了1.5),比人工的表现高2个点。
预训练语言模型对改善许多自然语言处理任务非常有效(Dai and Le 2015;Peters et al. 2017, 2018; Radford et al. 2018; Howard and Ruder, 2018)。这些任务包括sentence-level的任务,例如自然语言推理(Bowman et al. 2015; Williams et al. 2018)和释义(Dolan and Brockett,2005),旨在通过整体分析来预测句子之间的关系,以及token-level的任务,例如命名实体识别(Tjong Kim Sang and De Meulder, 2003)和SQuAD问题解答(Rajpurkar et al. 2016),在这些任务中模型预测粒度比较细,如token级别的输出。
现在有两种将预训练语言表征应用于下游任务的策略:基于特征的方法和基于微调的方法。基于特征的方法,例如ELMo(Peters等人 2018),使用特定于某个任务的架构,把预训练的向量表征作为特征添加进去。基于微调的方法,例如Generative Pre-trained Transformer(OpenAI GPT)(Radford et al, 2018)引入了最小的与任务相关的特定参数,并通过在下游任务上对预训练的参数进行微调。在先前的工作中,这两种方法在预训练期间都具有相同的目标,它们均使用单向语言模型来学习通用语言的表征。
我们认为,当前的技术严重限制了预训练的表征能力,特别是对于微调方法。主要的限制是标准语言模型是单向的,这限制了可以在预训练期间使用的体系结构的选择。例如,在OpenAI GPT中,作者使用从左到右的体系结构,其中每一个token只能在Transformer的self-attention中关注到当前步之前的token(Vaswani等人 2017)。这样的限制对于句子级任务不是最理想的,在对token-level任务采用基于微调的方法(例如SQuAD问题回答)时可能会毁灭性的(Rajpurkar等人,2016)。在这些任务中,迫切的需要从两个方向整合上下文。
在本文中,我们通过提出BERT-来自Transformer的双向编码器表征法,来改进了基于微调的方法。BERT通过提出受完形填空任务(Taylor,1953)启发的“屏蔽语言模型”(masked language model)MLM这个新的预训练目标,来解决前面提到的单向约束问题。MLM从输入中随机屏蔽了某些token,目的是仅根据其上下文来预测屏蔽单词的原始词汇ID。与从左到右的语言模型的预训练不同,MLM允许模型的表征融合左侧和右侧的上下文,这使得我们可以预训练深层的Transformer。除了屏蔽语言模型之外,我们还引入了“下一个句子预测”任务,该任务参与了预训练中文本对(text-pair)表征的训练。
本文的贡献如下:
我们证明了双向预训练对于语言表征的重要性。与Radford等人不同,Radford等人使用单向语言模型进行预训练,BERT使用MLM来实现预训练的深度双向表征。这也与Peters等人相反,Peters等人使用的是经过独立训练的从左到右和从右到左的LMs的浅层连接。
我们指出,经过预训练的表征形式,消除了许多需要对特定任务精心设计体系结构的需求。BERT是第一个基于fine-tuning的表征模型,可在一系列snetence-level和token-level任务上得到SOTA的结果,其性能优于具有特定任务架构的许多系统。
BERT提高了11项NLP任务的最新SOTA。我们还报告了BERT的大量消融实验,表明了我们模型的双向性质是唯一的最重要的新贡献。代码和与训练模型将在gool.gl/language/bert.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等人,2015; Logeswaran和Lee,2018)或段落嵌入(Le和Mikolov,2014)。与传统的单词嵌入一样,这些学习的表征形式通常也用作下游模型的特征。
ELMo从一个不同的角度阐述了传统的词嵌入研究。他们建议从语言模型中提取上下文相关的功能。当将上下文词嵌入与现有的特定于任务的体系结构集成时,MLMo改进了几个主要的NLP任务(Peters等, 2018)的最新技术,其中包括问题解答(Rajpurkar等,2016)。在SQuAD上,进行情感分析(Socher等人,2013),和命名实体识别(Tjong Kim Sang和De Meulder,2003)。
从语言模型(LMs)进行迁移学习的最新趋势是,在针对监督的下游任务微调相同模型之前,现在LM目标上预先训练一些模型架构(Dai and Le, 2015; Howard and Ruder, 2018; Radford et al., 2018)。这些方法的优点是几乎不需要从头学习参数。至少部分是由于这一优势,OpenAI GPT(Radford et al., 2018)在GLUE基准测试中在许多句子级任务上获得了之前的SOTA结果(Wang et al., 2018)
尽管无监督预训练的优势在于可以无限量地使用数据,但也有工作表明可以从具有大型数据集的监督任务中进行有效转移,例如自然语言推理(Conneau et al。,2017)和机器翻译(McCann et al。,2017)。在NLP之外,计算机视觉研究也证明了从大型预训练模型进行迁移学习的重要性,一个有效的方法是fine-tune在ImageNet上预训练的模型(Deng et al., 2009; Yosinski et al., 2014)
我们将在本节中介绍BERT及其详细实现。我们首先介绍BERT的模型架构和输入信息。然后在3.3节中介绍预训练任务,即文本的核心创新点。预训练程序和微调程序分别在3.4和3.5节中详细介绍。最后,在3.6节中讨论了BERT与OpenAI GPT之间的区别。
BERT的模型架构是多层双向Transformer编码器,其基于Vaswani等人所描述的原始实现。并在tensor2tensor库中发布(2017)。由于最近Transformers的使用可以说是无处不在,并且我们的实现与原始实现完全相同,因此我们将省略对模型结构的详细背景说明,并向读者介绍Vaswani等人,以及一些出色的指导性文章(2017),例如“The Annotated Transformer”。
在这项工作中我们将层(即Transformer模块)的数量表示为L,将隐藏层的大小表示为H,并将self-attention heads的数量表示为A。我们统一将前馈网络的大小设置为4H,即当H = 768时FF的大小为3072,H = 1024时为4096.我们主要报告两种模型尺寸的结果:
:L = 12,H = 768,A = 12,Total Parameters = 110M
:L = 24,H = 1024,A = 16,Total Parameters = 340M
为了方便比较,我们把设置为和GPT相同的大小。但是BERT的Transformer是双向的self-attention,而GPT中的Transformer使用的是self-attention有更多的限制,当前的token只能从它的前文获取信息。在文献中双向Transformer一般被称为“Transformer encoder”,而只能获取前文信息的“left-context-only”版本的Transformer称为“Transformer decoder”,它可以被用来生成文本。BERT、OpenAI GPT和ELMo的对比在下图中给出。
我们的输入表征能够清楚地用一个token序列表达一个文本或成对的句子(例如[question,answer]),对于给定的一个token,它的表征由相应的token相加得到,包括分句信息和位置信息。我们在下图中给出了图像实例。
·我们使用WordPiece的词嵌入来作为词的表征,共包含30000个词。我们使用“##”来对词分片。
·我们使用了预先学习的位置编码,可以支持512长度的序列。
·每个序列的第一个token都是特殊的分类嵌入编码([CLS])。最后一层的隐藏状态(例如Transformer的输出)会与这个token有关,在分类任务中会使用这个token,此时它融合整个序列的信息。对于非分类任务,这个向量就没有用了,可以被忽略。
·句子对被封装进一个序列中。我们可以通过一下两种方法区分句子。一、我们使用一个特殊的token([SEP])来分隔两个句子。二、对应于第一个句子中的每个token,我们向其添加预先学习到的句子向量,这个句子向量的每个token都是A的embedding。同样的,对应于第二个句子中的每个token,我们向其添加预先学习到的句子向量,这个句子向量的每个token都是B的embedding。
·对于单个句子的输入,我们只使用包含A的embedding的句子向量。
3.3.1 任务1:基于遮盖的语言模型
从直觉上讲,有理由相信,一个深度双向模型比从左到右的模型或者双向浅层相连的模型要更加强大。不幸的是,标准的语言模型只能从左到右或从右到左训练,因为双向语言模型将允许每个单词在多层上下文中间接“看到自己”。
为了训练一个深度的双向表征,我们采用了一个简单的方法,随机地屏蔽掉一定的百分比token,然后只预测这部分的token。我们称此方法为“掩盖式语言模型(MLM)”,尽管在文献中通常将其称为“完型填空”任务(Taylor,1953)。在这种情况下,就像在标准语言模型中一样,最后的隐藏向量中与被屏蔽的token相关的部分会通过softmax反馈到输出中。在我们所有的实验中,我们随机屏蔽了每个序列中的部分token,数量是所有WordPiece token的15%。与去噪自编码器不同(Vincent et al.,2008),我们只预测屏蔽掉的单词而不是预测所有的输入。
尽管这使我们可以获得一个双向的预训练模型,但这个方法有两个缺点。缺点一:由于[MASK]这个token在fine-tuning过程中是不存在的,会使预训练任务和微调任务不相同。为了缓解这个问题,我们并不会一直使用[MASK]替换被屏蔽的token。相反的,训练数据的生成过程会随机的选择15%的token,例如,在“in the sentence 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编码器不知道哪个单词会被预测也不知道哪个单词是被随机替换的,所以它强制保留了每个输入token的上下文分布表征。此外,因为随机替换的情况只有所有token的1.5%,这看起来并不会损害模型的语言理解能力。
使用MLM的第二个缺点是,每批次只预测了15%的token,这表明模型收敛可能需要更多的预训练步骤。在5.3节中,我们证实了MLM的收敛速度比从左到右的模型慢,但是MLM模型的实验提升远远超过了增加的预训练成本。
3.3.2 任务2:下一句预测
许多重要的下游任务,例如(QA)和自然语言推论(NLI),都是基于对两个文本句子之间的理解,而语言建模并不能直接捕获这些关系。为了训练一个能够理解句子关系的模型,我们预训练了一个预测下一个句子的二值化预测任务,这个任务可以使用任何单语语料库。具体而言,为每个预训练样本选择句子A和B时,50%的情况B是A的下一个句子,而50%的情况B是来自语料库的随机句子。
我们完全随机的选择NotNext句子,最终的预训练模型在此任务上达到97%~98%的准确率。尽管这个任务很简单,但我们在5.1节中证明了完成此任务的预训练对QA和NLI都非常有益。
预训练过程很大程度上遵循了现有文献中有关语言模型预训练的方法。对于预训练语料库,我们把BooksCorpus(800M字)(Zhu等人,2015)与English Wikipedia(2500M字)串联起来使用。对于Wikipedia,我们仅提取文本段落,而忽略列表、表格、标题。为了提取长的连续序列,使用文档级语料库至关重要,而不是诸如Billion Word Benchmark(Chelba等人,2013)之类的经过打乱顺序的句子级语料库。
为了生成训练所需的每个输入序列,我们从语料库中抽取了两个跨度的文本,我们将它们称为“句子”,即使它们通常比单个句子长的多(但也可能更短)。第一个句子接收A嵌入,第二个句子接收B嵌入。50%的情况B确实是A的下一个句子,而50%的情况B是随机的句子,这是为“next sentence prediction”任务准备的。对它们进行采样,以使总长度<=512个token。LM掩蔽操作在WordPiece标记化之后应用,其统一遮蔽率为15%,并且没有对任何部分的单词特别考虑。
我们以256个序列(256个sequences*512tokens = 128000个token/batch(批))的批处理大小进行1000000步的训练,这大约是33亿个单词语料库的40epoch。
我们使用包含256个序列的batch(256个sequences*512tokens = 128000token/batch)训练了1000000步,这大约是在33亿个单词语料上训练40次迭代。我们使用Adam优化算法,学习速率为1e-4,β1 = 0.9,β2 = 0.999,L2权重衰减为0.01,我们对学习速率使用了预热的处理方法,在前10000步迭代内进行预热,之后进行线性衰减。我们在所有层上使用dropout probability为0.1.像Open AI GPT一样,我们使用gelu激活函数(Hendrycks和Gimpel,2016)而不是标准relu激活函数。训练损失是MLM似然损失的平均值与预测下个句子的似然损失的平均值的和。
模型的训练是在云端TPU上进行的,每个Pod上配置四块TPU(总共使用16块TPU),的训练也是在云端TPU上进行的,但每个Pod上配置了16块TPU(总共使用64块)。
对于序列级别的分类任务,BERT的微调很简单,为了获得一个能把输入序列中的信息集中起来且是固定维度的表征,我们把最后一层的影藏状态,即(Transformer的输出)的第一个token构造成相应的特殊字嵌入[CLS]。并把它做为分类的输入。我们将该向量表示为C∈。在微调期间添加的唯一新参数是分类层W∈,其中K是分类器标签的数量。标签概率P∈用标准softmax计算,P = softmax()。BERT的所有参数和W都经过最大化正确标签的对数概率来微调。对于跨度级和token级预测任务,必须根据任务的特定方式稍微修改上述过程。详情见第四小节的相应小节。
对微调来说,模型的超参数除了batch size、learning rate和epoch外,均与预训练中相同。dropout的丢弃均设为0.1。最佳超参数值是特定于任务的,但我们发现以下一系列可能的值在所有任务中都适用:Batch size:16,32;learning rate(Adam):5e-5,3e-5,2e-5;number of epochs:3,4。
我们注意到,相对于小的数据集,大的数据集对超参的选择更不敏感。微调通常会很快,因此我们可以在开发集上对上面的所有的参数做一个全局搜索,选择表现最好的模型。
现有的模型中最适合与BERT进行对比的是OpenAI的GPT模型,GPT模型在一个很大的文本预料上训练了一个基于Transformer的从左到右的语言模型。实际上,我们有意将BERT中的许多设计、决策和GPT中的尽量相近,以便可以对两种方法进行最小化差异的比较。这项工作的核心论点是,在第3.3节中介绍的两个新提出的预训练任务对过往任务的提升起了主要作用。但我们确实注意到,BERT和GPT的训练方法之间还有其他的一些区别:
·GPT使用的训练语料是BooksCorpus(800万字);BERT的训练语料是BooksCorpus (800万字)和Wikipedia(2500万字)。
·GPT使用句子分隔符([SEP])和分类token([CLS]),它们仅在微调时引入;BERT在预训练期间学习[SEP],[CLS]和句子A/B的嵌入。
·GPT训练了1M步,一个batch中有32000字;BERT也训练了1M步,但一个batch中包含128000字。
·GPT对所有微调实验都使用值为5e-5的学习率;BERT根据不同的任务选择不同的微调学习速率,该速率在开发集上表现最佳。
为了排除这些差异带来的影响,我们在5.1节中进行了消融实验,该实验表明,大多数改进实际上来自于新的预训练任务。
在本节中,我们将介绍BERT模型在11个NLP任务上的微调结果。
如上图:我们的特定任务模型是通过将BERT与一个附加的输出层合并而形成的,因此只需要从头开始学习最少的参数。在任务中,(a)和(b)是序列级任务,而(c)和(d)是token级任务。在图中,E表示输入嵌入,表示的上下文表示,[CLS]是用于分类输出的特殊符号,[SEP]是用于分隔非连续token序列的特殊符号。
通用语言理解评估(GLUE)基准(Wang et al., 2018)是一个各种自然语言理解任务的集合。大多数GLUE数据集已经存在了很多年,但是GLUE的目的是(1)使用规范的方法来吧数据集划分成Train、Dev、Test,以及(2)设置评估服务器以缓解评估不一致的问题,以及测试集过拟合的问题。GLUE不会分发测试集的标签,用户必须将其预测结果上传到GLUE服务器上进行评估,但要限制提交的数量。
GLUE基准测试包括以下数据集,Wang等人对其进行了概述。(2018)
MNLI(Multi-Genre Natural Language Inference)是一个大规模的、来源众多的、用来做蕴含分类任务的数据集,目的就是推断两个句子是意思蕴含、矛盾还是无关的。
QQP( Quora Question Pairs)是一个二元分类任务,目的是确定在Quora上询问的两个问题在语义上是否等效。
QNLI(Question Natural Language Inference)是Stanford Question Answering数据集(Rajpurkar et al., 2016)的一个版本,该数据集已转换为二分类任务(Wang等,2018)。正例是(question, sentence)句对,正例句对包含正确的答案,负例是来自同一段落的(question, sentence)句对,不包含答案。
SST-2(The Stanford Sentiment Treebank)是一个二分类的单句分类任务,由从电影评论中提取的句子,以及人工标注的情感标签组成。(Socher等人,2013)。
CoLA(The Corpus of Linguistic Acceptability )是一个二元单句分类任务,其目标是预测英语句子在语言上是否“可接受”(Warstadt et al., 2018)。
STS-B(The Semantic Textual Similarity Benchmark)是从新闻标题和其他来源提取的句子对的集合(Cer et al。,2017)。他们用1-5分打分,表示这两个句子在语义上有多相似。
MRPC(Microsoft Research Paraphrase Corpus)由自动从在线新闻资源中提取的句子对组成,并带有说明句子对中的句子在语义上是否等效的人工标注信息(Dolan and Brockett, 2005)。
RTE(Recognizing Textual Entailment)是一项类似于MNLI的二分类蕴含任务,但是训练数据少得多(Bentivogli et al., 2009)。
WNLI(Winograd NLI)是一个小型自然语言推理数据集,源自(Levesque et al., 2011)。GLUE网页指出,此数据集的构建存在问题,已提交给GLUE的每个受过训练的效果都比预测多数类的65.1基线准确性差。因此,出于对OpenAI GPT不公平的考虑,我们将其排除在外。对于我们的GLUE提交,我们始终会预测多数类。
4.1.1 GLUE数据集上的效果
由GLUE评估服务器评分的GLUE测试结果。每个任务下方的数字表示训练样本的数量。“Average”列与官方GLUE得分略有不同,因为我们排除了有问题的WNLI数据集。OpenAI GPT = (L = 12,H = 768,A = 12); = (L = 12,H = 768,A = 12); = (L = 24,H = 1024,A = 16)。BERT和OpenAI GPT是单模型,单任务。所有的结果可以从https://gluebenchmark.com/leaderboard和https://blog.openai.com/language-unsupervised/ 获得。
为了在GLUE上进行微调,我们按照第3节中描述的方法来表示输入序列或序列对,并使用与第一个输入标记([CLS])对应的最终隐藏向量C∈对应作为聚合表征。这在图3(a)和(b)中得到了普遍的证明。在微调过程中引入的唯一新参数是分类层W∈,其中K是标签的数目。我们使用C和W计算标准分类损失,即log(softmax())。
我们在GLUE数据集上的所有任务使用的batch size为32,epoch为3。我们对每一个任务都进行了微调,使用的学习速率分别为5e-5, 4e-5, 3e-5和 2e-5,并选择了在开发集上表现最好的模型。此外,对模型来说,我们发现微调在小数据集上有时候是不稳定的(即,微调有时会产生更差的结果),所以我们进行了几次的随机重启操作,并选择在开发集上表现最好的模型。对于随机重启,我们使用相同的预训练检查点,但是我们对微调数据执行不同的数据打乱和分类层的初始化。我们注意到GLUE发布的数据集不包括测试集的标签,所以我们只能把和的结果提交到GLUE的评估服务器。
实验结果显示在上表中,和在所有任务上的表现均优于所有现有系统,与SOTA结果相比,平均精度分别提高了4.4%和6.7%。 请注意,就注意力掩蔽之外的模型架构而言,和OpenAI GPT几乎是相同的。 对于最大且报告最广的GLUE任务MNLI,BERT比最先进的技术提高了4.7%的绝对精度。 在官方的GLUE排行榜上的得分为80.4,而OpenAI GPT的得分为72.8。
我们发现,在所有任务中,尤其是训练数据很少的任务,的性能明显优于B。模型大小的影响将在5.2节中更全面地探讨。
斯坦福大学问答数据集(SQuAD v1.1)收集了10万个众包问题/答案对(Rajpurkar et al., 2016)。 给定一个问题以及Wikipedia中包含答案的段落,任务是预测段落中包含答案的文本范围。
这种预测span的任务与GLUE的序列分类任务有很大的不同,但是我们能够使BERT以一个简单的方式在SQuAD数据上运行。像使用GLUE数据集一样,我们将输入的问题和段落封装进一个序列来表征,问题使用A嵌入,而段落使用B嵌入。在微调阶段唯一需要学习的是一个起始向量S∈和一个结束向量E∈,我们把与第i个输入字符相对应的BERT的最后一个隐层的向量定义为∈。相关的可视化信息,请看上图的(c)。然后和S的点积,通过Softmax(softmax的计算范围为当前段落内所有的字)后的值为第i个词是answer span开始位置的概率。
= /
answer span的结束位置的概率也使用相同的公式。得分最高的span做为预测的结果。训练目标是正确开始和结束位置的对数似然函数。
我们使用5e-5的学习率,32的batch size训练了5轮。在推理时,由于结果位置的预测不是以开始位置为条件的,所以我们添加了结束必须在开始之后的约束,但没有使用其它的启发式的方法。处理过的已标记span会对齐到原始的为处理的输出上,以用来评估。
结果在表二中展示。SQuAD使用非常严格的测试流程,提交者必须手动联系SQuAD组织者以在隐藏的测试集上运行他们的系统,因此我们仅提交了最佳的测试系统。 表格中显示的结果是我们向SQuAD提交的第一个也是唯一的测试。 我们注意到,来自SQuAD排行榜排名最高的结果没有可用的最新开源系统的描述,但可以在训练他们的系统时使用任何公共数据。 因此,通过联合在SQuAD和TriviaQA上进行训练,我们在提交的系统中使用了非常适度的数据扩增(Joshi等人,2017)。
我们表现最好的系统在整体上比排名靠前的系统F1值高出1.5个百分点,BERT做为单一系统时,它的性能比排名靠前的系统的F1高出1.3个点。事实上,我们的单BERT模型在F1成绩方面优于顶级的集成系统。如果我们只在SQ语料上进行微调(不使用TriviaQA),我们的F1将损失0.1-0.4个点,但相比于现有系统,仍有很大的优势。
为了评估token标注任务的表现,我们在CoNLL2003Named Entity Recognition(NER)数据集上微调了BERT模型。这个数据集的训练集包含200000个词,这些词被标注为人名(Person)、机构(Organization)、地点(Location)、混合类型(Missaellaneous)或Other(非命名实体)。
为了进行微调,我们把最后一层隐层向量的每个token( ∈ )输入到一个可以映射到NER标签集合的分类layer上。预测结果之间条件独立(即,非自回归,没有CRF)。为了与WordPiece相兼容,我们把CoNLL语料中已经tokenize过的数据再次输入到WordPiece中做tokenize,然后使用第一个子标记相对应的隐藏状态作为分类器的输入,例如:
X不会被预测。在训练和测试过程中,WordPiece处理后的边界对于输入来说是已知部分。 在上图(d)中也给出了可视化的展示。 区分大小写的WordPiece模型用于NER,而没有区分大小写的模型用于其他任务。
结果如表3所示。在CoNLL-2003 NER测试集上,BERTLARGE在多任务的交叉可视训练上,表现优于现有的SOTA结果0.2个点。(Clark et al.,2018)。
SWAG 数据集包含11.3万句对,这些句对评估了基于常识的推理(Zellers等人,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 stands on a wooden plank.
(iv) jumps up and does a back flip.
BERT在SWAG数据集上的修改与在GLUE数据集上时类似,举例,我们构造了4个输入序列,每个序列包含了给定的上文A,以及可能的下文B。只有一个向量V∈是任务特有的,它的点积C ∈是最终的聚合表征,代表了每个选项i的得分。概率分布是基于这4个选项得分的softmax。
我们使用1r = 2e-5, batch size = 16, epochs = 3 的参数对模型进行了微调。结果在表4中展示。的表现比ESIM + ELMo的baseline高27.1个百分点。
尽管我们展示了非常有实验基础的结果,但到目前为止,还没有独立的表明BERT框架的各个部分到底都有哪些特殊的贡献。在本章节中,我们通过BERT模型各部分的消融实验,来更好的了解它们的相对重要性。
我们的核心观点之一是,与以前的工作相比,BERT中基于掩盖方式的、深度双向的语言模型的预训练实现,是BERT的最重要的改进。为了证明这个观点,我们评估了两个新模型,它们使用与完全相同的预训练数据,微调方案和Transformer超参数:
(1)模型只使用“Masked LM”进行训练,没用使用NSP任务。
(2)使用从左到右(LTR)LM而不是MLM训练的模型。 在这种情况下,我们会预测每个输入的单词,并且不会应用任何屏蔽。 微调时也使用左侧约束,因为我们发现预训练时使用左侧约束,而微调时使用下上文两侧约束的结果总是很差。 此外,该模型的训练没有使用NSP任务。 这可以直接与OpenAI GPT相提并论,但要使用我们的更大的训练数据集,输入表示形式和微调方案。
结果显示在表5中。我们首先检查NSP任务带来的影响。 我们可以看到,删除NSP任务会严重降低QNLI,MNLI和SQuAD任务上的表现。 这些结果表明,我们的NSP预训练方法对于获得前文提到的有力的实验结果至关重要。
接下来,我们通过“不使用NSP任务”和“从左到右(LTR)训练及不使用NSP任务”来评估双向训练的影响。在所有的任务上,LTR的表现都比MLM差。尤其是在MRPC和SQuAD两个任务上,表现下降的很大。对于SQuAD,直观上很清楚,由于令token级别的隐藏状态没有右侧的下文,因此LTR模型在跨度和token预测上的性能将非常差。对于MRPC来说,不清楚性能差是由于数据量小还是任务性质引起的,但是我们发现这种表现差在多次随机重启的完整超参数扫描中是一致的。为了得到真实的结果,我们尝试加强LTR系统,我们尝试在其上添加随机初始化的BiLSTM以进行微调。 这确实可以显著改善SQuAD上的结果,但结果仍然比预训练的双向模型差得多。 这也会降低所有四个GLUE任务的性能表现。
我们认识到,像ELMo一样,也有可能训练单独的LTR和RTL模型并将每个token表示为两个模型的串联。 但是:(a)这个模型的代价是单个双向模型的两倍; (b)对于QA这样的任务,这是不直观的,因为RTL模型将无法确定问题的答案; (c)由于深度双向模型可以选择使用左上文或右下文,因此它从比较严谨的定义上讲不如深度双向模型强大。
在本节中,我们探索模型大小对微调任务准确性的影响。我们训练了许多具有不同层数,隐藏单元和attention heads的BERT模型,而其他方面则使用了与前面所述相同的超参数和训练过程。
表6中显示了选定的GLUE任务的结果。在此表中,我们展示了在开发数据集上,5次随机初始化微调的平均准确性。我们可以看到,较大的模型在4个数据集上都有明确的提升,即使在与上游的预训练任务有较大区别的MRPC任务且样本量只有3600的训练集上也是如此。也许令人惊讶的是,我们能够在相对于现有文献而言已经足够大的模型的基础上实现如此重大的改进。例如,在Vaswani等人中探索的最大的Transformer模型。是(L = 6,H = 1024,A = 16),编码器的参数为100M,而我们在文献中发现的最大的Transformer结构是(L = 64,H = 512,A = 2)并有235M参数(Al-Rfou et al。,2018)。相比之下,包含110M参数,而包含340M参数。
多年以来,众所周知,增加模型大小可以持续的提高机器翻译和语言建模等大型任务的效果,表6中列出的在训练集上的语言模型困惑度也给出了相应证明。但是,我们认为这是第一个证明了对模型大小的极端缩放也可以在非常小规模的任务上带来很大的改进的工作,前提是模型已经过充分的预训练。
图4展示了使用一个预训练了K次的模型进行微调后在MNLI任务上的开发准确度。这能为我们回答以下问题:
(1)问题:BERT真的需要如此大的预训练(128,000 words/batch * 1,000,000 steps) 来达到高微调准确度吗?
回答:是的,使用1M迭代比500k次迭代的准确度提高了1%。
(2)问题:相比于LTR的每个batch预测所有字,MLM每个batch只有15%的数据会被预测,所以MLM预训练的收敛速度是否比 LTR 预训练收敛速度慢?
回答:MLM模型的收敛速度确实比LTR模型稍慢。 然而,就绝对精度而言,MLM模型几乎在训练一开始就优于LTR模型。
到目前为止,我们展示出的BERT的结果都是基于微调这个方法的。微调时会向模型添加一个用于分类的layer,所有的参数都会参与下游的微调任务。但是,从预训练模型中提取固定特征的方法是具有某些优势的。 首先,并非所有的NLP任务都可以通过Transformer编码器体系结构轻松表征,因此需要添加特定于任务的模型体系结构。 其次,使用高昂的代价在训练数据上预训练,得到训练集的表征,然后在此表征之上使用较低的成本运行许多模型实验,这具有重大的计算优势。
在本节中,我们通过在CoNLL-2003 NER任务上生成类似ELMo的预训练上下文表征来评估BERT在基于特征的方法中的表现。 为此,我们使用与第 4.3 节中相同的输入表示,使用一个或多个layer激活,而无需微调BERT的任何参数。 这些上下文embedding用作分类层之前BiLSTM的输入,BiLSTM共有二层,均随机初始化。
结果如表7所示。性能最好的方法是连接来自预训练Transformer的前四个隐藏层的token表征,基F1只比微调整个模型的的F1低0.3。 这表明 BERT 对于微调和基于特征的方法都是有效的。
最近,通过使用语言模型进行迁移学习,相关实验都得到了提升。证明,丰富的、无监督的预训练是许多语言理解系统不可或缺的一部分。 特别是,这些结果会使一些低资源的任务也能从深度单向架构中受益。 我们的主要贡献是将这些发现进一步推广到深度双向体系结构中,使相同的预训练模型能够成功处理一系列广泛的NLP任务。
虽然实验结果很强,在某些情况下超过了人类的表现,但未来重要的工作是探索能被BERT捕获或不被捕获的语言现象。