论文翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

BERT:用于语言理解的深度双向变换器的预训练

摘要

我们引入了一个新的语言表示模型BERT,它代表了来自Transformers的双向编码器表示。与最近的语言表示模型不同(Peters等人,2018a; Radford等人,2018),BERT旨在通过在所有层的左,右上下文上共同进行条件预处理,从未标记的文本中预训练深层双向表示。因此,仅需一个额外的输出层就可以对经过预训练的BERT模型进行微调,以创建适用于各种任务(例如问题解答和语言推论)的最新模型,而无需进行特定于任务的体系结构修改。

BERT在概念上很简单,在经验上也很强大。它在11个自然语言处理任务上取得了新的最新结果,包括将GLUE分数推到80.5%(7.7%的绝对提高),MultiNLI准确率提高到86.7%(4.6%的绝对提高),Team v1.1问答测试F1提高到93.2(1.5分绝对提高),Team v2.0测试F1提高到83.1(5.1分绝对提高)。


1. 简介

语言模型预训练被证明对改善许多自然语言处理任务是有效的(Dai和Le,2015;Peters等人,2018a;Radford等人,2018;Howard和Ruder,2018)。这些包括句子级别的任务,例如自然语言推理(Bowman等,2015; Williams等,2018)和释义(Dolan和Brockett,2005),旨在通过对句子之间的关系进行整体分析来预测句子之间的关系,例如以及诸如命名实体识别和问题回答之类的令牌级任务,其中需要模型以在令牌级上产生细粒度的输出(Tjong Kim Sang和De Meulder,2003; Rajpurkar等人,2016)。

有两种现有的策略用于将预先训练的语言表示应用于下游任务:基于特征和微调。基于特征的方法,如Elmo(Peters等人,2018a),使用包括预先训练的表示作为附加特征的特定任务的体系结构。微调方法(如Generative Pre-trained Transformer(OpenAI GPT)(Radford et al。,2018))引入了最小的任务特定参数,并通过简单地微调所有预训练参数来对下游任务进行训练。这两种方法在训练前共享相同的目标函数,它们使用单向语言模型来学习通用的语言表征。

我们认为,当前的技术限制了预训练表示的能力,特别是对于微调方法。主要的限制是标准语言模型是单向的,这限制了可以在预训练期间使用的体系结构的选择。例如,在OpenAI GPT中,作者使用从左到右的体系结构,其中每个令牌只能参与Transformer的自注意层中的先前令牌(V aswani等人,2017)。这样的限制对于句子级任务不是最理想的,并且在将基于微调的方法应用于令牌级任务(例如问题回答)时可能非常有害,在这种情况下,必须从两个方向合并上下文。

在本文中,我们改进了基于微调的方法,提出了BERT:来自变换器的双向编码器表示。BERT通过使用Cloze任务(Taylor,1953年)启发的“屏蔽语言模型”(MLM)预训练目标,减轻了前面提到的单向性约束。屏蔽语言模型从输入中随机屏蔽了某些标记,目的是仅根据其上下文来预测屏蔽单词的原始词汇ID。与从左到右的语言模型预训练不同,MLM目标使表示形式能够融合左右上下文,这使我们能够预训练深层双向Transformer。除了屏蔽语言模型外,我们还使用“下一个句子预测”任务来联合预训练文本对表示。
本文的贡献如下:

  • 我们证明了双向预训练对语言表示的重要性。与Radford等人不同(2018),它使用单向语言模型进行预训练,BERT使用掩码语言模型来预训练的深度双向表示。这也与彼得斯等人相反(2018a),它使用了独立训练的从左至右和从右至左的LM的浅层连接。
  • 我们展示了预先训练的表示法减少了对许多工程繁重的特定任务架构的需求。BERT是第一个基于微调的表示模型,可在一系列句子级和令牌级任务上实现最先进的性能,优于许多特定任务的体系结构。
  • BERT改进了11个NLP任务的技术水平。代码和预训练模型可在以下位置获得点我

2. 相关工作

训练通用语言表示形式已有很长的历史,我们将简要回顾本节中使用最广泛的方法。

2.1 无监督的基于特征的方法

数十年来,学习广泛适用的单词表示法一直是研究的活跃领域,包括非神经(Brown等,1992; Ando和Zhang,2005; Blitzer等,2006)和神经(Mikolov等,2013; Pennington等人,2014)方法。预先训练的词嵌入是现代NLP系统不可或缺的一部分,与从头开始学习的嵌入相比有显着改进(Turian等,2010)。为了预训练单词嵌入向量,已经使用了从左到右的语言建模目标(Mnih和Hinton,2009),以及在左右上下文中区分正确单词和错误单词的目标(Mikolov等,2013)。

这些方法已推广到更粗粒度,例如句子嵌入(Kiros等人,2015; Logeswaran和Lee,2018)或段落嵌入(Le和Mikolov,2014)。为了训练句子表示,先前的工作使用目标来对候选下一句进行排序(Jernite等人,2017年;Logeswaran和Lee,2018年),根据前一句的表示,从左到右的生成下一句词(Kiros等人,2015年),或者去噪自动编码器导出的目标(Hill等人,2016年)。

