【文章来源】
BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding:https://arxiv.org/pdf/1810.04805.pdf
我们介绍了一种新的语言表示模型BERT,它表示转换器的双向编码器表示。与最近的语言表示模型不同(Peters et al., 2018; Radford et al., 2018),BERT通过在所有层的上下文联合调节来预训练深层双向表示。因此,只需一个额外的输出层就可以对预先训练好的BERT表示进行微调,以便为各种任务创建最先进的模型,例如问答和语言推断,而无需基本的任务特定架构修改。
BERT概念简单,经验丰富。它在11项自然语言处理任务中获得了最新的技术成果,包括将GLUE的基准值提高到80.4%(7.6%的绝对改进)、多项准确率提高到86.7%(5.6%的绝对改进)、将SQuAD v1.1的问答测试F1提高到93.2(1.5的绝对改进),比human的表现高出2.0。
语言模型预训练已经证明对改进许多自然语言处理任务是有效的(Dai和Le,2015; Peters等,2017,2018; Radford等,2018; Howard和Ruder,2018)。这些任务包括句子级任务,如自然语言推理(Bowman et al,2015; Williams et al,2018)和释义(Dolan和Brockett,2005),旨在通过整体分析来预测句子之间的关系,以及令牌级任务,如命名实体识别(Tjong Kim Sang和De Meulder,2003)和SQuAD问题回答(Rajpurkar等,2016),其中模型需要在令牌级别生成细粒度输出。
将预训练语言表示应用于下游任务有两种现有策略:基于特征和微调。基于特征的方法,例如ELMo(Peters等,2018),使用特定于任务的体系结构,其包括预先训练的表示作为附加特征。微调方法,例如Generative Pre-trained Transformer(OpenAI GPT)(Radford等,2018),引入了最小的任务特定参数,并通过简单地微调预训练参数来训练下游任务。在以前的工作中,两种方法在预训练期间共享相同的目标函数,在这些方法中,他们使用单向语言模型来学习一般语言表示。
我们认为当前的技术严重限制了预训练表示的能力,特别是对于微调方法。主要限制是标准语言模型是单向的,这限制了在预训练期间可以使用的体系结构的选择。例如,在OpenAI GPT中,作者使用了从左到右的体系结构,其中每个令牌只能处理Transformer自我关注层中的前一个令牌(Vaswani et al, 2017)。这些限制对于句子级别任务来说是次优的,并且在将基于微调的方法应用于令牌级别任务(例如SQuAD问答)时可能是毁灭性的(Rajpurkar等,2016),在这些任务中,从两个方向合并上下文至关重要。
在本文中,我们通过提出BERT:变换器的双向编码器表示来改进基于微调的方法。 BERT通过提出一个新的预训练目标来解决前面提到的单向约束:“掩盖语言模型”(MLM),受到完形任务的启发(Taylor,1953)。被掩盖的语言模型从输入中随机地掩盖一些标记,并且目标是仅基于其上下文来预测被掩盖的单词的原始词汇id。与从左到右的语言模型预训练不同,MLM目标允许表示融合左右上下文,这允许我们预训练一个深度双向变换器。除了蒙面语言模型,我们还引入了一个“下一句预测”任务,联合预训练文本对表示。
本文的贡献如下:
预训练通用语言表示有很长的历史,我们将简要回顾本节中最常用的方法。
几十年来,学习广泛适用的词语表达一直是研究的一个活跃领域,包括非神经(Brown et al。,1992; Ando and Zhang,2005; Blitzer et al。,2006)和神经(Collobert and Weston,2008; Mikolov等,2013; Pennington等,2014)方法。预训练的单词嵌入被认为是现代NLP系统不可或缺的一部分,与从头学习的嵌入相比有显着改进(Turian et al。,2010)。这些方法已被推广到较粗糙的粒度,例如句子嵌入(Kiros等,2015; Logeswaran和Lee,2018)或段嵌入(Le和Mikolov,2014)。与传统的单词嵌入一样,这些学习的表示通常也用作下游模型中的特征。 ELMo(Peters等,2017)将传统的词嵌入研究概括为不同的维度。他们建议从语言模型中提取上下文敏感特征。当将上下文字嵌入与现有的任务特定体系结构集成时,ELMo推进了几个主要NLP基准测试的最新技术(Peters等,2018),包括SQUAD上的问答(Rajpurkar等,2016),情绪分析(Socher et al,2013),以及命名实体识别(Tjong Kim Sang和De Meulder,2003)。
从语言模型(LMs)转移学习的最新趋势是在LM目标上预先培训一些模型架构,然后对监督下游任务的相同模型进行微调(Dai and Le, 2015; Howard and Ruder, 2018; Radford et al., 2018)。这些方法的优点是需要从头开始学习很少的参数。至少部分任务可以借助这一优势,比如OpenAI GPT(Radford等,2018)在GLUE基准测试中获得了许多句子级任务的最好结果(Wang et al,2018)。
虽然无监督预培训的优点是可以获得几乎无限的数据量,但也有工作表明从具有大型数据集的监督任务中有效转移,例如自然语言推断(Conneau等,2017)和机器翻译(McCann et al。,2017)。在NLP之外,计算机视觉研究也证明了从大型预训练模型转移学习的重要性,其中一个有效的方法是对ImageNet上的预训练模型进行微调(Deng et al.,2009;Yosinski等人,2014)。
我们在本节介绍BERT及其详细实现。我们首先介绍模型体系结构和BERT的输入表示。然后,我们将在3.3节中介绍预训练任务,即本文的核心创新。预培训程序和微调程序分别在第3.4节和第3.5节中详述。最后,第3.6节讨论了BERT和OpenAI GPT之间的差异。
BERT的模型架构是一个多层双向Transformer编码器,基于Vaswani等人(2017)中描述的原始实现,并在tensor2tensor库中发布。因为Transformers的使用最近变得无处不在,,而且我们的实现与最初的实现实际上是相同的,我们将省略对模型架构的详尽的背景描述,并将读者推荐给Vaswani et al.(2017),以及优秀的指南,如“带注释的变压器”。在这项工作中,我们将层数(即变形金刚块)表示为L,将隐藏层大小表示为H,将自注意力头的数量表示为A。在所有情况下,我们将前馈/滤波器大小设置为4H,即H = 768时为3072,H = 1024时为4096。我们主要报告两种模型大小的结果:
为了进行比较,选择BERTBASE与OpenAI GPT具有相同的模型大小。 然而,重要的是,BERT Transformer使用的是双向的自我关注,而GPT Transformer使用的是受限的自我关注,每个令牌只能关注左边的上下文。我们注意到,在文献中,双向变换器通常被称为“Transformer encoder”,而左上下文仅被称为“Transformer decoder”,因为它可以用于文本生成。 BERT,OpenAI GPT和ELMo之间的比较如图1所示。
我们的输入表示能够在一个令牌序列中明确地表示单个文本句子或一对文本句子(例如,[问题,答案])。对于给定的标记,其输入表示通过对相应的标记,段和位置嵌入求和来构造。我们的输入表示的可视化表示在图2中给出。具体是:
与Peters等人(2018)和Radford等人(2018)不同的是,我们不使用传统的从左到右或从右到左的语言模型来预训练BERT。相反,我们使用两节新的无监督预测任务对BERT进行预训练,如本节所述。
直观地说,我们有理由相信,深度双向模型比从左到右模型或从左到右和从右到左模型的浅层连接更强大。遗憾的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向调节将允许每个单词在多层上下文中间接地“看到自己”。
为了训练深度双向表示,我们采用直接的方法随机屏蔽一定比例的输入令牌,然后仅预测那些被屏蔽的令牌。我们将这个程序称为“Masked LM”(MLM),尽管它在文献中通常被称为完形任务(Taylor,1953)。在这种情况下,对应于掩码令牌的最终隐藏向量被馈送到词汇表上的输出softmax,如在标准LM中。在我们的所有实验中,我们随机地屏蔽每个序列中所有WordPiece标记的15%。与去噪自动编码器(Vincent et al,2008)相反,我们只预测掩蔽的单词而不是重建整个输入。
虽然这确实允许我们获得双向预训练模型,但这种方法有两个缺点。首先,我们预训练和微调之间建立了一个不匹配,因为[MASK]令牌在微调期间从未出现。为了减轻这种影响,我们并不总是用实际的[MASK]令牌替换“掩蔽”词。相反,训练数据生成器随机选择15%的令牌,例如,在句子中,我的狗是多毛的,它选择毛茸茸的。然后执行以下过程:
Transformer编码器不知道它将被要求预测哪些单词或哪些单词已被随机单词替换,因此它被迫保持每个输入标记的分布式上下文表示。此外,因为随机替换只发生在所有令牌的1.5%(即15%的10%),这似乎不会损害模型的语言理解能力。使用MLM的第二个缺点是每批中只预测了15%的令牌,这表明模型可能需要更多的预训练步骤才能收敛。在5.3节中,我们证明MLM的收敛速度略慢于从左到右的模型(预测每个标记),但MLM模型的实证改进远远超过增加的培训成本。
许多重要的下游任务,例如问答(QA)和自然语言推理(NLI),都是基于理解两个文本句子之间的关系,而这两个文本句子并不是由语言建模直接捕获的。 为了训练理解句子关系的模型,我们预先训练了一个可以从任何单语语料库轻松生成的二值化的下一个句子预测任务。具体地,当为每个预训练示例选择句子A和B时,50%的时间B是跟随A的实际下一句子,并且50%的时间是来自语料库的随机句子。例如:
我们完全随机选择NotNext句子,最终的预训练模型在此任务中达到97%-98%的准确率。尽管它很简单,但是我们在5.1节中展示了针对这个任务的预培训对QA和NLI都非常有益。
我们完全随机选择NotNext语句,最终预训练模型在此任务中达到97%-98%的准确率。尽管它很简单,但我们在5.1节中证明,预测这项任务对QA和NLI都非常有益。对于训练前的语料库,我们使用BooksCorpus(800M单词)(Zhu等,2015)和英语维基百科(2,500M单词)的串联。对于维基百科,我们只提取文本段落并忽略列表,表格和标题。为了提取长时间的连续序列,使用文档级的语料库而不是像十亿字基准(Chelba et al., 2013)这样的混乱的句子级语料库非常重要。
为了生成每个训练输入序列,我们从语料库中采样两段文本,我们将其称为“句子”,即使它们通常比单个句子长得多(但也可以更短一些)。第一个句子接收A嵌入,第二个句子接收B嵌入。50%的时间B是跟随A的实际下一个句子,50%的时间是随机句子,这是为“下一句话预测”任务完成的。对它们进行采样,使得组合长度≤512个令牌。在WordPiece标记化之后应用LM掩蔽,具有15%的统一掩蔽率,对部分word片段不作特别考虑。
我们的批处理大小为256个序列(256个序列* 512个令牌= 128,000个令牌/批),共训练了1,000,000个步骤,约为33亿个语料库中的40个epoch。我们使用学习率为1e-4,β1= 0.9,β2= 0.999,L2权重衰减为0.01,在第一个10000步学习速率热身,学习速率的线性衰减。我们在所有层上使用0.1的退化概率。在OpenAI GPT之后,我们使用gelu激活(Hendrycks和Gimpel,2016)而不是标准relu。训练过程中的损失函数是平均掩蔽LM概率和平均下一个句子预测概率的总和。
在Pod配置的4个云TPU上进行了BERTBASE的训练(总共16个TPU芯片)。 BERTLARGE的训练在16个云TPU(总共64个TPU芯片)上进行。每次预训练需要4天才能完成。
对于序列级分类任务,BERT微调很简单。为了获得输入序列的固定维集合表示,我们取最后的隐藏状态(即,Transformer的输出),用于输入中的第一个令牌,通过构造对应于特殊的[CLS]字嵌入。我们将该向量表示为。在微调期间添加的唯一新参数是分类层,其中K是分类器标签的数量。标签概率用标准softmax计算,。 BERT和W的所有参数都经过微调,以最大化正确标签的对数概率。对于跨度级和令牌级预测任务,必须以任务特定方式稍微修改上述过程。详情见第4节的相应小节。
在微调方面,除批量大小、学习率和训练周期数外,大多数模型超参数与训练前相同。退化率始终保持在0.1。最佳超参数值是特定于任务的,但是我们发现了以下可能的值范围,可以在所有任务中很好地工作:
我们还观察到,大数据集(例如,100k +标记的训练示例)对超参数选择的敏感性远小于小数据集。 微调通常非常快,因此简单地对上述参数进行详尽搜索并选择在开发集上表现最佳的模型,这是合理的。
与BERT最具可比性的现有预训练方法是OpenAI GPT,它在一个大型文本语料库中训练一个左对右的Transformer LM。实际上,BERT中的许多设计决策都被有意地选择为尽可能接近GPT的,以便可以最小化地比较这两种方法。这项工作的核心论点是,第3.3节中提出的两项新的培训前任务占了大部分的实证改进,但我们注意到BERT和GPT如何训练之间还存在其他一些差异:
为了分离这些差异的影响,我们在5.1节进行了消融实验,证明大多数改进实际上来自新的预训练任务。
在本节中,我们将介绍11个NLP任务的BERT微调结果。
通用语言理解评估(GLUE)基准(Wang et al。,2018)是各种自然语言理解任务的集合。大多数GLUE数据集已存在多年,但GLUE的目的是(1)使用规范的Train,Dev和Test拆分分发这些数据集,以及(2)设置评估服务器以减轻问题评估不一致和测试集过度拟合。GLUE没有分发测试集的标签,用户必须将他们的预测上传到GLUE服务器进行评估,提交的数量是有限的。
GLUE基准包括以下数据集,其描述最初在Wang等人(2018)的文章中进行了总结:
为了微调GLUE,我们如第3节所述表示输入序列或序列对,并使用对应于第一个输入标记([CLS])的最终隐藏向量作为聚合表示。这在图3(a)和(b)中可视地证明。在微调期间引入的唯一新参数是分类层,其中K是标签的数量。我们用C和W计算标准分类损失,即。
对于所有GLUE任务,我们对数据使用32和3个时期的批量大小。对于每项任务,我们进行了微调,学习率为5e-5,4e-5,3e-5和2e-5,并选择了在Dev set上表现最佳的那个。此外,对于BERTLARGE,我们发现微调有时在小数据集上不稳定(即,某些运行会产生退化结果),因此我们运行了几次随机重启并选择了在Dev集上表现最佳的模型。通过随机重启,我们使用相同的预训练检查点,但执行不同的微调数据混洗和分类器层初始化。我们注意到GLUE数据集分布不包括测试标签,我们只为每个BERTBASE和BERTLARGE提交了一个GLUE评估服务器提交。
结果如表1所示。BERTBASE和BERTLARGE在所有任务上的表现均优于所有现有系统,相对于最先进的技术,平均准确度提高了4.4%和6.7%。请注意,BERTBASE和OpenAI GPT在注意力掩蔽之外的模型架构方面几乎相同。对于最大和最广泛报道的GLUE任务MNLI,BERT相对于最先进的技术获得了4.7%的绝对精度提升。在官方GLUE排行榜上,BERTLARGE得分为80.4,而排名靠前的排行榜系统OpenAI GPT在撰写之日获得72.8分。
有趣的是,BERTLARGE在所有任务中都明显优于BERTBASE,即使那些训练数据非常少的人也是如此。第5.2节更全面地探讨了BERT模型尺寸的影响。
Standford问题回答数据集(SQuAD)是100k众包问答对的集合(Rajpurkar等,2016)。 给定一个问题和维基百科中包含答案的段落,任务是预测段落中的答案文本跨度。例如:
这种类型的跨度预测任务与GLUE的序列分类任务完全不同,但我们能够以简单的方式调整BERT以在SQuAD上运行。 与GLUE一样,我们将输入问题和段落表示为单个打包序列,问题使用A嵌入,段落使用B嵌入。在微调期间学习的唯一新参数是起始矢量和结束矢量。让来自BERT的第i个输入令牌的最终隐藏向量表示为。 有关可视化,请参见图3(c)。 然后,单词i作为答案跨度开始的概率被计算为Ti和S之间的点积,接着是段落中所有单词的softmax:
相同的公式用于答案跨度的结束,并使用最大得分跨度作为预测。训练目标是正确的开始和结束位置的对数似然。
我们训练了3个epoch,学习率为5e-5,批量大小为32。在推理的时候,由于最终预测不以开始为条件,所以没有使用其他的启发式方法。标记化的标记跨度对齐到原始的未标记化输入,以便进行评估。
结果显示在表2中。SQUAD使用严格的测试程序,其中提交者必须手动联系SQuAD组织者以在隐藏的测试集上运行他们的系统,因此我们只提交了我们最好的系统进行测试。表中显示的结果是我们向SQuAD提交的第一个也是唯一的测试。我们注意到SQUAD排行榜的最高结果没有可用的最新公共系统描述,并且在训练他们的系统时可以使用任何公共数据。因此,我们通过联合培训SQUAD和TriviaQA,在我们提交的系统中使用非常适度的数据增加(Joshi等,2017)。
我们表现最佳的系统在整体排名中优于顶级排行榜系统1.5 F1,在单一系统中优于1.3 F1。事实上,我们的单一BERT模型在F1得分方面优于顶级合奏系统。如果我们只调整SQUAD(没有TriviaQA),我们将失去0.1-0.4 F1,并且仍然大幅超越所有现有系统。
为了评估令牌标记任务的性能,我们在CoNLL 2003命名实体识别(NER)数据集上微调BERT。 该数据集由200k个训练单词组成,这些单词已注释为人员,组织,位置,杂项或其他(非命名实体)。 为了进行微调,我们将最终隐藏表示提供给每个令牌i到NER标签集上的分类层。 预测不以周围的预测为条件(即,非自回归和无CRF)。 为了使其与WordPiece标记化兼容,我们将每个CoNLL标记化输入字提供给我们的WordPiece标记化器,并使用与第一个子标记相对应的隐藏状态作为分类器的输入。 例如:
在没有对X进行预测的情况下。由于WordPiece标记化边界是输入的已知部分,因此对训练和测试都进行了预测。 在图3 (d)中也给出了一个可视化的表示。一个大小写的WordPiece模型被用于NER,而一个无盖的模型被用于所有其他任务。
结果显示在表3中。BERTLARGE在CoNLL-2003 NER测试中优于现有的SOTA,具有多任务学习的跨视图训练(Clark等,2018),+ 0.2。
具有对抗性生成的情境(SWAG)数据集包含113k个句子对完成示例,用于评估基础常识推理(Zellers等,2018)。 给定视频字幕数据集中的句子,任务是在四个选项中决定最合理的延续。 例如:
使BERT适应SWAG数据集类似于对GLUE的适应。对于每个例子,我们构造四个输入序列,每个输入序列包含给定句子(句子A)和可能的继续(句子B)的串联。 我们引入的唯一任务特定参数是向量,其具有最终聚合表示的点积表示每个选择i的得分。概率分布是四种选择的softmax:
我们对模型进行了3个epoch的微调,学习率为2e-5,批次大小为16。结果如表4所示。BERTLARGE比作者的基线ESIM+ELMo系统高出27.1%。
虽然我们已经展示了非常强大的实证结果,但到目前为止所呈现的结果并未孤立BERT框架各个方面的具体贡献。在本节中,我们将对BERT的多个方面进行消融实验,以便更好地了解它们的相对重要性。
我们的核心主张之一是BERT的深度双向性,这是通过掩盖LM预训练实现的,是BERT与以前的工作相比最重要的改进。为了证明这一说法,我们评估了两个使用完全相同的训练前数据,微调方案和Transformer超参数作为BERTBASE的新模型:
结果显示在表5中。我们首先检查NSP任务带来的影响。我们可以看到,删除NSP会严重损害QNLI,MNLI和SQuAD的性能。这些结果表明,我们的预训练方法对于获得先前提出的强有力的实证结果至关重要。
接下来,我们通过比较“No NSP”与“LTR&No NSP”来评估训练双向表示的影响。 LTR模型在所有任务上的性能都比MLM模型差,在MRPC和SQuAD上有极大的下降。对于SQuAD,直观清楚的是LTR模型在跨度和令牌预测方面表现非常差,因为令牌级隐藏状态没有右侧上下文。对于MRPC,目前尚不清楚性能不佳是由于数据量小还是任务的性质,但我们发现这种不良性能在完整的超参数扫描中是一致的,并且有很多随机重启。
为了真诚地尝试加强LTR系统,我们尝试在其上面添加一个随机初始化的BiLSTM进行微调。这确实显着改善了SQuAD的结果,但结果仍然比预先训练的双向模型差得多。它还会影响所有四个GLUE任务的性能。
我们认识到,也可以训练单独的LTR和RTL模型,并将每个令牌表示为两个模型的连接,就像ELMo所做的那样。然而:(a)这是单方向模型的两倍;(b)对于像QA这样的任务来说,这是不直观的,因为RTL模型不能确定问题的答案;(c)由于深度双向模型可以选择使用左上下文或右上下文,因此严格来说,它不如深度双向模型强大。
在本节中,我们将探讨模型大小对微调任务准确性的影响。我们训练了许多具有不同层数,隐藏单元和注意头的BERT模型,同时使用与前面描述的相同的超参数和训练过程。选定的GLUE任务的结果如表6所示。在此表中,我们报告了5次随机重启微调的平均开发集精度。
我们可以看到,较大的模型导致所有四个数据集的严格精度提高即使是MRPC,它只有3600个标记的训练示例,与训练前的任务有很大的不同。同样令人惊讶的是,我们能够在相对于现有文献已经相当大的模型之上实现这种显着的改进。
例如Vaswani et al.(2017)中探索的最大Transformer是(L = 6,H = 1024,A = 16),编码器有100M参数,我们在文献中找到的最大Transformer是(L = 64,H = 512,A = 2),235M参数(Al-Rfou等,2018)。相比之下,BERTBASE包含110M参数,BERTLARGE包含340M参数。
众所周知,增加模型尺寸将导致机器翻译和语言建模等大型任务的持续改进,这可通过表6中所示的LM延迟训练数据的复杂性来证明。但是,我们相信这是第一个证明扩展到极端模型尺寸的工作也可以在非常小规模的任务上实现大幅改进,前提是该模型已经过充分预先培训。
图4显示了从已经预训练了k步的检查点进行微调后的MNLI Dev精度。 这使我们可以回答以下问题:
1.问题:BERT是否真的需要如此大量的预训练(128,000字/批* 1,000,000步)才能实现高微调精度?
答:是的,BERTBASE在MNLI上训练1M步的准确率几乎是1.0%,而在500k步上训练的准确率要高得多。
2.问题:MLM预训练是否比LTR预训练收敛慢,因为每批中只有15%的单词被预测而不是每个单词?
答:MLM模型的收敛速度略慢于LTR模型。 然而,就绝对精度而言,MLM模型几乎立即开始优于LTR模型。
到目前为止所呈现的所有BERT结果都使用了微调方法,其中将简单的分类层添加到预训练模型,并且所有参数在下游任务上联合微调。然而,基于特征的方法具有某些优点,其中固定特征从预训练模型中提取。首先,并非所有NLP任务都可以通过Transformer编码器体系结构轻松表示,因此需要添加特定于任务的模型体系结构。其次,能够一次预先计算训练数据的昂贵表示,然后在这种表示的基础上使用更便宜的模型进行许多实验,这有很大的计算优势。
在本节中,我们通过在CoNLL-2003 NER任务上生成类似ELMo的预训练上下文表示来评估BERT在基于特征的方法中的表现。为此,我们使用与第4.3节相同的输入表示,但是使用来自一个或多个层的激活,而不微调BERT的任何参数。在分类层之前,这些上下文嵌入作为一个随机初始化的两层768维BiLSTM的输入。
结果显示在表7中。表现最佳的方法是连接来自预训练变压器的前四个隐藏层的令牌表示,其仅在微调整个模型后仅为0.3 F1。这表明BERT对于微调和基于特征的方法都是有效的。
最近由于语言模式转换学习的经验改进表明,丰富的、无监督的预训练是许多语言理解系统的一个组成部分。特别是,这些结果使得即使是低资源任务也能从非常深的单向体系结构中受益。我们的主要贡献是将这些发现进一步推广到深度双向架构,允许相同的预训练模型成功解决一系列广泛的NLP任务。虽然实证结果很强,在某些情况下超过人类表现,但未来重要的工作是调查BERT可能会或可能不会捕获的语言现象。