BERT:Pre-training of Deep Bidirectional Transformers forLanguage Understanding深度双向Transformer理解预训练

这篇文章介绍了 BERT(Bidirectional Encoder Representations from Transformers),一种新的语言表示模型。以下是文章的主要内容总结:

  1. 背景与动机

    • 现有的语言模型(如ELMo、GPT)通常是单向的,限制了模型在理解上下文时的能力。

    • BERT通过双向Transformer架构,能够同时考虑左右上下文,从而提升语言理解能力。

  2. 核心创新

    • 掩码语言模型(MLM):随机掩码输入中的部分词元,并预测这些被掩码的词元,使模型能够学习双向上下文表示。

    • 下一句预测(NSP):通过预测两个句子是否连续,帮助模型理解句子间的关系。

  3. 模型架构

    • BERT基于Transformer编码器,分为两种规模:BERT<sub>BASE</sub>(12层,768隐藏单元)和BERT<sub>LARGE</sub>(24层,1024隐藏单元)。

    • 输入表示支持单个句子和句子对,使用WordPiece分词,并添加了位置嵌入和段嵌入。

  4. 预训练与微调

    • 预训练阶段使用大规模无标签文本(BooksCorpus和维基百科)进行MLM和NSP任务。

    • 微调阶段通过简单的任务特定输出层,将预训练模型应用于下游任务(如问答、文本分类等)。

  5. 实验结果

    • BERT在11个自然语言处理任务上取得了最先进的性能,包括GLUE、SQuAD等。

    • 实验表明,BERT的双向预训练和任务设计是其性能提升的关键。

  6. 消融研究

    • 通过消融实验验证了MLM和NSP任务的重要性,以及模型大小对性能的影响。

    • 还比较了基于特征的方法和微调方法,表明BERT在两种方法下都表现良好。

  7. 贡献与意义

    • BERT是第一个基于双向Transformer的预训练模型,能够通过简单的微调在多种任务上取得优异性能。

    • 代码和预训练模型公开,推动了自然语言处理领域的研究和应用。

BERT通过双向Transformer和创新的预训练任务,显著提升了语言理解能力,并在多个NLP任务上取得了最先进的性能。这里是自己的论文阅读记录,感兴趣的话可以参考一下,如果需要阅读原文的话可以看这里,如下所示:

官方项目地址在这里,如下所示:

官方发布的预训练模型如下:

H=128H=256H=512H=768
L=22/128 (BERT-Tiny)2/2562/5122/768
L=44/1284/256 (BERT-Mini)4/512 (BERT-Small)4/768
L=66/1286/2566/5126/768
L=88/1288/2568/512 (BERT-Medium)8/768
L=1010/12810/25610/51210/768
L=1212/12812/25612/51212/768 (BERT-Base)
ModelScoreCoLASST-2MRPCSTS-BQQPMNLI-mMNLI-mmQNLI(v2)RTEWNLIAX
BERT-Tiny64.20.083.281.1/71.174.3/73.662.2/83.470.270.381.557.262.321.0
BERT-Mini65.80.085.981.1/71.875.4/73.366.4/86.274.874.384.157.962.326.1
BERT-Small71.227.889.783.4/76.278.8/77.068.1/87.077.677.086.461.862.328.6
BERT-Medium73.538.089.686.6/81.680.4/78.469.6/87.980.079.187.762.262.330.5

 模型评估对比如下:

ModelSQUAD 1.1 F1/EMMulti NLI Accuracy
BERT-Large, Uncased (Original)91.0/84.386.05
BERT-Large, Uncased (Whole Word Masking)92.8/86.787.07
BERT-Large, Cased (Original)91.5/84.886.09
BERT-Large, Cased (Whole Word Masking)92.9/86.786.46
SQuAD v1.1 Leaderboard (Oct 8th 2018)Test EMTest F1
1st Place Ensemble - BERT87.493.2
2nd Place Ensemble - nlnet86.091.7
1st Place Single Model - BERT85.191.8
2nd Place Single Model - nlnet83.590.1
SystemMultiNLIQuestion NLISWAG
BERT86.791.186.3
OpenAI GPT (Prev. SOTA)82.288.175.0

摘要

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

BERT在概念上简单且经验上强大。它在11个自然语言处理任务中取得了新的最先进结果,包括将GLUE分数提升至80.5%(绝对提升7.7个百分点)、MultiNLI准确率提升至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., 2018; Radford et al., 2018; Howard and Ruder, 2018)。这些任务包括句子级任务(如自然语言推理和释义)和词元级任务(如命名实体识别和问答),其中模型需要在词元级别生成细粒度的输出。