Elmo及其前身(Peters等人,2017,2018a)沿着不同的维度概括了传统的词嵌入研究。他们从左到右和从右到左的语言模型中提取上下文相关的特征。每个标记的上下文表示是从左到右和从右到左表示的串联。当将上下文单词嵌入与现有的特定于任务的架构相集成时,Elmo提高了几个主要NLP基准(Peters等人,2018a)的技术水平,包括问题回答(Rajpurkar等人,2016年)、情感分析(Socher等人,2013年)和命名实体识别(Tjong Kim Sang和De Meulder,2003年)。Melamud等人。(2016)提出了通过使用LSTM从左右上下文预测单个单词的任务来学习语境表征。与Elmo类似,他们的模型是基于特征的,不是深度双向的。Fedus等(2018)显示了cloze任务可用于提高文本生成模型的鲁棒性。

2.2 无监督微调方法

与基于特征的方法一样,第一种方法在这个方向上只使用来自未标记文本的预训练单词嵌入参数(Collobert和Weston,2008)。

最近,产生上下文标记表示的句子或文档编码器已经从未标记的文本中进行了预训练,并针对有监督的下游任务进行了微调(Dai和Le,2015年; Howard和Ruder,2018年; Radford等人,2018年)。这些方法的优点是几乎不需要从头学习参数。至少部分由于此优势,OpenAI GPT(Radford等人,2018)在GLUE基准测试的许多句子级任务上获得了目前的最新结果(Wang等人,2018a)。从左到右的语言建模和自动编码器目标已用于预训练此类模型(Howard和Ruder,2018年; Radford等人,2018年; Dai和Le,2015年)。

2.3 从监督数据中迁移学习

也有工作显示有效地从大数据集的监督任务中进行迁移学习,例如自然语言推理(Conneau等人,2017年)和机器翻译(McCann等人,2017年)。计算机视觉研究还证明了从大型预训练模型进行迁移学习的重要性,其中有效的方法是微调使用ImageNet进行预训练的模型(Deng等,2009;Y osinski等,2014)。


3. BERT

在这一部分中,我们将介绍BERT及其详细实现。在我们的框架中有两个步骤:预训练和微调。在预训练期间,通过不同的预训练任务对未标记的数据进行模型训练。为了进行微调,首先使用预训练的参数初始化BERT模型,然后使用下游任务中的标记数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使它们使用相同的预训练参数进行初始化。图1中的问答示例将作为本节的运行示例。

在这里插入图片描述

BERT的整体预训练和微调程序。除了输出层之外,在预训练和微调中都使用相同的体系结构。对于不同的下游任务,可以使用相同的预训练的模型参数来初始化模型。在微调过程中,所有参数都会进行微调。[CLS]是在每个输入示例前添加的特殊符号,[SEP]是特殊的分隔符标记(例如,分隔问题/答案)。

BERT的一个显著特点是其跨不同任务的统一架构。预先训练的体系结构和最终的下游体系结构之间的差别很小。

模型结构BERT的模型架构是多层双向变换器编码器,基于V aswani等人描述的原始实现,(2017)并在tensor2tensor库中发布1。因为使用Transformers已变得很普遍,并且我们的实现几乎与原始实现相同,所以我们将省略对模型体系结构的详尽背景说明,并向读者介绍Vaswani等(2017)以及出色的指南,例如“带注释的变换器”2

在这项工作中,我们将层数(既变换器块)表示为 L L L,隐藏大小表示为 H H H,自注意力头的数量表示为 A A A。我们主要报告两种模型尺寸的结果: B E R T B A S E ( L = 12 , H = 768 , A = 12 , T o t a l P a r a m e t e r s = 110 M ) BERT_{BASE}(L=12,H=768,A=12,Total Parameters=110M) BERTBASE(L=12,H=768,A=12,TotalParameters=110M) B E R T L A R G E ( L = 24 , H = 1024 , A = 16 , T o t a l P a r a m e t e r s = 340 M ) BERT_{LARGE}(L=24,H=1024,A=16,Total Parameters=340M) BERTLARGE(L=24,H=1024,A=16,TotalParameters=340M)

为了进行比较, B E R T B A S E BERT_{BASE} BERTBASE选择与OpenAI GPT具有相同的模型大小。但是,至关重要的是,BERT变换器使用双向自我关注,而GPT变换器使用受限的自我关注,其中每个令牌只能关注其左侧的上下文。(我们注意到在文献中双向变压器通常被称为“变压器编码器”,而仅左上下文的版本被称为“变压器解码器”,因为它可以用于文本生成。)

输入/输出表示为了使BERT处理各种下游任务,我们的输入表示能够明确地在一个令牌序列中表示单个句子和一对句子(例如<Question,Answer>)。
在整个工作中,“句子”可以是任意连续文本,而不是实际的语言句子。“序列”是指对BERT的输入令牌序列,它可以是单个句子或打包在一起的两个句子。

