BERT:Pre-training of Deep Bidirectional Transformers forLanguage Understanding

个人觉着BERT是一篇读起来很爽的论文

摘要

我们引入了一种新的语言表示模型BERT,它代表Bidirectional Encoder Representations from Transformers。与最近的语言表示模型不同(Peters et al., 2018a;Radford et al., 2018), BERT旨在通过在所有层中对左右上下文进行联合条件反射,从未标记的文本中预训练深度双向表示。因此,预训练的BERT模型可以通过一个额外的输出层进行微调,从而为广泛的任务(如问答和语言推理)创建最先进的模型,而无需对特定于任务的架构进行大量修改。

BERT在概念简单,实操强大。它在11个自然语言处理任务上获得了新的最先进的结果,包括将GLUE得分提高到80.5%(绝对提高7.7%),将多项精度提高到86.7%(绝对提高4.6%),SQuAD v1.1问答测试F1至93.2(1.5分绝对改进),SQuAD v2.0测试F1至83.1(5.1分绝对改进)。

1.介绍

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

将预训练的语言表示应用于下游任务有两种现有策略:基于特征和微调。基于特征的方法,如ELMo (Peters等人,2018a),使用特定于任务的架构,其中包括预训练的表示作为附加特征。微调方法,如生成式预训练转换器(OpenAI GPT) (Radford等人,2018),引入了最小的任务特定参数,并通过简单地微调所有预训练参数来对下游任务进行训练。这两种方法在预训练过程中具有相同的目标函数,它们使用单向语言模型来学习一般的语言表示。

我们认为当前的技术限制了预训练表征的力量,特别是对于微调方法。主要的限制是标准语言模型是单向的,这限制了在预训练期间可以使用的体系结构的选择。例如,在OpenAI GPT中,作者使用由左到右的架构,其中每个分词只能关注Transformer自关注层中的前一个分词(Vaswani et al., 2017)。这种限制对于句子级任务来说是次优的,并且在将基于调优的方法应用于诸如问答之类的分词级任务时可能非常有害,在这些任务中,结合两个方向的上下文是至关重要的

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

•我们证明了双向预训练对语言表示的重要性。与Radford等人(2018)使用单向语言模型进行预训练不同,BERT使用掩模语言模型来实现预训练的深度双向表示。这也与Peters等人(2018a)形成对比,后者使用独立训练的从左到右和从右到左LMs的浅连接。

我们表明,预训练的表示减少了对许多高度工程化的任务特定架构的需求。BERT是第一个基于调优的表示模型,它在大量句子级和记号级任务上实现了最先进的性能,优于许多特定于任务的架构。

BERT在11个NLP任务中推进了最先进的技术。代码和预训练模型可在https://github.com/ google-research/bert上获得

2. 相关工作

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

2.1 基于无监督特征的方法

几十年来,学习广泛适用的单词表示一直是一个活跃的研究领域,包括非神经网络(Brown et al., 1992;安藤和张,2005;Blitzer等人,2006)和神经网络 (Mikolov等人,2013;Pennington et al., 2014)方法。预训练词嵌入是现代NLP系统的一个组成部分,与从头开始学习的嵌入相比,它提供了显著的改进(Turian et al., 2010)。为了预训练词嵌入向量,使用了从左到右的语言建模目标(Mnih和Hinton, 2009),以及在左右上下文中区分正确和不正确单词的目标(Mikolov et al., 2013)。

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

ELMo及其前身(Peters et al., 2017,2018a)将传统的词嵌入研究从不同的维度进行了概括。他们从从左到右和从右到左的语言模型中提取上下文敏感的特征。每个标记的上下文表示是从左到右和从右到左表示的连接。当将上下文词嵌入与现有的任务特定架构集成时,ELMo在几个主要的NLP基准(Peters等人,2018a)中推进了最先进的技术,包括问答(Rajpurkar等人,2016)、情感分析(Socher等人,2013)和命名实体识别(Tjong Kim Sang和De Meulder, 2003)。Melamud等人(2016)提出通过使用lstm从左右上下文中预测单个单词的任务来学习上下文表示。与ELMo类似,他们的模型是基于特征的,而不是深度双向的。Fedus等人(2018)表明,完形填空任务可以用来提高文本生成模型的鲁棒性。

2.2 基于无监督微调的方法

与基于特征的方法一样,第一种方法只从未标记的文本中预训练词嵌入参数(Collobert和Weston, 2008)。最近,产生上下文分词表示的句子或文档编码器已经从未标记的文本中进行了预训练,并针对监督的下游任务进行了微调(Dai和Le, 2015;Howard and Ruder, 2018;Radford et al., 2018)。这些方法的优点是很少有参数需要从头学习。至少部分由于这一优势,OpenAI GPT (Radford et al., 2018)在GLUE基准的许多句子级任务上取得了以前最先进的结果(Wang et al., 2018a)。从左到右语言建模和自编码器目标已用于预训练此类模型(Howard and Ruder, 2018;Radford et al., 2018;Dai and Le, 2015)。

