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.rhkb.cn/news/412744.html

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

相关文章

Prometheus+Grafana的安装和入门

概念 什么是Prometheus? Prometheus受启发于Google的Brogmon监控系统(相似kubernetes是从Brog系统演变而来), 从2012年开始由google工程师Soundclouds使用Go语言开发的开源监控报警系统和时序列数据库(TSDB)。,并且与2015年早起…

使用LinkedHashMap实现固定大小的LRU缓存

使用LinkedHashMap实现固定大小的LRU缓存 1. 什么是LRU? LRU是"Least Recently Used"的缩写,意为"最近最少使用"。LRU缓存是一种常用的缓存淘汰算法,它的核心思想是:当缓存满时,优先淘汰最近最少…

18959 二叉树的之字形遍历

### 思路 1. **输入读取**: - 读取输入字符串,表示完全二叉树的顺序存储结构。 2. **构建二叉树**: - 使用队列构建二叉树,按层次顺序插入节点。 3. **之字形层序遍历**: - 使用双端队列进行层序遍历&…

【开端】基于nginx部署的具有网关的web日志分析

一、绪论 基于nginx部署的具有网关的web日志分析,我们可以分析的日志有nginx的access.log ,网关的日志和应用的日志 二、日志分析 1、nginx日志 参数 说明 示例 $remote_addr 客户端地址 172.17.0.1 $remote_user 客户端用户名称 -- $time_lo…

简化WPF开发:CommunityToolkit.Mvvm在MVVM架构中的实践与优势

文章目录 前言一、CommunityToolkit.Mvvm1.特点2.优点3.缺点 二、WPF项目应用1.引入到 WPF 项目2.使用示例 总结 前言 CommunityToolkit.Mvvm 是 Microsoft 提供的一个社区工具包,专为 MVVM(Model-View-ViewModel)模式设计,旨在帮…

RabbitMQ练习(Topics)

1、RabbitMQ教程 《RabbitMQ Tutorials》https://www.rabbitmq.com/tutorials 2、环境准备 参考:《RabbitMQ练习(Hello World)》和《RabbitMQ练习(Work Queues)》。 确保RabbitMQ、Sender、Receiver、Receiver2容器…

“重启就能解决一切问题”,iPhone重启方法大揭秘

随着iPhone不断更新换代,其设计与操作方式也在不断进化。从最初的实体Home键到如今的全面屏设计,iPhone的操作逻辑也随之发生了改变。 对于那些习惯了传统安卓手机操作的用户来说,iPhone的重启方式可能会显得有些不同寻常。下面我们就来一起…

SQL血缘解析

Druid 作为使用率特别高的的数据库连接池工具,在具备完善的连接池管理功能外,同时Druid 的 SQL解析功能可以用来防止 SQL注入等安全风险。通过对 SQL 语句进行解析和检查,Druid 可以识别并阻止潜在的恶意 SQL 语句执行,黑名单(阻止特定的 SQL 语句执行)、白名单(仅允许特…

★ 算法OJ题 ★ 力扣11 - 盛水最多的容器

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起做一道双指针算法题--盛水最多的容器~ 目录 一 题目 二 算法解析 三 编写算法 一 题目 11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 二 算法解析 解法1&#xff1a;暴力枚举 …

文本数据分析-(TF-IDF)(1)

文章目录 一、TF-IDF简介1.意义2.TF与IDF1).TF&#xff08;Term Frequency&#xff09;2).IDF&#xff08;Inverse Document Frequency&#xff09;3).TF-IDF 二、应用三、代码实现1.文件读取2.数据预处理3.排序和输出4.全部代码 一、TF-IDF简介 1.意义 TF-IDF&#xff08;Te…

28 TreeView组件