我们使用有30000个标记词汇表的WordPiece嵌入(Wu et al。,2016)。
每个序列的第一个标记始终是特殊分类标记([CLS])。与此标记对应的最终隐藏状态用作分类任务的聚合序列表示。
句子对打包在一起形成单个序列。我们通过两种方式区分句子。首先,我们使用特殊标记([SEP])将它们分开。
其次,我们给每个记号添加一个学习过的嵌入,表明它是属于句子A还是句子B。如图1所示,
我们将输入嵌入表示为 E E E,将特殊标记[CLS]的最终隐藏向量表示为 C ∈ R H C\in \mathbb{R}^H CRH,第 i t h i^{th} ith输入
标记的最终隐藏状态向量表示为 T i ∈ R H T_i \in \mathbb{R}^H TiRH

对于给定的标记,其输入表示形式是通过将相应的标记,段和位置嵌入求和来构造的。
这种结构的可视化效果如图2所示。

在这里插入图片描述

BERT输入表示。输入嵌入是标记嵌入、段嵌入和位置嵌入的总和。

3.1 预训练BERT

与彼得斯等(2018a)和Radford等(2018)不同,我们没有使用传统的从左到右或从右到左的语言模型来预训练BERT。
取而代之的是,我们使用本节中描述的两个无监督任务来预先训练Bert。此步骤如图1的左侧所示。

任务1:屏蔽LM

直观地说,我们有理由相信,深层双向模型比从左到右的模型或从左到右的浅层串联模型都要强大得多。
不幸的是,标准条件语言模型只能从左到右或从右到左进行训练,由于双向条件将允许每个单词间接地“看到自己”,所以该模型可以在多层结构中轻松地预测目标单词上下文。
为了训练深度双向表示,我们简单地随机掩蔽一定百分比的输入标记,然后预测这些被掩蔽的标记。
我们将这一过程称为“masked LM”(MLM),尽管在文献中它通常被称为完形填空任务(Taylor,1953)。
在这种情况下,与掩码标记相对应的最终隐藏向量会像在标准LM中一样被馈送到词汇表上的输出softmax中。
在我们的所有实验中,我们随机掩蔽每个序列中所有WordPiess标记的15%。
与降噪自动编码器相反(Vincent等,2008),我们只预测被屏蔽的单词,而不重构整个输入。
尽管这可以使我们获得双向的预训练模型,但缺点是我们在预训练和微调之间造成了不匹配,
因为[MASK]标记在微调过程中不会出现。为了减轻这种情况,
我们并不总是用实际的[MASK]标记替换“masked”的单词。训练数据生成器随机选择15%的标记位置用于预测。
如果选择第i个标记,(1)80%的概率使用[MASK]标记;(2)10%的概率使用随机标记;
(3)10%的概率使用原标记。然后,将使用 T i T_i Ti来预测具有交叉熵损失的原始标记。我们在附录C.2中比较了此过程的变体。

任务2:下一句预测(NSP)

许多重要的下游任务,如问答(QA)和自然语言推理(NLI),都是基于理解两个句子之间的关系,而不是通过语言建模直接捕捉到的。
为了训练一个理解句子关系的模型,我们预先训练了一个二值化的下一句预测任务,该任务可以从任何单语语料库中简单地生成。
具体地说,当为每个预训练示例选择句子A和B时,B有50%的概率是A之后的实际下一句(标记为IsNext),另外
50% B是来自语料库的随机句子(标记为NotNext)。如图1所示, C C C用于下一句预测(NSP)。
尽管它很简单,但我们在5.1节中演示了针对此任务的预训练对QA和NLI都非常有益。(向量C没有微调就不是有意义的句子表示,因为它是用NSP训练的。)
NSP任务与Jernite等(2017)和Logeswaran and Lee等(2018)使用的表示学习目标密切相关
但是,在先前的工作中,只有句子嵌入被传输到下游任务,其中BERT传输所有参数以初始化最终任务模型参数。

预训练数据
预训练过程很大程度上遵循了有关语言模型预训练的现有文献。
对于预训练语料库,我们使用BooksCorpus(8亿字)(朱等人,2015年)和英文维基百科(25亿字)。
对于维基百科,我们只提取文本段落,而忽略列表、表格和标题。为了提取长的连续序列,使用文档级语料库而不是诸如Billion Word Benchmark(Chelba等人,2013)之类的经过随机打乱的句子级语料库至关重要。

3.2 微调BERT