2.3 从监督数据迁移学习

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

3 BERT

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

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

BERT的模型架构是一个多层双向Transformer编码器,基于Vaswani等人(2017)描述的原始实现,并在tensor2tensor(https://github.com/tensorflow/tensor2tensor)库中发布由于Transformer的使用已经变得很普遍,而且我们的实现几乎与原始版本相同,因此我们将省略模型体系结构的详尽背景描述,并将读者推荐给Vaswani等人(2017)以及优秀的指南,例如“The Annotated Transformer.”(The Annotated Transformer)。

在这项工作中,我们表示层数(即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解码器”,可以用于文本生成。)。

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

我们使用WordPiece嵌入(Wu et al., 2016)和30,000个标记词汇表。每个序列的第一个分词总是一个特殊的分类分词([CLS])。与此对应的分词最终隐藏状态用作分类任务的聚合序列表示句子对被打包成一个单一的序列。我们用两种方法区分句子。首先,我们用一个特殊的分词([SEP])将它们分开。其次,我们为每一个分词添加一个学习嵌入,表明它属于句子a还是句子b。如图1所示,我们将输入嵌入表示为E特殊[CLS]分词的最终隐藏向量表示为C属于H维向量空间,第i个输入分词的最终隐藏向量表示为Ti属于H维向量空间。

对于给定的分词,其输入表示是通过将相应的分词、段和位置嵌入相加来构建的。图2显示了该结构的可视化。

3.1 预训练BERT

与Peters等人(2018a)和Radford等人(2018)不同,我们不使用传统的从左到右或从右到左的语言模型来预训练BERT。相反,我们使用本节中描述的两个无监督任务来预训练BERT。此步骤如图1的左侧所示。

3.1.1 Masked LM

直观地,我们有理由相信深度双向模型比从左到右的模型或从左到右和从右到左的浅连接模型更强大。不幸的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向约束(bidirec-
tional conditioning)要求每个单词间接“看到自己”,并且该模型可以在多层上下文中轻松预测目标单词。

为了训练深度双向表示,我们只是随机屏蔽一定比例的输入分词,然后预测这些被屏蔽的分词。我们将这一过程称为“Masked LM”(MLM),尽管在文献中它通常被称为完形填空任务(Cloze task)(Taylor, 1953)。在这种情况下,与掩码分词相对应的最终隐藏向量被输入到词汇表上的输出softmax中,就像在标准LM中一样。在我们所有的实验中,我们随机屏蔽了每个序列中15%的WordPiece分词。与去噪自编码器(Vincent et al., 2008)相比,我们只预测被屏蔽的单词,而不是重建整个输入。

3.1.2 Next Sentence Prediction (NSP)

许多重要的下游任务,如问答(QA)和自然语言推理(NLI),都是基于理解两个句子之间的关系,这是语言建模无法直接捕获的。为了训练一个理解句子关系的模型,我们对一个二值化的NSP预测任务进行了预训练,该任务可以从任何单语言的语料库中轻松生成。具体来说,当为每个预训练示例选择句子A和B时,50%的时间B是A之后的下一个句子(标记为IsNext), 50%的时间B是语料库中的随机句子(标记为NotNext)。如图1所示,C用于下一个句子预测(NSP)尽管它很简单,但我们在5.1节中演示了针对该任务的预训练对QA和NLI都非常有益。(最终NSP任务的正确率为97%-98%)(向量C没有经过微调就不是有意义的句子表示,因为它是用NSP训练的。)

NSP任务与Jernite等人(2017)和Logeswaran和Lee(2018)中使用的表征学习目标密切相关。然而,在之前的工作中,只有句子嵌入被转移到下游任务中,BERT将所有参数转移到下游任务中以初始化任务端模型参数

预训练过程在很大程度上遵循了现有的语言模型预训练文献。对于预训练语料库,我们使用BooksCorpus(800万字)(Zhu et al., 2015)和英语维基百科(2500万字)。对于维基百科,我们只提取文本段落,而忽略列表、表格和标题。为了提取长连续序列,使用文档级语料库而不是像十亿词基准(Chelba et al., 2013)这样的打乱句子级语料库是至关重要的。

3.2 Fine-tuning BERT

微调是直接的,因为Transformer中的自注意机制允许BERT对许多下游任务建模——通过更换合适的输入输出,涉及单个文本或文本对。对于涉及文本对的应用方法,常见的模式是在应用双向交叉注意之前对文本对进行独立编码,如Parikh等人(2016);Seo等人(2017)。BERT使用自注意机制来统一这两个阶段,随着编码利用两个句子之间的双向交叉注意,把文本对和注意力机制有效地联系到一起。

对于每个任务,我们只需将特定于任务的输入和输出插入到BERT中,并对所有参数进行端到端的微调。在输入端,预训练的句子A和句子B类似于(1)释义中的句子对,(2)蕴涵中的假设-前提对,(3)问答中的问题-段落对,(4)文本分类或序列标注中的退化文本-∅对。在输出端,分词表示被输入输出层用于分词级任务,如序列标记或问题回答,而[CLS]表示被输入输出层用于分类,如蕴意或情感分析。

与预训练相比,微调相对便宜。从完全相同的预训练模型开始,论文中的所有结果可以在单个Cloud TPU上最多1小时内复制,或者在GPU上复制几个小时。(例如,BERT SQuAD模型可以在单个Cloud TPU上训练大约30分钟,以达到Dev F1分数的91.0%。)我们将在第4节的相应小节中描述特定于任务的细节。详情见附录A.5。

4 试验

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

4.1 GLUE

GLUE基准数据集介绍_glue数据集-CSDN博客

通用语言理解评估(GLUE)基准(Wang et al., 2018a)是多种自然语言理解任务的集合。GLUE数据集的详细描述见附录B.1

为了对GLUE进行微调,我们按照第3节的描述表示输入序列(单句或句子对),并使用与第一个输入分词([CLS])对应的最终隐藏向量C(C属于H维向量空间)作为聚合表示。在微调过程中引入的唯一新参数是分类层权值W(W属于H*K维向量空间),其中k为标签的数量。我们用C和W计算一个标准的分类损失,log(softmax(C*W的转置))。(https://gluebenchmark.com/faq)

我们使用32个批处理大小,并对所有GLUE任务的数据进行3次微调。对于每个任务,我们在Dev集中选择了最佳的微调学习率(在5e-5、4e-5、3e-5和2e-5之间)。此外,对于BERT(LARGE),我们发现微调有时在小数据集上不稳定,所以我们运行了几次随机重启并选择了Dev集上的最佳模型。对于随机重启,我们使用相同的预训练检查点,但执行不同的打乱微调数据和分类器层初始化

结果如表1所示。BERTBASE和BERTLARGE在所有任务上的表现都大大超过了所有系统,与现有技术相比,平均精度分别提高了4.5%和7.0%。注意,BERTBASE和OpenAI GPT除了注意屏蔽之外,在模型架构方面几乎是相同的。对于最大和最广泛报道的GLUE任务MNLI, BERT获得了4.6%的绝对精度提高。在GLUE的官方排行榜上,BERTLARGE获得了80.5分,而OpenAI GPT在撰写本文时获得了72.8分。


表1:GLUE测试结果,由评估服务器(https://gluebenchmark.com/leaderboard)评分。每个任务下面的数字表示训练样例的数量。“平均”一栏与GLUE的官方得分略有不同,因为我们排除了有问题的WNLI集BERT和OpenAI GPT是单模型、单任务。QQP和MRPC报告F1分数,STS-B报告Spearman相关性,其他任务报告准确性分数。我们排除了使用BERT作为其组件之一的条目。(GLUE数据集分布不包括Test标签,我们只为BERTBASE和BERTLARGE分别提交了一个GLUE评估服务器。)

我们发现BERT(LARGE)在所有任务上都明显优于BERT(BASE),特别是那些训练数据很少的任务。模型大小的影响将在5.2节中进行更深入的探讨。

4.2 SQuAD v1.1

SQuAD —— text span答案类型开创者 - 知乎 (zhihu.com)

BERT微调(SQuAD v1.1)-CSDN博客

斯坦福问答数据集(SQuAD v1.1)是10万个众包问题/答案对的集合(Rajpurkar et al., 2016)。给定一个问题和一段维基百科中包含答案的文章,任务是预测文章中答案的文本跨度。(以文章原文中的某小一段文字来作为问题的答案)

如图1所示,在问答任务中,我们将输入的问题和文章表示为单个打包序列,其中问题使用A嵌入,文章使用B嵌入。我们在微调时只引入一个起始向量S(属于H维向量空间)和一个结束向量E(属于H维向量空间)。单词i作为答案区间开始的概率是通过Ti和S之间的点积计算的,然后是段落中所有单词的softmax。

类似的公式用于回答区间的末尾。从位置i到位置j的候选跨度的得分定义为S·Ti + E·Tj,并以j≥i的最大得分跨度作为预测。训练目标是正确起始位置和结束位置的对数似然之和。我们微调了3个epoch,学习率为5e-5,批大小为32。

表2显示了排行榜的顶级条目以及来自顶级发布系统的结果(Seo et al., 2017;Clark and Gardner, 2018;Peters et al., 2018a;Hu等人,2018)。来自SQuAD排行榜的顶级结果没有最新的公共系统描述,(QANet在Yu等人(2018)中进行了描述,但该系统在发表后得到了实质性改进。)并且允许在训练他们的系统时使用任何公共数据。因此,在对SQuAD进行微调之前,我们首先对TriviaQA进行微调(Joshi等人,2017),从而在系统中使用适度的数据增强。

我们表现最好的系统在综合性能上比顶级排行榜系统高出1.5 F1,作为单一系统高出1.3 F1。事实上,我们的单一BERT模型在F1得分方面优于顶级集成系统。如果没有TriviaQA微调数据,我们只会损失0.1-0.4个F1,但仍然比所有现有系统表现出色。(我们使用的TriviaQA数据由来自TriviaQA- wiki的段落组成,这些段落由文档中的前400个分词组成,其中至少包含所提供的可能答案中的一个。)

4.3 SQuAD v2.0

SQuAD 2.0任务扩展了SQuAD 1.1的问题定义,允许在所提供的段落中不存在简短答案的可能性,使问题更加现实。我们使用一种简单的方法来扩展SQuAD v1.1 BERT模型来完成此任务。我们将没有答案的问题视为具有以[CLS]令牌开始和结束的答案跨度的问题开始和结束回答跨度位置的概率空间被扩展为包括[CLS]令牌的位置。对于预测,我们将无答案跨度的得分:snull = S·C + E·C与最佳非零跨度S·i,j = maxj≥iS·Ti + E·Tj的得分进行比较。我们预测当δ si,j > snull + τ时非空答案,其中在开发集上选择阈值τ以使F1最大化(不知道咋选的)。我们没有在这个模型中使用TriviaQA的数据。我们微调了2个epoch,学习率为5e-5,批大小为48

将结果与之前的排行榜条目和顶级发表作品进行比较(Sun et al., 2018;Wang等人,2018b)如表3所示,不包括使用BERT作为其组件之一的系统。与之前的最佳系统相比,我们观察到+5.1 F1的改进。

4.4 SWAG

SWAG Dataset | Papers With Code

生成对抗情景(The Situations With Adversarial Generations,SWAG)数据集包含113k个句子对补全示例,用于评估基于常识的推理(Zellers等人,2018)。给定一个句子,任务是从四个选项中选出最合理的延续。

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

我们对模型进行了3次微调,学习率为25 -5,批量大小为16。结果如表4所示。BERT(LARGE)比作者的基线ESIM+ELMo系统高27.1%,比OpenAI GPT系统高8.3%。

5 消融试验(Ablation Studies)

在本节中,我们对BERT的许多方面进行消融实验,以便更好地理解它们的相对重要性。消融研究见附录C。

5.1 预训练任务的影响

我们通过使用与BERT(BASE)完全相同的预训练数据、微调方案和超参数来评估两个预训练目标,证明了BERT深度双向性的重要性:

NP NSP:训练方式只使用MLM,不使用NSP

LTR&No NSP:仅左边上文的模型,使用标准的从左到右(LTR) LM而不是MLM训练。在微调时也使用只使用左边上文的约束,因为去除约束会导致预训练/微调不匹配,从而降低下游性能。此外,该模型预训练时也不包含NSP任务。在使用比我们更大的训练数据集、我们的相同输入表示和我们相同的微调方案下,将将该模型与OpenAI GPT相比较。

我们首先考察NSP任务带来的影响。在表5中,我们展示了去除NSP对QNLI、MNLI和SQuAD 1.1的性能有显著影响。接下来,我们通过比较“无NSP”和“LTR & No NSP”来评估训练双向表示的影响。LTR模型在所有任务上的表现都比MLM模型差,在MRPC和SQuAD上有很大的下降。

对于SQuAD来说,很明显LTR模型在分词预测方面表现不佳,因为分词级别的隐藏状态没有右侧的下文。为加强LTR系统,我们在上面添加了一个随机初始化的BiLSTM。这确实显著改善了SQuAD的结果,但结果仍然比预训练的双向模型差得多。另外,BiLSTM损害了GLUE任务的性能。

我们认识到,也可以训练单独的LTR和RTL模型,并将每个标记表示为两个模型的连接,就像ELMo所做的那样。然而:(a)这比单一的双向模型贵两倍;(b)对于像QA这样的任务来说,这是不直观的,因为RTL模型将无法根据问题来决定答案;(c)严格来说,它比深度双向模型更弱,因为它可以在每一层使用左右上下文。

5.2 模型规模的影响

在本节中,我们将探讨模型大小对微调任务精度的影响。我们训练了许多具有不同层数、隐藏单元和注意头的bert模型,同时使用与前面描述的相同的超参数和训练过程。

所选GLUE任务的结果如表6所示。在这个表中,我们报告了5次随机重启微调的Dev Set平均精度。我们可以看到,更大的模型在所有四个数据集上都有严格的准确性提高,即使对于MRPC来说,它只有3600个标记的训练示例,并且与预训练任务有很大的不同。令人惊讶的是,我们能够在相对于现有文献已经相当大的模型之上实现如此重大的改进。例如,Vaswani等人(2017)研究的最大Transformer是(L=6, H=1024, A=16),编码器参数为100M,我们在文献中发现的最大Transformer是(L=64, H=512, A=2),参数为235M (al - rfou等人,2018)。而BERT(BASE)包含110M个参数,BERT(LARGE)包含340M个参数

人们早就知道,增加模型大小将导致机器翻译和语言建模等大规模任务的持续改进,表6所示的训练数据的LM困惑度证明了这一点。然而,我们相信这是第一个令人信服地证明扩展到极端模型尺寸也会导致非常小规模任务的巨大改进的工作,前提是模型已经得到充分的预训练。Peters等人(2018b)对将预训练的bi-LM大小从两层增加到四层的下游任务影响给出了不同的结果,Melamud等人(2016)顺便提到,将隐藏维度大小从200增加到600有所帮助,但进一步增加到1000并没有带来进一步的改善。这两项先前的工作都使用了基于特征的方法我们假设,当模型直接在下游任务上进行微调,并且只使用非常少量的随机初始化附加参数时,特定于任务的模型可以从更大、更具表现力的预训练表示中受益,即使下游任务数据非常小。

5.3 BERT基于特征的方法

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

在本节中,我们通过将BERT应用于CoNLL-2003命名实体识别(NER)任务来比较两种方法(Tjong Kim Sang和De Meulder, 2003)。在BERT的输入中,我们使用了保留大小写的WordPiece模型,并包含了数据提供的最大文档上下文。按照标准实践,我们将其表述为标记任务,但在输出中不使用CRF层。我们使用第一个子分词的表示作为NER标签集上分词级分类器的输入。

为了消融微调方法,我们采用基于特征的方法,在不微调bert的情况下,获得一层或多层bert的输出。并将这些上下文嵌入用作在分类层之前随机初始化的两层768维BiLSTM的输入。结果如表7所示。BERT(LARGE)获取预训练的Transformer的前四个隐藏层的分词表示的结果,只比微调整个模型落后0.3 F1。这表明BERT对于微调和基于特征的方法都是有效的。

6 结论

最近由于语言模型迁移学习的经验改进表明,丰富的无监督预训练是许多语言理解系统的组成部分。特别是,这些结果使低资源任务也能从深度单向架构中受益。我们的主要贡献是进一步将这些发现推广到深度双向架构,允许相同的预训练模型成功地处理广泛的NLP任务。

附录

将附录分为三部分

BERT的网络细节放在附录A

试验细节在附录B

消融试验在附录C。增加了消融试验:训练步数的影响和mask的消融试验

A 增加BERT的细节

A.1 预训练任务

提供预训练任务的样例如下

Masked LM 和mask程序

掩蔽词80%时间替换为[MASK],10%替换随机词,10%保持原词不变

这个过程的优点是,Transformer编码器不知道它将被要求预测哪些单词,或者哪些单词已被随机单词替换,因此它被迫保留每个输入分词的分布式上下文表示(词向量)。此外,因为随机替换只发生在所有标记的1.5%(即15%中的10%),这似乎不会损害模型的语言理解能力。在第C.2节中,我们将评估此程序的影响。在标准语言模型训练中,Masked LM只对每个batch中15%的令牌进行预测,这表明模型可能需要更多的预训练步骤才能收敛。在C.1节中,我们证明了MLM确实比从左到右模型(预测每个令牌)收敛得稍微慢一些,但是MLM模型的经验改进远远超过了增加的训练成本。

Next Sentence Prediction

下一个句子预测任务可以用下面的例子来说明。

A.2 预训练步骤

为了生成每个训练输入序列,我们从语料库中抽取两个文本范围,我们称之为“句子”,尽管它们通常比单个句子长得多(但也可以更短)。第一个句子接收A嵌入,第二个句子接收B嵌入。50%的时间B是A之后的下一个句子,50%的时间是一个随机的句子,这是为了“下一个句子预测”任务而完成的。对它们进行采样,使得组合长度≤512个分词。LM掩蔽是在WordPiece标记化后应用的,均匀掩蔽率为15%,不特别考虑部分词块。

我们使用256个序列(256个序列* 512个token = 128,000个token /batch)进行1,000,000步的批量训练,这在33亿词的语料库上大约是40个epoch。我们使用学习率为1e-4的Adam, β1 = 0.9, β2 = 0.999, L2权值衰减为0.01,前10000步的学习率热身,学习率线性衰减。我们在所有层上使用0.1的dropout概率。我们使用gelu激活(hendricks和Gimpel, 2016)而不是标准的relu,遵循OpenAI GPT。训练损失是均值masked LM似然和均值下一句预测似然的和。

在4个Pod配置的Cloud TPU(共16个TPU芯片)上进行BERTBASE的训练在16个Cloud TPU(共64个TPU芯片)上对BERTLARGE进行了训练。每次预训练耗时4天完成。

较长的序列开销不成比例,因为注意力是序列长度的平方。为了加快实验中的预训练速度,我们对90%的步长为128的模型进行了预训练。然后,我们训练512序列剩余的10%的步长来学习位置嵌入。

A.3 微调步骤

对于微调,除了批大小、学习率和训练epoch数外,大多数模型超参数与预训练时相同。dropout概率始终保持在0.1。最优的超参数值是特定于任务的,但我们发现以下可能的值范围可以在所有任务中很好地工作:

batch size: 16, 32

Adam lr: 5e-5, 3e-5, 2e-5

epochs: 2, 3, 4

我们还观察到,大型数据集(例如,100k+标记训练样例)对超参数选择的敏感性远远低于小数据集。微调通常非常快,因此合理的做法是简单地对上述参数进行彻底搜索,并选择在开发集中表现最好的模型

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

在这里,我们研究了最近流行的表示学习模型的差异,包括ELMo, OpenAI GPT和BERT。模型体系结构之间的比较如图3所示。请注意,除了架构差异之外,BERT和OpenAI GPT都是微调(fine-
tuning approaches)方法,而ELMo是基于特征(feature-based)的方法。

与BERT最具可比性的现有预训练方法是OpenAI GPT,它在大型文本语料库上训练一个从左到右的Transformer LM。事实上,BERT中的许多设计决策都是有意地使其尽可能接近GPT,以便尽量减少两种方法的比较。这项工作的核心论点是,双向性和第3.1节中提出的两个预训练任务是大部分经验改进的原因,但我们确实注意到,BERT和GPT的训练方式之间存在其他一些差异:

GPT是在BooksCorpus(8亿字)上训练的;BERT是在BooksCorpus(8亿字)和Wikipedia(25亿字)上训练的。

GPT只在微调中使用句子分隔符([SEP])和分类器分词([CLS]);BERT在预训练期间学习[SEP], [CLS]和句子A/B嵌入。

GPT的训练步数为1M,批大小为3.2万个单词;BERT被训练了1M步,批处理大小为128,000个单词。

GPT在所有的微调实验中使用相同的5e-5学习率;BERT选择一个特定于任务的微调学习率,使它在开发集上表现最好。

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

A.5 不同任务的微调示例

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

B 详细实验设置

 B.1 Detailed Descriptions for the GLUE Benchmark Experiments.

GLUE基准包括以下数据集,Wang et al. (2018a)最初对其进行了概述:

MNLI:Multi-Genre Natural Language Inference是一个大规模的、众包的蕴涵分类任务(Williams et al., 2018)。给定一对句子,目标是预测第二个句子相对于第一个句子是蕴涵、矛盾还是中立。

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

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

SST-2: The Stanford Sentiment Treebank是一个二元单句分类任务,由从电影评论中提取的句子和人类对其情感的注释组成(Socher et al., 2013)。

CoLA: The Corpus of Linguistic Acceptability语言可接受性语料库是一个二元单句分类任务,其目标是预测英语句子在语言上是否“可接受”(Warstadt et al., 2018)。

STS-B: The Semantic Textual Similarity Bench-mark语义文本相似性基准是从新闻标题和其他来源提取的句子对的集合(Cer et al., 2017)。他们被标注了从1到5的分数,表示这两个句子在语义上的相似程度。

MRPC: Microsoft Research Paraphrase Corpus微软研究释义语料库由自动从在线新闻来源中提取的句子对组成,并对句子对中的句子是否语义等效进行人工注释(Dolan and Brockett, 2005)。

RTE: Recognizing Textual Entailment识别文本蕴涵是一种类似于MNLI的二元蕴涵任务,但训练数据要少得多(Bentivogli et al., 2009)(请注意,我们在本文中只报告了单任务微调结果。多任务微调方法可能会进一步提高性能。例如,我们确实观察到使用MNLI进行多任务训练对RTE的实质性改进。)

WNLI: Winograd NLI是一个小型自然语言推理数据集(Levesque et al., 2011)。GLUE网页指出,该数据集的构建存在问题(https://gluebenchmark.com/faq),并且提交给GLUE的每个经过训练的系统的表现都低于预测大多数类别的65.1基线精度。因此,为了对OpenAI GPT公平起见,我们排除了这一组。对于我们的GLUE提交,我们总是预测多数类。

C Additional Ablation Studies 

C.1 Effect of Number of Training Steps

图5显示了从预训练k步的检查点进行微调后的MNLI Dev精度。这使我们能够回答以下问题

1.问题:BERT真的需要如此大量的预训练(128,000字/批* 1,000,000步)来达到很高的微调精度吗?

答:是的,与50万步相比,BERT(BASE)在1M步训练时在MNLI上实现了近1.0%的额外准确率。

2.问题:MLM预训练的收敛速度是否比LTR预训练慢,尽管每批只预测15%的单词,而不是每个单词?

答:MLM模型确实比LTR模型收敛稍慢。然而,就绝对精度而言,MLM模型几乎开始就优于LTR模型。

C.2 Ablation for Different Masking Procedures

在3.1节中,我们提到BERT在使用掩码语言模型(MLM)目标进行预训练时使用混合策略来屏蔽目标标记。下面是一项消融研究,以评估不同掩蔽策略的效果。

请注意,屏蔽策略的目的是减少预训练和微调之间的不匹配因为[MASK]符号在微调阶段不会出现。我们报告了MNLI和NER的Dev结果。对于NER,我们报告了微调和基于特征的方法,和我们预计的一样,基于特征的方法会放大不匹配,因为模型将没有机会调整表示。

结果如表8所示。在表中,MASK表示我们将目标分词替换为MLM的[MASK]符号;SAME表示我们保持目标分词不变;RND意味着我们用另一个随机分词替换目标分词。

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/878239.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组合式API-reactive和ref函数,computed计算属性,watch函数

一.reactive&#xff08;&#xff09;接收一个对象类型的数据&#xff0c;返回一个响应式的对象&#xff1a; <script setup> import {reactive} from vue const state reactive({count:100 }) const setCount () > {state.count } </script> <template>…

书生大模型实战营第三期进阶岛第三课——LMDeploy 量化部署实践

LMDeploy 量化部署实践 任务一&#xff1a;创建虚拟环境创建文件夹LMDEPLOY用于存放课程相关的文件创建模型软连接LMDeploy验证启动模型文件LMDeploy API部署InternLM2.5-1.8b以命令行形式连接API服务器以Gradio网页形式连接API服务器LMDeploy KV量化W4A16 模型量化和部署W4A16…

create-react-app 移除 ESLint 语法检查

ESLint 的作用&#xff1a; ESLint 是一个流行的 JavaScript 代码静态检查工具&#xff0c;旨在帮助开发者识别和修复代码中的问题。以下是关于 ESLint 的一些关键信息&#xff1a; 主要功能&#xff1a; 1.代码风格检查&#xff1a;ESLint 可以检查代码是否符合特定的编码风…

经典算法之链表篇(二)

目录 一&#xff1a;重排链表&#xff08;LeetCode.143&#xff09; 二&#xff1a;删除链表的节点&#xff08;LCR 136. 删除链表的节点&#xff09; 三&#xff1a;K个一组反转链表&#xff08;LeetCode.25&#xff09; 有关经典算法链表的第一篇内容&#xff0c;可以查看我…

ESXi服务器无法安装Windows11:“不符合此版本的Windows所需最低系统要求“

目录 一、问题描述1.使用环境2.问题截图3.问题解析 二、解决方法Ⅰ1.按 ShiftF10 弹出命令提示符2.在弹出的Dos框中输入regedit&#xff0c;回车&#xff0c;进入注册表。3.打开HKEY_LOCAL_MACHINE\SYSTEM\Setup&#xff0c;并新建 LabConfig 的项&#xff0c;在 LabConfig 下创…

使用预训练的 ONNX 格式的 YOLOv8n 模型进行目标检测,并在图像上绘制检测结果

目录 __init__方法&#xff1a; pre_process方法&#xff1a; run方法&#xff1a; filter_boxes方法&#xff1a; view_img方法&#xff1a; __init__方法&#xff1a; 初始化类的实例时&#xff0c;创建一个onnxruntime的推理会话&#xff0c;加载名为yolov8n.onnx的模型…

C#开发基础之100个常用的C#正则表达式

前言 正则表达式是处理字符串的强大工具&#xff0c;特别是在文本搜索、替换和验证中。本文将100个常用的C#正则表达式进行分类&#xff0c;以帮助我们更快速地找到适合的正则表达式解决方案。 1. 基础匹配 这些正则表达式用于匹配一些基本的字符或字符串模式。 匹配任意字…

利用 Pytest Cache Fixture 实现中间数据缓存

接口自动化过程中&#xff0c;经常会遇到这样一些场景&#xff0c;“请求2需要用到请求1响应的数据”&#xff0c;常见的做法&#xff0c;进行用例依赖或者将请求1的响应结果写入一个文件&#xff0c;用到的时候读取文件。 当然这都不是这篇文章的重点&#xff0c;本片文章主要…

macos MacPort 包管理工具安装和使用

在macos v10.15版本中, xz, python等软件无法使用brew安装, 原因是brew对于旧版本的macos不再支持, 但是我们可以使用另外一个macos下的包管理工具来安装brew无法安装的软件, macport 是一个和brew类似的macos下的一个非常优秀的软件包安装管理工具. MacPort安装前提条件 安…

假期学习--对象底层结构和继承链

OC本质底层实现转化其实都是C/C代码。 OC对象的本质就是结构体。 NSObject底层是struct objc_object结构体 &#xff1b;struct objc_class : objc_object { …省略无关代码 // Class ISA; //ISA(从objc_object继承过来的) Class superclass; //指向其父类 cache_t cache…

旅游行业怎么利用C#接口发送短信

旅游企业一般拥有众多的分支机构&#xff0c;同时各地分支机构又有众多下属分散在当地各区的旅游营业报名点&#xff0c;以前传统的解决方案是采用专线、MODEM拔号等方式&#xff0c;专线的成本很高&#xff0c;MODEM拔号更费时&#xff0c;且长途拔号互联成本在多点情况下费用…

微前端集成优化:让所有子应用体积更小,加载更快!

简介 随着前端的日益发展&#xff0c;微前端架构越来越受到青睐。它通过将前端应用拆分为多个独立的子应用&#xff0c;每个子应用可以独立开发、部署和运行&#xff0c;从而提升了开发效率和团队协作。目前主流的微前端方案应该是qiankun了。 以笔者公司为例&#xff0c;采用…

基于SpringBoot的在线答疑系统

你好呀&#xff0c;我是计算机专业毕业生&#xff0c;专注于在线教育平台的开发与实现。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术 Spring Boot框架 工具&#xff1a;IntelliJ IDEA、Navicat、Maven、Tomcat 系统展示 首页 个人中心…

scrapy--图片管道-ImagesPipeline

免责声明:本文仅做演示与分享~ 目录 介绍 ImagesPipeline pipelines.py items.py zz.py settings.py 介绍 scrapy 还提供了处理图片、视频、音频等媒体文件的插件&#xff0c;如&#xff1a; - scrapy-images&#xff1a;用于下载和处理图片 - scrapy-video&#xff1…

责任链设计模式详解

责任链设计模式详解 一、定义 责任链设计模式&#xff08;Chain of Responsibility Pattern&#xff09;是一种行为设计模式&#xff0c;它允许多个对象有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合。这种模式将这些对象连接成一条链&#xff0c;并沿着…

提前还房贷结果失败了该怎么办?需要注意哪些?怎么做更顺利?

提前还房贷结果失败了&#xff0c;该怎么办&#xff1f; 1. 满足条件再申请&#xff1a;部分银行对提前还款设有一定的条件和限制&#xff0c;例如需要提前预约&#xff0c;对已还款时间和还款金额也有具体的要求。如果借款人未能满足这些条件&#xff0c;提前还款的申请可能会…

【精选】计算机毕业设计之:基于springboot超市进销存系统

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

Stable Diffusion AI绘画工具的安装与配置(MAC用户)

AI绘画的热潮席卷了整个创意行业&#xff0c;Stable Diffusion作为其中的翘楚&#xff0c;让艺术创作变得前所未有的简单。然而&#xff0c;对于使用Mac电脑用户来说&#xff0c;安装和配置Stable Diffusion可能显得有些棘手。别担心&#xff0c;这份详细的教程将手把手教你如何…

【Material-UI】Select 组件中的 `Auto width`、`Small Size` 和 `Other Props` 详解

文章目录 一、Select 组件概述1. 组件介绍2. Select 组件的基本结构 二、Auto width 属性详解1. Auto width 的作用2. Auto width 属性的基本用法3. Auto width 的实际应用场景 三、Small Size 属性详解1. Small Size 的作用2. Small Size 属性的基本用法3. Small Size 的实际应…

Windows怎么让防火墙开放端口

开放端口的方法 先从控制面板,进入到Windows Defender防火墙 点击高级设置,点击入站规则 点击右边的新建规则,点击端口,点击下一步 选择协议类型和端口号点击下一步即可 查看是否开放端口成功的方法: 进入任务管