Tkinter ttk.Treeview 组件使用指南 ttk.Treeview 是 Tkinter 的一个高级控件&#xff0c;用于显示和管理层次化数据。它类似于电子表格或列表视图&#xff0c;但提供了更丰富的功能&#xff0c;如可展开的节点、多列显示等。ttk 模块是 Tkinter 的一个扩展&#xff0c;提供了…

Golang | Leetcode Golang题解之第382题链表随机节点

题目&#xff1a; 题解&#xff1a; type Solution struct {head *ListNode }func Constructor(head *ListNode) Solution {return Solution{head} }func (s *Solution) GetRandom() (ans int) {for node, i : s.head, 1; node ! nil; node node.Next {if rand.Intn(i) 0 { …

《机器学习》数据分析之关键词提取、TF-IDF、项目实现 <下>

目录 一、内容回顾 1、核心算法 2、算法公式 3、拆分文本 二、再次操作 1、取出每一卷的地址和内容 得到下列结果&#xff1a;&#xff08;此为DF类型&#xff09; 2、对每一篇文章进行分词 3、计算TF-IDF值 得到以下数据&#xff1a; 三、总结 1、关键词提取 1&a…

数据挖掘之分类算法

分类算法是数据挖掘中常用的一类算法&#xff0c;其主要任务是根据已知的训练数据&#xff08;即带有标签的数据&#xff09;构建模型&#xff0c;然后利用该模型对新的数据进行分类。分类算法广泛应用于金融、医疗、市场营销等领域&#xff0c;用于预测、决策支持等任务。以下…

STM32G474采用“多个单通道ADC转换”读取3个ADC引脚的电压

STM32G474采用“多个单通道ADC转换”读取3个ADC引脚的电压&#xff1a;PC0、PA1和PA2。本测试将ADC1_IN6映射到PC0引脚&#xff0c;ADC12_IN2映射到PA1引脚&#xff0c;ADC1_IN3映射到PA2引脚。 1、ADC输入 ADC输入电压范围&#xff1a;Vref– ≤ VIN ≤ Vref ADC支持“单端输入…

Java 集合Collection(List、Set)Map

集合的理解和优点 1)可以动态保存任意多个对象&#xff0c;使用比较方便!2)提供了一系列方便的操作对象的方法: add、remove、 set、 get等3)使用集合添加,删除新元素的示意代码- Java集合的分类 Java的集合类很多&#xff0c;主要分为两大类&#xff0c;如图&#xff1a; 1…

iPhone备忘录不小心删除了怎么办?

在日常使用iPhone的过程中&#xff0c;备忘录作为我们记录重要信息、灵感闪现和日常琐事的小帮手&#xff0c;其重要性不言而喻。然而&#xff0c;有时候因为操作失误或是不小心点击&#xff0c;我们可能会将珍贵的备忘录内容删除&#xff0c;这无疑会让人感到焦虑与不安。但请…

深入垃圾回收:理解GC的核心算法与实现

垃圾回收&#xff08;Garbage Collection&#xff0c;GC&#xff09;是现代编程语言中一项关键技术。它不仅解决了内存管理中的诸多问题&#xff0c;还为开发者提供了一个更高效、更安全的编程环境。本文将深入探讨GC的起源、主要算法以及这些算法在不同编程语言中的具体实现。…

考试:计算机网络(01)

网络功能和分类 计算机网络是计算机技术与通信技术相结合的产物&#xff0c;它实现了远程通信、远程信息处理和资源共享。 计算机网络的功能&#xff1a;数据通信、资源共享、管理集中化、实现分布式处理、负载均衡。 网络性能指标&#xff1a;速率、带宽(频带宽度或传送线路…

嵌入式数据库

概述 1.作用&#xff1a;存储大量数据&#xff0c;专业存储数据 存储在内存&#xff08;数组&#xff0c;变量&#xff0c;链表&#xff09;上的特点&#xff1a;程序运行结束&#xff0c;或者掉电&#xff0c;数据会丢失。 存储在硬盘&#xff08;文件&#xff09;上的特点…