微调非常简单,因为Transformer中的自我关注机制允许BERT通过交换适当的输入和输出来建模许多下游任务(无论是单个文本还是文本对)。
对于涉及文本对的应用,一种常见的模式是在应用双向交叉注意之前对文本对进行独立编码,例如Parikh等人(2016);Seo等人(2017年)。
BERT而是使用自我注意机制来统一这两个阶段,因为使用自我注意对连接的文本对进行编码实际上包括了两个句子之间的双向交叉注意。
对于每个任务,我们只需将特定于任务的输入和输出插入BERT,并端对端微调所有参数。在输入时,来自预训练的
句子A和句子B类似于(1)释义中的句子对;(2)蕴涵中的假设-前提对;(3)问题回答中的问题-段落对;
(4)文本分类或序列标注中的退化文本- ∅ \varnothing 对。在输出处,标记表示被馈送到标记级任务的输出层,
诸如序列标记或问题回答,并且[CLS]表示被馈送到输出层用于分类,诸如蕴涵或情感分析。与预训练培训前相比,
微调的成本相对较低。从完全相同的预先训练模型开始,论文中的所有结果在单个云TPU上最多可以在1小时内复制,
在GPU上最多可以在几个小时内复制。

我们在第4节的相应小节中描述对于特定任务的详细信息。更多详细信息,请参见附录A.5。


4. 实验

在本节中,我们将介绍11个NLP任务的BERT微调结果。

4.1 GLUE

通用语言理解评估(GLUE)基准(Wang等,2018a)是各种自然语言理解任务的集合。GLUE数据集的详细说明包含在附录B.1中。

为了对GLUE进行微调,我们按照第3节中的描述表示输入序列(针对单个句子或句子对),
并使用与第一个输入标记([CLS])相对应的最终隐藏向量 C ∈ R H C\in \mathbb{R}^H CRH作为聚合表示。
在微调期间引入的唯一新参数是分类层权重 W ∈ R K × H W\in \mathbb{R}^{K \times H} WRK×H,其中K是标签数。
我们用 C C C W W W计算标准分类损失,既 l o g ( S o f t m a x ( C W T ) ) log(Softmax(CW^T)) log(Softmax(CWT))

对于所有GLUE任务,我们使用32的批处理大小并针对数据进行3个epochs的微调。对于每个任务,我们在开发集上选择最佳的微调学习率(在5e-5、4e-5、3e-5和2e-5中)。
另外,对于 B E R T L A R G E BERT_{LARGE} BERTLARGE,我们发现微调有时在小型数据集上不稳定,因此我们进行了几次随机重启,并在Dev集上选择了最佳模型。
对于随机重新启动,我们使用相同的预训练的检查点,但是执行不同的微调数据变换和分类器层初始化。

结果见表1。

在这里插入图片描述

