赞
踩
我们介绍了一种新的语言表示模型,称为双向编码器表示。不同于最近的语言表示模型,BERT旨在通过对所有层的左右上下文进行联合调节,从未标记文本中预先训练深层双向表示。因此,预先训练好的BERT模型只需一个额外的输出层就可以进行微调,从而为广泛的任务(如问题回答和语言推理)创建最先进的模型,而无需对特定任务的体系结构进行实质性修改。
BERT概念简单,经验丰富。它在11项自然语言处理任务中获得了最新的结果,包括将GLUE分数提高到80.5%(绝对提高了7.7%),将MultiNLI准确率提高到86.7%(绝对提高了4.6%),将SQuAD 1.1问题答案的TEST F1提高到93.2(绝对提高了1.5分),将SQuAD 2.0的TEST F1提高到83.1(绝对提高了5.1分)。
语言模型预训练已被证明对改善许多自然语言处理任务有效。 这些包括sequence-level task,例如自然语言推理和释义,旨在通过整体分析来预测句子之间的关系。 作为诸如命名实体识别和问题回答之类的token-level task,其中需要模型以在token级上产生细粒度的输出。
有两种将预先训练好的语言表示应用于下游任务的现有策略:feature-based和fine-tuning。feature-based方法,例如ELMo ,使用特定于任务的体系结构,包括预先训练的表示作为附加特征。fien-tuning方法,如Generative Pre-trained Transformer (OpenAIGPT),引入了极小任务特定的参数,并通过简单微调所有预训练的参数来针对下游任务进行训练。这两种方法在预训练期间具有相同的目标函数,它们使用单向语言模型来学习通用语言表示。
我们认为,当前的技术限制了预训练表示的能力,尤其是对于fine-tuning方法。 主要的限制是标准语言模型是单向的,这限制了可以在预训练期间使用的体系结构的选择。 例如,在OpenAI GPT中,作者使用从左到右的体系结构,其中每个token只能参加Transformer的自注意层中的先前token。 这样的限制对于句子级任务不是最理想的,并且在将基于fine-tuning的方法应用于token级任务(例如问题回答)时可能非常不利,在这种情况下,双向整合上下文至关重要。
在本文中,我们通过提出来自Transformers的BERT:Bidirectional Encoder Representations form Transformers,改进了基于fine-tuning的方法。 BERT在Cloze任务的启发下,通过使用“遮蔽语言模型”(MLM)预训练目标来减轻了先前提到的单向性约束。 遮蔽语言模型从输入中随机屏遮蔽了某些token,目的是仅根据其上下文来预测遮蔽单词的原始词汇ID。 与从左到右的语言模型预训练不同,MLM目标使表示形式能够融合左右上下文,这使我们能够预训练深层双向Transformer。 除了遮蔽语言模型外,我们还使用“下一个句子预测”任务来联合预训练文本对表示。 本文的贡献如下:
BERT推动了11项NLP任务的发展。 可以在https://github.com/ google-research / bert上找到代码和经过预先训练的模型。
训练通用语言表示形式已有很长的历史,我们简述本节中使用最广泛的方法。
几十年来,学习广泛适用的单词表示一直是研究的活跃领域,包括非神经方法和神经方法。 预训练的单词嵌入是现代NLP系统不可或缺的一部分,与从头开始学习的嵌入相比,具有明显的改进。 为了预训练单词嵌入向量,已使用从左到右的语言建模目标,以及在左右上下文中区分正确单词和错误单词的目标。
这些方法已推广到更粗粒度,例如句子嵌入或段落嵌入。为了训练句子表示,现有工作已使用目标对候选下一个句子进行排名,给定前一个句子的表示从左到右生成下一个句子单词或对自动编码器得出的目标进行降噪。ELMo及其前身将传统的词嵌入研究沿不同的维度进行了概括。他们从左到右和从右到左的语言模型中提取上下文相关的特征。每个标记的上下文表示形式是从左至右和从右至左表示的串联。当将上下文词嵌入与现有的特定于任务的体系结构集成时,ELMo促进了几种主要的NLP基准的最新技术,包括问题回答,情感分析和命名实体识别。 Melamud等人通过使用LSTM从左和右上下文预测单个单词的任务,提出了学习上下文表示的建议。与ELMo相似,它们的模型是基于特征的,并且不是深层双向的。 Fedus等人表明,Cloze任务可以用来提高文本生成模型的鲁棒性。
与基于特征的方法一样,第一个方法只能在此方向上仅使用来自未标记文本的预训练词嵌入参数。
最近,产生上下文标记表示的句子或文档编码器已经从未标记的文本中进行了预训练,并针对有监督的下游任务进行了微调。 这些方法的优点是几乎不需要从头学习参数。 至少部分地由于此优势,OpenAI GPT在GLUE基准测试中的许多句子级任务上取得了以前的最新结果。 左右语言建模和自动编码器目标已用于预训练此类模型。
也有工作显示了从监督任务到大型数据集的有效迁移,例如自然语言推理和机器翻译。 计算机视觉研究还证明了从大型预训练模型进行迁移学习的重要性,其中有效的方法是对通过ImageNet预训练的模型进行微调。
我们将在本节中介绍BERT及其详细实现。 在我们的框架中有两个步骤:预训练和微调。 在预训练期间,通过不同的预训练任务对未标记的数据进行模型训练。 对于微调,首先使用预训练的参数初始化BERT模型,然后使用下游任务中的标记数据对所有参数进行微调。 每个下游任务都有单独的微调模型,即使它们使用相同的预训练参数进行了初始化。 图1中的问题解答示例将作为本节的运行示例。
图1:BERT的总体预训练和微调程序。 除输出层外,预训练和微调都使用相同的体系结构。 相同的预训练模型参数用于初始化不同下游任务的模型。 在微调期间,对所有参数进行微调。 [CLS]是在每个输入示例前添加的特殊符号,[SEP]是特殊的分隔符标记(例如,分隔问题/答案)。
BERT的一个显着特征是其跨不同任务的统一体系结构。 预训练的体系结构与最终的下游体系结构之间的差异很小。
Model Architecture BERT的模型架构是多层双向Transformer编码器,基于Vaswani等人描述的原始实现,并在tensor2tensor库中发布。由于已经普遍使用了Transformers,并且我们的实现几乎与原始实现相同,因此,我们将省略对模型体系结构的详尽背景说明,并向读者介绍Vaswani等人以及出色的阐明,例如“The Annotated Transformer”。
在这项工作中,我们将层(即,Transformer块)的数量表示为L,将隐藏的大小表示为H,并将自注意力头的数量表示为A。我们主要报告两种模型尺寸的结果:
为了进行比较,选择
Input/Output Representations 为了使BERT处理各种下游任务,我们的输入表示形式可以在一个标记序列中明确表示单个句子和一对句子(例如,Question,Answer)。在整个工作中,“句子”可以是连续文本的任意范围,而不是实际的语言句子。 “序列”是指BERT的输入标记序列,它可以是一个句子或两个句子包装在一起。
我们使用具有30000个标记词汇表的词嵌入。每个序列的第一个标记始终是一个特殊的分类标记([CLS])。与该标记相对应的最终隐藏状态用作分类任务的聚合序列表示。句子对打包在一起形成单个序列。我们通过两种方式区分句子。首先,我们使用特殊标记([SEP])将它们分开。其次,我们向每个标记添加可学习的嵌入,以指示它是属于句子A还是句子B。如图1所示,我们将输入嵌入表示为E,将特殊[CLS]标记的最终隐藏向量表示为
对于给定的标记,其输入表示形式是通过将相应的标记,段和位置嵌入相加而构造的。这种结构的可视化效果如图2所示。
图2:BERT输入表示。 输入的嵌入是标记嵌入,分段嵌入和位置嵌入的总和。
与Peters等人和Radford等人不同,我们不使用传统的从左到右或从右到左的语言模型对BERT进行预训练。 相反,我们使用本节中描述的两个无监督任务对BERT进行预训练。 此步骤显示在图1的左侧。
Task #1:Masked LM 直观地说,我们有理由相信,深度双向模型比从左到右模型或者是从左到右模型和从右到左模型的浅层连接更强大。不幸的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件将允许每个单词间接地“see itself”,并且该模型可以在多层结构中简单地预测目标单词上下文。
为了训练深度双向表示,我们简单地随机遮蔽一定百分比的输入标记,然后预测这些遮蔽的标记。我们将此程序称为“Masked LM”(MLM),尽管在文献中通常将其称为完形填空任务。在这种情况下,如标准LM中一样,与遮蔽标记相对应的最终隐藏向量被馈送到词汇表上的输出softmax中。在我们所有的实验中,我们随机屏蔽了每个序列中15%的WordPiece标记。与去噪自动编码器相反,我们仅预测被屏蔽的单词,而不重构整个输入。
虽然这允许我们获得双向预训练模型,但缺点是我们在预训练和微调之间创建了不匹配,因为在微调期间不会出现[mask]标记。为了缓解这种情况,我们并不总是用实际的[mask]标记替换“masked”词。训练数据生成器随机选择15%的标记位置进行预测。如果选择第i个标记,我们将第i个标记替换为(1) the [MASK] token 80% of the time (2) a random token 10% of the time (3) the unchanged i-th token 10% of the time。然后,利用
Task #2:Next Sentence Prediction(NSP) 许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都是建立在理解两个句子之间关系的基础上的,而语言建模并不能直接捕捉到这两个句子之间的关系。为了训练一个能够理解句子关系的模型,我们预先训练一个二值化的下一个句子预测任务,这个任务可以从任何一个单语语料库生成。具体来说,在为每个预训练示例选择句子A和B时,50%的时间B是A后面的实际下一个句子(标记为is next),50%的时间B是来自语料库的随机句子(标记为notnext)。如图1所示,C用于下一句预测(NSP)。尽管它很简单,但我们在第5.1节中演示了针对此任务的预培训对QA和NLI都非常有益。
NSP任务与Jernite等人以及Logeswaran和Lee所使用的表示学习目标密切相关。 但是,在先验工作中,只有句子嵌入被传输到下游任务,其中BERT传输所有参数以初始化最终任务模型参数。
预训练过程很大程度上遵循了有关语言模型预训练的现有文献。 对于预训练语料库,我们使用BooksCorpus(800M个单词)和English Wikipedia(25亿个单词)。对于Wikipedia,我们仅提取文本段落,而忽略列表,表格和标题。 为了提取长的连续序列,使用文档级语料库而不是像BillionWord Benchmark这样的经过改组的句子级语料库是至关重要的。
微调很简单,因为Transformer中的自注意力机制允许BERT通过交换适当的输入和输出来建模许多下游任务(无论它们涉及单个文本还是文本对)。对于涉及文本对的应用程序,常见的模式是在应用双向交叉注意之前对文本对进行独立编码,例如Parikh等。 然而BERT是使用自注意机制来统一这两个阶段,因为使用自注意对连接的文本对进行编码实际上包括两个句子之间的双向交叉注意。
对于每个任务,我们只需将特定于任务的输入和输出插入BERT,并端到端微调所有参数。在输入时,来自预训练的句子A和句子B类似于(1)释义中的句子对,(2)包含的假设前提对,(3)问题回答中的疑问句对,以及(4)退化
与预训练相比,微调相对便宜。从完全相同的预训练模型开始,可以在单个Cloud TPU上最多在1小时内复制文件中的所有结果,而在GPU上最多可以复制几个小时。我们将在第4节的相应小节中描述特定于任务的详细信息,更多详细信息可以在附录A.5中找到。
在本节中,我们将介绍11个NLP任务的BERT fine-tuning结果。
在本节中,我们将对BERT的多个方面进行消融实验,以更好地了解它们的相对重要性。 其他消融研究可在附录C中找到。
通过使用与
No NSP:双向模型,使用“masked LM”(MLM)进行训练,但没有“next sentence prediction”(NSP)任务。
LTR&No NSP:仅使用左上下文模型,使用标准的从左到右(LTR)LM而非MLM进行训练。 左约束也应用于微调,因为删除它会引入预训练/微调不匹配,从而降低下游性能。 此外,该模型无需NSP任务即可进行预训练。这可以与OpenAI GPT直接比较,但使用了更大的训练数据集,输入表示形式和微调方案。
我们首先研究NSP任务带来的影响。在表5中,我们显示删除NSP会严重损害QNLI,MNLI和SQuAD 1.1的性能。接下来,我们通过比较“No NSP”与“ LTR& No NSP”来评估训练双向表示的影响。在所有任务上,LTR模型的性能都比MLM模型差,而MRPC和SQuAD的性能下降很大。
对于SQuAD,直观上很清楚,因为token级别的隐藏状态没有右侧上下文,所以LTR模型在token预测时的性能会很差。为了真诚地尝试加强LTR系统,我们在顶部添加了一个随机初始化的BiLSTM。这确实可以显着改善SQuAD上的结果,但结果仍然比预训练的双向模型的结果差很多。 BiLSTM损害了GLUE任务的性能。
我们认识到,也有可能像ELMo一样训练单独的LTR和RTL模型并将每个令牌表示为两个模型的串联。但是:(a)这是单个双向模型的两倍昂贵; (b)对于QA这样的任务,这是不直观的,因为RTL模型将无法确定问题的答案; (c)这绝对不如深度双向模型强大,因为它可以在每一层使用左右上下文。
在本节中,我们探索模型大小对微调任务准确性的影响。我们训练了许多具有不同层数,隐藏单元和注意头的BERT模型,而其他方面则使用了与之前所述相同的超参数和训练过程。
表6显示了选定的GLUE任务的结果。在此表中,我们报告了5次随机微调重新启动后的平均Dev Set准确性。我们可以看到,即使对于只有3600个带标签的训练示例的MRPC,它与所有预训练任务也大不相同,较大的模型也会导致所有四个数据集的严格准确性提高。我们能够在相对于现有文献而言已经相当大的模型的基础上实现如此显着的改进,这也许也令人惊讶。例如,在Vaswani等人中探索的最大的Transformer是(L = 6,H = 1024,A = 16),编码的参数为100M,而我们在文献中发现的最大的Transformer是(L = 64,H = 512 ,A = 2)235M参数(Al-Rfou et al,2018)。相比之下,
众所周知,增加模型的大小将导致对大型任务(如机器翻译和语言建模)的持续改进,这由表6中所示的持久性训练数据的LM困惑证明了这一点。但是,我们相信这是第一个有说服力的证明,只要模型已经过充分的预训练,缩放到极限模型大小也将导致非常小的规模任务的重大改进。
Peters等人将预训练的Bi-LM尺寸从两层增加到四层对下游任务的影响提出了不同的结果,Melamud等人提到将隐藏尺寸从200增大到600有帮助,但进一步增加到1000却没有效果带来进一步的改进。这两个先前的工作都使用了基于特征的方法-我们假设当直接在下游任务上微调模型并且仅使用很少数量的随机初始化的附加参数时,特定于任务的模型可以从较大的模型中受益,即使下游任务数据非常小,也可以使用更具表现力的预训练表示形式。
到目前为止,所有提出的BERT结果都使用了微调方法,其中在预训练模型中添加了一个简单的分类层,并且在下游任务上共同对所有参数进行了微调。 然而,从预训练模型中提取固定特征的基于特征的方法具有一定的优势。 首先,并非所有任务都可以由Transformer编码器体系结构轻松表示,因此需要添加特定于任务的模型体系结构。 其次,预先计算出训练数据的昂贵表示形式,然后在此表示形式之上使用较便宜的模型运行许多实验具有重大的计算优势。
在本节中,我们通过将BERT应用于CoNLL-2003命名实体识别(NER)任务来比较这两种方法。在BERT的输入中,我们使用了一个区分大小写的WordPiece模型,并且包含了数据提供的最大文档上下文。按照标准惯例,我们将其公式化为标记任务,但在输出中不使用CRF层。我们使用第一个子令牌的表示作为NER标签集上令牌级别分类器的输入。
为了对比这种微调方法,我们采用基于特征的方法,从一个或多个层中提取激活特征,而不需要微调bert的任何参数。这些上下文嵌入用作在分类层之前随机初始化的两层768维bilstm的输入中。
结果列在表7中。BERTLARGE与最新技术具有竞争优势。最佳性能的方法将来自预训练的Transformer的顶部四个隐藏层的token表示连接起来,这仅比微调整个模型的F1 Score低0.3。这表明BERT对于微调和基于特征的方法均有效。
由于使用语言模型进行了迁移学习,最近的经验改进表明,丰富的、无监督的预训练是许多语言理解系统不可或缺的一部分。 尤其是,这些结果使即使是资源匮乏的任务也可以从深度单向体系结构中受益。 我们的主要贡献是将这些发现进一步推广到深层次的双向体系结构,从而使相同的经过预训练的模型能够成功解决各种NLP任务。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。