现有两种将预训练语言表示应用于下游任务的策略:基于特征微调。基于特征的方法(如ELMo)使用任务特定的架构,将预训练表示作为附加特征。微调方法(如OpenAI GPT)引入最少的任务特定参数,并通过微调所有预训练参数来训练下游任务。这两种方法在预训练期间共享相同的目标函数,即使用单向语言模型学习通用语言表示。

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

在本文中,我们通过提出BERT(Bidirectional Encoder Representations from Transformers)来改进基于微调的方法。BERT通过使用“掩码语言模型”(MLM)预训练目标来缓解上述单向性约束,该目标受到Cloze任务(Taylor, 1953)的启发。掩码语言模型随机掩码输入中的一些词元,目标是根据上下文预测被掩码词元的原始词汇ID。与从左到右的语言模型预训练不同,MLM目标使表示能够融合左右上下文,从而允许我们预训练一个深度双向Transformer。除了掩码语言模型外,我们还使用“下一句预测”任务来联合预训练文本对表示。本文的贡献如下:

  • 我们展示了双向预训练对语言表示的重要性。与Radford et al. (2018)使用单向语言模型进行预训练不同,BERT使用掩码语言模型来实现预训练的深度双向表示。这与Peters et al. (2018)也不同,后者使用独立训练的从左到右和从右到左语言模型的浅层拼接。

  • 我们展示了预训练表示减少了对许多精心设计的任务特定架构的需求。BERT是第一个基于微调的表示模型,在大量句子级和词元级任务上实现了最先进的性能,超越了许多任务特定的架构。

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

2 相关工作

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

无监督的基于特征的方法

学习广泛适用的词表示是几十年来一直活跃的研究领域,包括非神经方法(Brown et al., 1992; Ando and Zhang, 2005; Blitzer et al., 2006)和神经方法(Mikolov et al., 2013; Pennington et al., 2014)。预训练的词嵌入是现代NLP系统的重要组成部分,提供了显著优于从头开始学习的嵌入(Turian et al., 2010)。为了预训练词嵌入向量,使用了从左到右的语言建模目标(Mnih and Hinton, 2009),以及区分左右上下文中的正确与错误词的目标(Mikolov et al., 2013)。

这些方法已被推广到更粗粒度的表示,如句子嵌入(Kiros et al., 2015; Logeswaran and Lee, 2018)或段落嵌入(Le and Mikolov, 2014)。为了训练句子表示,先前的工作使用了排序候选下一句的目标(Jernite et al., 2017; Logeswaran and Lee, 2018)、给定前一句表示生成下一句词的从左到右生成目标(Kiros et al., 2015),或去噪自编码器派生的目标(Hill et al., 2016)。

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

无监督的微调方法

与基于特征的方法一样,这一方向的第一项工作仅从无标签文本中预训练词嵌入参数(Collobert and Weston, 2008)。

最近,从无标签文本中预训练句子或文档编码器,并针对有监督的下游任务进行微调(Dai and Le, 2015; Howard and Ruder, 2018; Radford et al., 2018)。这些方法的优势在于需要从头学习的参数很少。至少部分由于这一优势,OpenAI GPT(Radford et al., 2018)在GLUE基准测试中的许多句子级任务上取得了之前的最先进结果(Wang et al., 2018)。从左到右的语言建模和自编码器目标已被用于预训练这些模型(Howard and Ruder, 2018; Radford et al., 2018; Dai and Le, 2015)。

图1:BERT的预训练和微调整体流程。除了输出层外,预训练和微调使用相同的架构。相同的预训练模型参数被用于初始化不同下游任务的模型。在微调过程中,所有参数都会被微调。[CLS]是添加到每个输入示例前面的特殊符号,[SEP]是特殊的分隔符(例如用于分隔问题和答案)。

从有监督数据中进行迁移学习

也有工作展示了从具有大数据集的有监督任务(如自然语言推理和机器翻译)中进行有效迁移(Conneau et al., 2017; McCann et al., 2017)。计算机视觉研究也展示了从大型预训练模型中进行迁移学习的重要性,其中有效的做法是微调使用ImageNet预训练的模型(Deng et al., 2009; Yosinski et al., 2014)。

3 BERT

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

BERT的一个显著特征是其跨不同任务的统一架构。预训练架构与最终下游架构之间的差异极小。

模型架构:BERT的模型架构是基于Vaswani et al. (2017)中描述的多层双向Transformer编码器,并在tensor2tensor库中发布。由于Transformer的使用已变得普遍,并且我们的实现与原始实现几乎相同,因此我们将省略对模型架构的详尽背景描述,并建议读者参考Vaswani et al. (2017)以及“The Annotated Transformer”等优秀指南。