表1:由评估服务器(https://gluebenchmark.com/leaderboard)评分的GLUE测试结果。
每个任务下面的数字表示训练实例的数量。“平均”列与官方GLUE分数稍有不同,因为我们排除了有问题的WNLI集。
BERT和OpenAI GPT是单一模型,单一任务。QQP和MRPC报告F1得分,STS-B报告Spearman相关性,其他任务报告准确性得分。
我们排除了使用BERT作为其组成部分之一的项。

B E R T B A S E BERT_{BASE} BERTBASE B E R T L A R G E BERT_{LARGE} BERTLARGE在所有任务上都比所有系统表现出色,分别获得4.5%和7.0%。
注意,除了注意掩盖之外, B E R T B A S E BERT_{BASE} BERTBASE和OpenAI GPT在模型架构方面几乎相同。对于最大且报告最广的GLUE任务MNLI,
BERT获得了4.6%的绝对精度提高。在官方的GLUEleaderboard上,与OpenAI GPT相比, B E R T L A R G E BERT_{LARGE} BERTLARGE的得分为80.5,而截至写作之日,它的得分为72.8。

我们发现,在所有任务中,尤其是训练数据很少的任务, B E R T L A R G E BERT_{LARGE} BERTLARGE的性能明显优于 B E R T B A S E BERT_{BASE} BERTBASE
模型大小的影响在5.2节中进行了更深入的探讨。

4.2 SQuAD v1.1

斯坦福问答数据集(SQuAD v1.1)是由10万对众包问题/答案对组成的集合(Rajpurkar et al., 2016)。
给定一个问题和Wikipedia中包含答案的段落,任务是预测段落中答案的文本范围。

如图1所示,在问题解答任务中,我们将输入的问题和段落表示为单个打包序列,
问题使用 A A A嵌入,而段落使用 B B B嵌入。
在微调过程中,我们仅引入起始向量 S ∈ R H S\in \mathbb{R}^H SRH,结束向量 E ∈ R H E\in \mathbb{R}^H ERH
单词 i i i作为答案跨度开始的概率被计算为 T i T_i Ti S S S之间的点积,
然后是段落中所有单词的softmax: P i = e S ⋅ T i ∑ j e S ⋅ T j P_i=\frac{e^{S\cdot T_i}}{\sum_j{e^{S\cdot T_j}}} Pi=jeSTjeSTi
类似的公式用于回答跨度的末端。从位置 i i i到位置 j j j的候选跨度的分数
定义为 S ⋅ T i + E ⋅ T j S\cdot T_i +E\cdot T_j STi+ETj,并且将 j ≥ i j \geq i ji的最大得分用作预测。
训练目标是正确的起点和终点位置的对数似然率的总和。我们进行了3个epoch的微调,学习速率为5e-5,批处理大小为32。

表2显示了排行榜中排名靠前的条目以及排名靠前的系统的结果(Seo等人,2017; Clark and Gardner,2018; Peters等人,2018a; Hu等人,2018)。

在这里插入图片描述

SQuAD 1.1结果。BERT集成是使用不同的预训练检查点和微调种子的7x系统。

SQuAD排行榜的最高结果没有可用的最新公共系统描述,
可以在训练他们的系统时使用任何公共数据。因此,我们先在TriviaQA上进行微调(Joshi等人,2017),然后在SQuAD上进行微调,
然后在系统中使用适度的数据增强。我们最好的表现系统在整体表现上领先+1.5 F1,在整体表现上优于+1.3 F1。
事实上,我们的单个BERT模型在F1评分方面要优于顶级集成系统。
如果没有TriviaQA的微调数据,我们只会损失0.1-0.4 F1,仍然超出
形成现有的所有系统。

4.3 SQuAD v2.0

SQuAD 2.0任务通过允许在提供的段落中不存在简短答案的可能性扩展了SQuAD 1.1问题定义,
从而使问题更加实际。

我们使用一种简单的方法来扩展SQuAD v1.1 BERT模型以完成此任务。我们将没有答案的问题视为答案范围以[CLS]标记开头和结尾。起始和终止答案跨度位置的概率空间已扩展为包括[CLS]标记的位置。为了进行预测,我们比较了无答案范围的得分: S n u l l = S ⋅ C + E ⋅ C S_{null}=S\cdot C + E\cdot C Snull=SC+EC与最佳非空跨度的分数进行比较: s i ^ , j = m a x j ≥ i S ⋅ T i + E ⋅ T j s_{\hat{i},j}=max_{j\geq i}S\cdot T_i+E\cdot T_j si^,j=maxjiSTi+ETj。当 s i ^ , j > s n u l l + τ s_{\hat{i},j}>s_{null}+\tau si^,j>snull+τ时,我们预测一个非空答案,其中在dev集上选择阈值 τ \tau τ以最大化F1。我们没有在这个模型中使用TriviaQA数据。我们进行了2个epoch的微调,学习速率为5e-5,批处理大小为48。

表3中显示了与先前排行榜条目和排名靠前的工作(Sun等人,2018; Wang等人,2018b)相比的结果,其中不包括使用BERT作为其组件之一的系统。我们观察到一个 + 5.1的 F1改进超过以前的最佳系统。

在这里插入图片描述

4.4 SWAG

具有对抗性生成的情况(SW AG)数据集包含11.3万个句子对完成示例,这些示例评估基础的常识推理(Zellers等人,2018年)。
给定一个句子,任务是在四个选择中选择最合理的延续。

在对SWIG数据集进行微调时,我们构建了四个输入序列,每个序列都包含给定句子(句子A)和可能的延续(句子B)的连接。引入的唯一特定于任务的参数是一个向量,该向量与[CLS]标记表示 C C C的点积表示每个选择的分数,该分数使用Softmax层进行标准化。

我们以2e-5的学习率和16的批量大小对模型进行了3个epoch的微调。结果见表4。 B E R T L A R G E BERT_{LARGE} BERTLARGE超出了作者的基线ESIM+ELMo系统的+27.1%和OpenAI GPT的8.3%。

表4


5. Ablation Studies(消融研究)

在本节中,我们将对BERT的多个方面进行消融实验,以更好地了解它们的相对重要性。附加的消融研究可在附录C中找到。

5.1 预训练任务的效果

通过使用与 B E R T B A S E BERT_{BASE} BERTBASE完全相同的预训练数据,微调方案和超参数评估两个预训练目标,我们证明了BERT的深度双向性的重要性:

No NSP: masked LM”(MLM)进行训练但没有“下一个句子预测”(NSP)任务的双向模型。

LTR & No NSP: 使用标准的从左到右(LTR)LM(而不是MLM)训练的仅左上下文模型。左约束也应用于微调,因为删除它会引入预训练/微调不匹配,从而降低下游性能。此外,该模型无需NSP任务即可进行预训练。这可以直接与OpenAI GPT相提并论,但要使用更大的训练数据集,输入表示形式和微调方案。

我们首先研究NSP任务带来的影响。在表5中,我们显示删除NSP会严重损害QNLI,MNLI和SQuAD 1.1的性能。

在这里插入图片描述

使用 B E R T B A S E BERT_{BASE} BERTBASE体系结构消融预训练的任务。如果没有下一个句子预测任务,则会训练“无NSP”。“LTR & No NSP”被训练成一个从左到右的LM,没有下一个句子预测,就像OpenAI GPT。“+ BiLSTM”在微调期间在“LTR + No NSP”模型上添加一个随机初始化的BiLSTM。

接下来,我们通过比较“无NSP”与“ LTR和无NSP”来评估训练双向表示的影响。在所有任务上,LTR模型的性能都比MLM模型差,而MRPC和SQuAD的性能下降很大。

对于SQuAD,直观上很清楚,因为标记级别的隐藏状态没有右侧上下文,所以LTR模型在标记预测时的性能会很差。为了真诚地尝试加强LTR系统,我们在顶部添加了一个随机初始化的BiLSTM。这确实可以显着改善SQuAD上的结果,但结果仍然比预训练的双向模型的结果差很多。BiLSTM损害了GLUE任务的性能。

我们认识到,像ELMo一样,也有可能训练单独的LTR和RTL模型并将每个标记表示为两个模型的串联。但是:(a)但是这比单一的双向模型贵两倍; (b)对于QA这样的任务,这是不直观的,因为RTL模型将无法确定问题的答案; (c)这绝对不像深度双向模型那么强大,因为它可以在每一层使用左右上下文。

5.2 模型尺寸的影响

在本节中,我们探索模型大小对微调任务准确性的影响。我们训练了许多具有不同数量的层,隐藏单元和注意头的BERT模型,而其他方面则使用了与前面所述相同的超参数和训练过程。

表6中显示了选定的GLUE任务的结果。

在这里插入图片描述

在此表中,我们报告了5次随机微调重新启动后的平均Dev Set精度。我们可以看到,即使对于只有3,600个带标签的训练示例的MRPC,它与预训练任务也大不相同,较大的模型会导致所有四个数据集的准确性都得到严格提高。同样令人惊讶的是,我们能够在与现有文献相比已经相当大的模型上实现如此显着的改进。例如,V aswani等人探索了最大的变换器(2017)是(L = 6,H = 1024,A = 16),编码器的参数为100M,而我们在文献中发现的最大的变压器是(L = 64,H = 512,A = 2)和235M参数(Al-Rfou等人,2018)。相比之下, B E R T B A S E BERT_{BASE} BERTBASE包含110M参数, B E R T L A R G E BERT_{LARGE} BERTLARGE包含340M参数。

众所周知,增加模型的大小将导致对诸如机器翻译和语言建模之类的大规模任务的持续改进,表6所示的持久性训练数据的LM困惑证明了这一点。但是,我们认为,这是第一个有说服力的证明,只要模型已经过充分的预训练,按比例缩放到极端的模型大小也将导致非常小的规模任务的重大改进。Peters等人(2018b)对于将预训练的Bi-LM尺寸从两层增加到四层对下游任务的影响提出了不同的结果,Melamud等人(2016)提到将隐藏尺寸从200增大到600 帮助,但进一步增加到1,000并没有带来进一步的改善。这两项先前的工作都使用了一种基于特征的方法-我们假设,当模型直接在下游任务上微调,并且只使用非常少量的随机初始化的附加参数时,任务特定的模型即使在下游任务数据非常小的情况下,也可以从更大、更具表现力的预训练表示中受益。

5.3 基于特征的BERT方法

到目前为止提出的所有BERT结果都使用了微调方法,其中在预训练模型中添加了一个简单的分类层,并且在下游任务上共同对所有参数进行了微调。然而,基于特征的方法,其中固定的特征是从预先训练的模型中提取的,具有一定的优势。首先,并非所有任务都可以由Transformer编码器体系结构轻松表示,因此需要添加特定于任务的模型体系结构。其次,预先计算出训练数据的昂贵表示形式,然后在此表示形式之上使用较便宜的模型运行许多实验,这具有很大的计算优势。

在本节中,我们通过将BERT应用于CoNLL-2003命名实体识别(NER)任务来比较这两种方法(Tjong Kim Sang和De Meulder,2003年)。在BERT的输入中,我们使用了一个区分大小写的WordPiece模型,并且包括了数据提供的最大文档上下文。

按照标准惯例,我们将其公式化为标记任务,但在输出中不使用CRF层。我们使用第一个子标记的表示作为NER标签集上标记级别分类器的输入。

为了消除微调方法,我们通过从一个或多个层中提取激活来应用基于特征的方法,而无需微调BERT的任何参数。这些上下文嵌入用作分类层之前随机初始化的两层768维BiLSTM的输入。

结果列于表7。

在这里插入图片描述

B E R T L A R G E BERT_{LARGE} BERTLARGE用最先进的方法具有竞争力。效果最好的方法将来自预训练的Transformer的顶部四个隐藏层的标记表示连接起来,这仅比微调整个模型低0.3 F1。这表明BERT对于微调和基于特征的方法均有效。


6. 总结

由于使用语言模型进行了迁移学习,最近的经验改进表明,丰富的,无监督的预训练是许多语言理解系统不可或缺的一部分。
特别是,这些结果使即使是资源匮乏的任务也可以从深度单向体系结构中受益。我们的主要贡献是将这些发现进一步推广到深层次的双向体系结构,从而使相同的经过预训练的模型能够成功解决各种NLP任务。


A. BERT的其他详细信息

A.1 预训练任务说明

我们在下面提供了预训练任务的示例。

Masked LM and the Masking Procedure

假设未标记的句子是my dog is hairy在随机屏蔽过程中,我们选择了第4个标记(对应于hairy)我们的掩蔽过程可以通过以下内容进一步说明:

  • 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%)中,因此这似乎并不损害模型的语言理解能力。在C.2节中,我们评估了此过程的影响。

与标准语言模型训练相比,被掩盖的LM仅对每批次中15%的标记做出预测,这表明模型收敛可能需要更多的预训练步骤。在C.1节中,我们证明了MLM的收敛速度确实比左向右模型(预测每个标记)慢,但是MLM模型的经验改进远远超过了增加的训练成本。

Next Sentence Prediction

下一个句子预测任务可以在以下示例中进行说明。

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

A.2 预训练过程

为了生成每个训练输入序列,我们从语料库中抽取了两个跨度的文本,我们将它们称为“句子”,即使它们通常比单个句子长得多(但也可以更短)。第一个句子接收A嵌入,第二个句子接收B嵌入。B在50%的情况下是紧随A的实际下一个句子,而另外50%的情况是随机的句子,这是为“下一句预测”任务完成的。对它们进行采样,以使总长度≤512个标记。LM掩码是在WordPiess标记化之后应用的,掩码率统一为15%,并且不会特别考虑部分单词片段。我们使用256个序列(256个序列* 512个标记= 128,000个标记/批)的批大小进行1,000,000步的训练,这在33亿词库中大约是40个epoch。我们使用Adam的学习速率为1e-4,β1= 0.9,β2= 0.999,L2权重衰减为0.01,前10,000个步骤的学习速率预热以及学习速率的线性衰减。我们在所有层上使用0.1的丢失概率。在OpenAI GPT之后,我们使用Gelu激活(Hendrycks和Gimpel,2016)而不是标准relu。训练损失是均值掩蔽LM似然与均值下一句预测似然之和。对Pod配置中的4个Cloud TPU(总共16个TPU芯片)进行了 B E R T B A S E BERT_{BASE} BERTBASE的训练。在16个Cloud TPU(总共64个TPU芯片)上进行了 B E R T L A R G E BERT_{LARGE} BERTLARGE的训练。每次预训练需要4天才能完成。更长的序列是不成比例的昂贵,因为注意力与序列长度是平方的。为了加快实验的预训练速度,我们对序列长度为128的模型进行了90%的预训练。然后,我们训练序列512的其余10%的步骤来学习位置嵌入。