输入/输出表示:为了使BERT能够处理各种下游任务,我们的输入表示能够明确表示单个句子和句子对(例如,〈问题,答案〉)在一个词元序列中。在本工作中,“句子”可以是任意连续的文本跨度,而不是实际的语言学句子。“序列”指的是BERT的输入词元序列,可以是单个句子或打包在一起的两个句子。

对于给定的词元,其输入表示通过将相应的词元嵌入、段嵌入和位置嵌入相加来构建。图2展示了这种构建的可视化。

图2:BERT的输入表示。输入嵌入是词元嵌入、段嵌入和位置嵌入的总和。

预训练BERT

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

任务#1:掩码语言模型(MLM):直观上,深度双向模型比从左到右模型或左右模型的浅层拼接更强大。然而,标准的条件语言模型只能从左到右或从右到左训练,因为双向条件会使每个词元间接“看到自己”,模型可以轻松地在多层上下文中预测目标词。

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

尽管这使我们能够获得双向预训练模型,但一个缺点是我们在预训练和微调之间创建了不匹配,因为[MASK]词元在微调期间不会出现。为了缓解这个问题,我们并不总是用实际的[MASK]词元替换“被掩码”的词。训练数据生成器随机选择15%的词元位置进行预测。如果选择了第i个词元,我们将其替换为(1)80%的时间使用[MASK]词元,(2)10%的时间使用随机词元,(3)10%的时间保持第i个词元不变。然后,TiTi​将用于通过交叉熵损失预测原始词元。我们在附录C.2中比较了此过程的不同变体。

任务#2:下一句预测(NSP):许多重要的下游任务(如问答和自然语言推理)基于理解两个句子之间的关系,而语言建模并未直接捕捉到这一点。为了训练一个理解句子关系的模型,我们预训练一个二分类的下一句预测任务,该任务可以从任何单语语料库中轻松生成。具体来说,在为每个预训练示例选择句子A和B时,50%的时间B是实际跟随A的下一句(标记为IsNext),50%的时间它是语料库中的随机句子(标记为NotNext)。如图1所示,C用于下一句预测(NSP)。尽管其简单性,我们在第5.1节中展示了预训练此任务对问答和自然语言推理非常有益。

预训练数据:预训练过程主要遵循语言模型预训练的现有文献。对于预训练语料库,我们使用了BooksCorpus(800M词)和英文维基百科(2,500M词)。对于维基百科,我们仅提取文本段落,忽略列表、表格和标题。使用文档级语料库而不是打乱的句子级语料库(如Billion Word Benchmark)至关重要,以便提取长连续序列。

微调BERT

微调非常简单,因为Transformer中的自注意力机制允许BERT通过交换适当的输入和输出来建模许多下游任务——无论它们涉及单个文本还是文本对。对于涉及文本对的应用,常见的模式是在应用双向交叉注意力之前独立编码文本对,如Parikh et al. (2016); Seo et al. (2017)。BERT则使用自注意力机制统一这两个阶段,因为使用自注意力对连接的文本对进行编码有效地包含了两个句子之间的双向交叉注意力。

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

与预训练相比,微调相对便宜。本文中的所有结果都可以在单个Cloud TPU上最多1小时或GPU上几小时内复制,从完全相同的预训练模型开始。我们在第4节的相应子节中描述了任务特定的细节。更多细节可在附录A.5中找到。

4 实验

在本节中,我们展示了BERT在11个NLP任务上的微调结果。

GLUE

通用语言理解评估(GLUE)基准(Wang et al., 2018)是一个多样化的自然语言理解任务集合。GLUE数据集的详细描述包含在附录B.1中。

SQuAD v1.1

斯坦福问答数据集(SQuAD v1.1)是一个包含10万个人工标注的问题/答案对的集合(Rajpurkar et al., 2016)。给定一个问题和包含答案的维基百科段落,任务是预测段落中的答案文本跨度。

表2显示了排行榜前几名以及顶级已发布系统的结果(Seo et al., 2017; Clark and Gardner, 2018; Peters et al., 2018; Hu et al., 2018)。SQuAD排行榜的顶级结果没有最新的公开系统描述,并且在训练系统时可以使用任何公开数据。因此,我们在系统中进行了适度的数据增强,首先在TriviaQA(Joshi et al., 2017)上进行微调,然后在SQuAD上进行微调。

我们表现最佳的系统在集成时比排行榜顶级系统高出+1.5 F1,作为单一系统时高出+1.3 F1。事实上,我们的单一BERT模型在F1得分上优于顶级集成系统。如果没有TriviaQA微调数据,我们仅损失0.1-0.4 F1,仍然大幅超越所有现有系统。

SQuAD v2.0

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

SWAG

情境对抗生成(SWAG)数据集包含113k个句子对完成示例,用于评估基于常识的推理(Zellers et al., 2018)。给定一个句子,任务是从四个选项中选择最合理的延续。

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