A.3 微调过程

为了进行微调,大多数模型超参数与预训练中的相同,除了批量大小,学习率和训练epoch数外。dropout概率始终保持在0.1。最佳超参数值因任务而异,但我们发现以下范围的可能值可以在所有任务中很好地工作:

  • Batch size: 16, 32
  • Learning rate (Adam): 5e-5, 3e-5, 2e-5
  • Number of epochs: 2, 3, 4

我们还观察到,与小数据集相比,大数据集(例如,100k+标记的训练示例)对超参数选择的敏感度要低得多。微调通常非常快,因此简单地对上述参数进行详尽的搜索并选择在开发集上执行得最好的模型是合理的。

A.4 BERT、ELMO和OpenAI GPT的比较

在这里,我们研究了最近流行的表示学习模型(包括ELMo,OpenAI GPT和BERT)的差异。图3直观地显示了模型体系结构之间的比较。请注意,除了体系结构差异之外,BERT和OpenAI GPT是微调方法,而ELMO是基于特征的方法。

在这里插入图片描述

预训练模型架构的差异。 BERT使用双向变换器。 OpenAI GPT使用从左到右的Transformer。ELMo使用经过独立训练的从左到右和从右到左的LSTM的串联来生成用于下游任务的功能。在这三个层中,只有BERT表示在所有层中都联合地受到左右上下文的制约。除了架构上的差异之外,BERT和OpenAI GPT是一种微调方法,而ELMo是一种基于特征的方法。

现有的与BERT最相似的预训练方法是OpenAI GPT,它在大型文本语料库上训练一个从左到右的转换器LM。实际上,BERT中的许多设计决策都是有意使其尽可能接近GPT,以便尽可能少地比较这两种方法。这项工作的核心论点是,第3.1节中提出的双向性和两个训练前任务占了经验改进的大部分,但我们注意到,BERT和GPT的训练方式还有其他几个不同之处:

  • GPT在BooksCorpus上训练(800M单词);BERT接受过8亿字的BooksCorpus和2500亿字的Wikipedia的训练。
  • GPT使用仅在微调时才引入的句子分隔符([SEP])和分类器标记([CLS]); BERT在预训练期间学习[SEP],[CLS]和句子A / B嵌入。
  • GPT接受了1M步的训练,批量大小为32,000个单词; BERT接受了1M步的训练,批量大小为128,000个单词。
  • 对于所有微调实验,GPT的学习率均为5e-5。 BERT选择特定于任务的微调学习率,该学习率在开发集上表现最佳。