我们使用2e-5的学习率和16的批量大小对模型进行了3个epoch的微调。结果如表4所示。​比作者的基线ESIM+ELMo系统高出+27.1%,比OpenAI GPT高出8.3%。

5 消融研究

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

预训练任务的影响

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

无NSP:一个双向模型,使用“掩码语言模型”(MLM)进行训练,但没有“下一句预测”(NSP)任务。

LTR & 无NSP:一个仅左上下文模型,使用标准的从左到右(LTR)语言模型进行训练,而不是MLM。在微调时也应用了仅左约束,因为移除它会引入预训练/微调不匹配,从而降低下游性能。此外,该模型在没有NSP任务的情况下进行预训练。这与OpenAI GPT直接可比,但使用了我们更大的训练数据集、输入表示和微调方案。

我们首先检查NSP任务的影响。在表5中,我们展示了移除NSP会显著降低QNLI、MNLI和SQuAD 1.1的性能。接下来,我们通过比较“无NSP”和“LTR & 无NSP”来评估训练双向表示的影响。LTR模型在所有任务上表现均不如MLM模型,尤其是在MRPC和SQuAD上有较大下降。

对于SQuAD,直观上LTR模型在词元预测上表现不佳,因为词元级隐藏状态没有右侧上下文。为了加强LTR系统,我们在顶部添加了一个随机初始化的BiLSTM。这确实显著提高了SQuAD的结果,但仍远不如预训练的双向模型。BiLSTM在GLUE任务上损害了性能。

我们认识到,也可以分别训练LTR和RTL模型,并将每个词元表示为两个模型的拼接,如ELMo所做的那样。然而:(a)这比单个双向模型贵两倍;(b)这对于像QA这样的任务来说不直观,因为RTL模型无法根据问题条件化答案;(c)它严格不如深度双向模型强大,因为它可以在每一层使用左右上下文。

模型大小的影响

在本节中,我们探讨了模型大小对微调任务准确性的影响。我们训练了多个BERT模型,这些模型在层数、隐藏单元数和注意力头数上有所不同,同时使用与之前相同的超参数和训练过程。

表6显示了在选定的GLUE任务上的结果。在表中,我们报告了5次随机重启微调的平均开发集准确率。我们可以看到,更大的模型在所有四个数据集上均带来了严格的准确率提升,即使对于只有3,600个标注训练示例的MRPC,并且与预训练任务有显著不同。也许令人惊讶的是,我们能够在已经相当大的模型上实现如此显著的改进。例如,Vaswani et al. (2017)中探索的最大Transformer是(L=6, H=1024, A=16),编码器有1亿参数,而我们在文献中找到的最大Transformer是(L=64, H=512, A=2),有2.35亿参数(Al-Rfou et al., 2018)。相比之下,​包含1.1亿参数,​包含3.4亿参数。

长期以来,人们都知道增加模型大小将在大规模任务(如机器翻译和语言建模)上带来持续改进,这由表6中显示的保留训练数据的语言模型困惑度所证明。然而,我们相信这是第一个令人信服地证明,只要模型经过充分预训练,扩展到极端模型大小也会在非常小规模的任务上带来大幅改进的工作。Peters et al. (2018)展示了将预训练的双向LM大小从两层增加到四层对下游任务影响的混合结果,而Melamud et al. (2016)提到将隐藏维度大小从200增加到600有帮助,但进一步增加到1,000并未带来更多改进。这两项先前的工作都使用了基于特征的方法——我们假设,当模型直接在下游任务上微调并且仅使用非常少量的随机初始化附加参数时,任务特定模型可以从更大、更具表现力的预训练表示中受益,即使下游任务数据非常少。

基于特征的BERT方法

到目前为止,所有BERT结果都使用了微调方法,即在预训练模型上添加一个简单的分类层,并在下游任务上联合微调所有参数。然而,基于特征的方法(从预训练模型中提取固定特征)具有某些优势。首先,并非所有任务都可以轻松地表示为Transformer编码器架构,因此需要添加任务特定的模型架构。其次,预计算训练数据的昂贵表示并在其上运行许多更便宜的模型实验具有主要的计算优势。

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

为了消融微调方法,我们应用基于特征的方法,从一个或多个层提取激活,而不微调BERT的任何参数。这些上下文嵌入被用作随机初始化的两层768维BiLSTM的输入,然后再进行分类层。

结果如表7所示。​与最先进的方法竞争。表现最佳的方法将预训练Transformer的顶部四个隐藏层的词元表示拼接起来,仅比微调整个模型低0.3 F1。这表明BERT对于微调和基于特征的方法都有效。

6 结论

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Together_CZ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值