为了隔离这些差异的影响,我们在5.1节中进行了消融实验,该实验表明,大多数改进实际上来自两个预训练任务以及它们实现的双向性。

A.5 对不同任务的微调说明

在图4中可以看到不同任务上BERT的微调。

在这里插入图片描述

我们的特定任务模型是通过将BERT与一个额外的输出层合并而形成的,因此需要从头开始学习最少的参数。在任务中,(a)和(b)是序列级任务,而(c)和(d)是标记级任务。在图中, E E E表示输入嵌入, T i T_i Ti表示标记 i i i的上下文表示,[CLS]是用于分类输出的特殊符号,[SEP]是用于分隔非连续标记序列的特殊符号。


B 详细的实验设置

B.1 GLUE基准实验的详细说明

表1中的GLUE结果是从https://gluebenchmark.com/leaderboard和https//blog.openai.com/language-unsupervised 获得的。
GLUE基准测试包括以下数据集,其描述最初在Wang等人中进行了概述(2018a):

MNLI 多体裁自然语言推理是一项大规模的众包蕴涵分类任务(Williams等人,2018年)。给定一对句子,目标是预测第二个句子相对于第一个句子是包含,矛盾还是中立的。

QQP Quora Question Pairs是一个二元分类任务,目标是确定在Quora上询问的两个问题在语义上是否等效(Chen等人,2018)。

QNLI Question Natural Language Inference是Stanford Question Answering数据集(Rajpurkar等,2016)的一个版本,该数据集已转换为二进制分类任务(Wang等,2018a)。正例是包含正确答案的(问题,句子)对,否定例是来自同一段落的不包含答案的(问题,句子)。

SST-2 斯坦福情感树库是一种二进制的单句分类任务,包括从电影评论中提取的句子以及带有其情感的人类注释(Socher等人,2013)。

CoLA 语言可接受性语料库是一个二进制的单句分类任务,目标是预测英语句子在语言上是否“可以接受”(Warstadt等人,2018)。

STS-B 语义文本相似性基准是从新闻标题和其他来源中提取的句子对的集合(Cer等人,2017)。它们用1到5的分数来注释,表示这两个句子在语义上有多相似。

MRPC Microsoft Research Paraphrase语料库由自动从在线新闻源中提取的句子对组成,并带有人工注释,以说明句子中的句子在语义上是否等效(Dolan和Brockett,2005年)。

RTE 识别文本蕴含是类似于MNLI的二进制蕴含任务,但是训练数据少得多(Bentivogli等,2009)。

WNLI Winograd NLI是一个小的自然语言推理数据集(Levesque等,2011)。GLUE网页指出,此数据集的构建存在问题,并且已提交给GLUE的每个受过训练的系统的表现均不及预测多数类别的65.1基线准确性。因此,我们排除此设置对OpenAI GPT是公平的。对于我们的GLUE提交,我们总是预测到多数类别。


C 附加消融实验

C.1 训练步骤数的影响

图5给出了从经过k步预训练的检查点进行微调后的MNLI Dev精度。

在这里插入图片描述

这使我们能够回答以下问题:

  1. 问:BERT真的需要大量的预训练(128,000个单词/批* 1,000,000步)来实现很高的微调精度吗?

    答案:是的,相对于500k步, B E R T B A S E BERT_{BASE} BERTBASE以1M步训练时,其MNLI的精度提高了近1.0%。

  2. 问题:由于在每批而不是每个单词中只预测了15%的单词,因此MLM预训练的收敛速度是否比LTR预训练慢?

    答:MLM模型的收敛速度确实比LTR模型慢。但是,就绝对精度而言,MLM模型几乎立即开始胜过LTR模型。

C.2 不同掩蔽方式的消融

在3.1节中,我们提到,当使用掩蔽语言模型(MLM)目标进行预训练时,BERT使用混合策略来掩蔽目标标记。下面是一项消融研究,以评估不同掩蔽策略的效果。
请注意,掩蔽策略的目的是减少预训练和微调之间的失配,因为在微调阶段不会出现[MASK]符号。我们报告了MNLI和NER的Dev集结果。对于NER,我们同时报告了微调方法和基于特征的方法,因为我们期望基于特征的方法的失配将被放大,因为模型将没有机会调整表示形式。

结果列于表8。

在这里插入图片描述

在表中,MASK表示我们用MLM的[MASK]符号替换了目标标记; SAME表示我们按原样保留目标标记; RND表示我们将目标标记替换为另一个随机标记。

表格左侧的数字表示在MLM预训练期间使用的特定策略的概率(BERT使用80%,10%,10%)。本文的右侧部分代表开发集的结果。对于基于特征的方法,我们将BERT的最后4层连接为特征,这在5.3节中被证明是最好的方法。

从表中可以看出,微调对于不同的屏蔽策略具有惊人的鲁棒性。但是,正如预期的那样,将基于特征的方法应用于NER时仅使用MASK策略是有问题的。有趣的是,仅使用RND策略的效果也比我们的策略差很多。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值