论文阅读:BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding
在学术研究领域中探讨BERT技术基础:基于预训练的深度双向Transformer语言模型的研究与应用
原文链接:BERT模型:通过预训练实现深度双向Transformer模型在语言理解任务中的应用
研究者:Jacob Devlin, Ming-Wei Chang, Kenton Lee, Kristina Toutanova
总结的论文思维导图如下:

目录
- 论文阅读:BERT:基于预训练技术的深度双向Transformer模型用于语言理解 预训练的深度双向Transformer语言模型
- 摘要
- 1 研究背景与意义
- 2 相关研究综述
-
- 2.1 基于特征的无监督学习方法
-
- 2.2 基于微调的无监督学习方法
-
-
2.3 基于监督数据的语言迁移学习方法
-
3 BERT
-
- 3.1 预训练BERT
- 3.2 微调BERT
-
4 实验
-
- 4.1 GLUE
- 4.2 SQuAD v1.1
- 4.3 SQuAD v2.0
- 4.4 SWAG
-
5 消融研究
-
- 5.1 预训练任务的效果
- 5.2 模型大小的影响
- 5.3 基于特征的BERT方法
-
6 结论
-
附录
-
-
摘要
我们提出了一种新的语言表示模型被称为BERT。该模型基于Transformers的双向编码器构建(Bidirectional Encoder Representations)。与最近的语言表示模型(Peters et al., 2018; Radford et al., 2018)相比, BERT通过整合所有层次的上下文信息进行深度双向往前预训练(deep bidirectional representations)。因此,经过微调处理后的BERT可以在各种任务上实现最高水平的效果,例如在问答和语言推理任务上的准确率达到96.4%,而在SQuAD v1.1问答测试中,F1值达到93.2%,在SQuAD v2.0测试中,F1值则为83.1%。
该设计简洁但经验丰富,已在多项自然语言处理任务中取得了突破性成果。
1 简介
研究表明,在众多自然语言处理任务中,通过预训练的语言模型显著提升了性能。具体而言,这类任务主要涉及句子级别的分析与处理,并旨在通过对整个句子进行深入分析来推断各句之间的相互作用与关联。此外,在词级别层面的任务同样受到广泛关注。值得注意的是,在这些词级别任务中,模型需要实现精确到每个词单位的识别与输出。
在预训练的语言表示被应用于下游任务时有两种主要策略:基于特征和微调方法。基于特征的方法(如ELMo)采用专为任务设计的架构,并将预训练表示作为额外特征输入;而微调方法(如生成式预训练transformer模型)则仅包含少量专门针对任务的参数,并通过仅重新优化少量可学习参数来实现下游任务的学习目标。在以往的研究中,这两种方法在初始优化时都采用了相同的损失函数,它们均利用单向语言模型来学习通用语言表达机制
我们坚信当前技术严重制约了预训练表示能力,尤其是基于微调的方法.主要缺陷在于传统单向架构仅限于特定类型的预训练设计.例如,在OpenAI GPT中,作者采用了从左到右的线性结构,每个词只能关注其左侧transformer自注意力层中的词.这种设计对于句子级别的任务尚可接受,但在涉及双向应用如SQuAD等任务时,可能会显著削弱性能.
在本文中, 我们通过transformer架构提出了改进型BERT: 双向编码器表示, 以提升传统微调方法的效果. BERT灵感源自完形填空技术, 并发展出一个创新的技术方案"Masked Language Model"(MLM), 以解决之前提到的一种单一方向性问题. 其目标是基于被遮蔽词的前后文信息来推断原始词项ID. 与传统的单向语言模型不同, MLM方案使得表示能够综合考虑前后文信息, 这一特性使我们得以预先训练一个深度双向transformer架构. 此外, 在研究过程中我们还引入了另一个技术指标"Next Sentence Prediction", 共同用于预训练文本对的表现. 本文的主要贡献体现在: 首先, 我们提出了一种新的BERT变体; 其次, 我们设计了一个多任务学习框架; 最后, 我们实现了性能显著提升的结果.
- 我们探讨了语言表达双向预训练的关键性问题。BERT基于掩膜语言模型构建了预训练表示 。这与Peters(2018)等人方法不同。
- 我们证实了预训练表示去除了任务特定架构的需求。BERT成为首个基于微调实现最佳性能的语言模型 ,其在大量句子级和符号级任务中均展现了超越特定架构的优势。
- BERT提升了11项NLP任务的表现,并进一步验证了其广泛的适用性。
代码和模型可在https://github.com/google-research/bert上获取。
2 相关工作
预训练通用语言模型 已经经历了漫长的发展历程,在本节中我们概述了其中最常用的技术。
2.1 无监督的基于特征的方法
学习可以广泛应用的词表达经过长期发展已逐渐成为主流方向,并涵盖神经网络方法以及非神经网络方法等技术路线。在现代自然语言处理系统中,预训练词嵌入是其核心功能之一,在对比传统词向量学习的基础上能够带来显著的性能提升(提升幅度可达15-20%)。为了生成高质量的预训练词嵌入向量,上下文的语言建模主要任务包括使用上下文建模语言这一关键步骤。此外,该过程还涉及另一个重要任务,即通过分析上下文来区分正确单词与错误单词之间的差异。
这些方法已经被系统性地扩展为更高级层次的表示形式,并非仅限于简单的表达方式。在训练过程中,在处理复杂信息时会采用某种策略对后续内容进行排序,在逐步构建内容的过程中会遵循特定规则以确保连贯性与一致性,并且通过分阶段的方式实现信息的有效传递与整合
这些方法已经被系统性地扩展为更高级层次的表示形式,并非仅限于简单的表达方式
另一种视角总结了传统的词嵌入研究。这些方法分别采用自左至右及自右至左的语言模型来提取相关特征;而每个符号的上下文表示则是自左至右与自右至左两种方式结合起来的表现形式
2.2 无监督的微调方法
与基于特征的方法相提并论的是第一种方法仅仅限于在未标记文本的预训练词嵌入参数上发挥作用。
近来生成上下文标记表示以构建句子或文档编码器的人工智能系统已从未标记文本中进行过监督微调,并针对监督下游任务进行了优化。这些方法的一个显著优点是所涉及的可训练参数相对较少。得益于这一优势,在GLUE基准测试中这类模型已经实现了多个句子级别的新高表现。通过从左到右的语言模型和自动编码器进行预训练
2.3 监督数据的迁移学习
在具有大型数据集的监督任务中存在有效的迁移现象表明这些工作具有重要意义
3 BERT
本节将深入阐述BERT的具体实现流程。该框架包含两个主要阶段:预训练与微调。在预训练阶段(Pre-training),我们将模型应用于多种预训练任务以学习大规模语言表示;而在微调阶段(Fine-tuning),我们采用下游特定任务所需的标记数据来进一步优化这些参数。具体而言,在进行微调时(Fine-tuning),我们会使用预训练阶段获得的参数来初始化BERT模型;随后,利用下游任务相关的标签数据对模型的所有参数进行进一步优化。尽管这些下游任务采用了相同的初始参数配置,在建立微调模型时仍会针对各自的任务需求独立设计。如图1所示的例子展示了本节所讨论方法的应用场景。

BERT的一个显著特点是其在各任务中的体系结构具有高度的一致性。其间的细微差别体现在不同的应用领域中,并未破坏整体框架的一致性
模型架构
该研究基于Vaswani等人所描述原始实现的基础上构建了一个多层双向transformer编码器架构,并将其发布于tensor2tensor开源库中使用了L表示层的数量H代表隐藏单元数目A代表self-attention头数这一设定我们主要关注两个版本的具体参数配置结果分别为BERTBASE(L=12 H=768 A=12 总参数量为1.1亿)以及BRT-Large(L=24 H=1024 A=16 总参数量3.4亿)。值得注意的是所选BRT-BASE与OpenAI-GPT拥有相同的计算规模但关键区别在于BRT采用了双向self-attention机制而GPT受限于单向自注意力机制这使得每个token仅能关注其左侧的历史信息
输入/输出表示
BERT在处理一系列下游任务时, 我们的输入表示能在一个token序列中明确地表示单个句子及其配对。在整个研究过程中, 一个"句子"可被定义为一段连续文本, 而并非语言学意义上的句子。这里的"句子"特指输入到BERT模型中的token序列, 其形式可能是单一序列也可能是两个序列连结而成。
我们采用了包含3万个不同词元(subwords)的词汇表进行WordPiece嵌入, 每个序列的第一元素均为一个特殊的分类标记符([CLS])。该标记位置对应的最终隐藏状态用于作为整体上下文信息的表现。
对于每个标记的位置, 我们通过对相应位置处的token、段落以及位置嵌入求和来构造其输入表示。这种多维度特征融合的方式能在图2中得到直观展示。

3.1 预训练BERT
我们不采用正向或反向的语言模型来训练BERT。与此相反,在本节中所述的两项无监督的任务被用来预训练BERT。这一过程体现在图1左侧区域。
任务1:Masked LM
从经验来看,在处理语言信息时双层双向模型 显然具备更强的能力与鲁棒性。这种优势源于其特殊的双向机制能够实现每个词元信息在正反向语境中的充分融合与互动作用。
任务2: 下一句话预测(NSP)
诸多关键的下游任务(如问答系统QA与自然语言推理NLI)均聚焦于推断两个句子之间的关联性而非单纯的语言建模能力。为了构建能够有效识别句子间关系的模型体系我们设计并实施了一个二进制下一句预测任务该任务可从任何单语语料库中轻松构建具体而言每当处理一个预训练样本时我们将其中一个句子标记为IsNext而另一个随机抽取自语料库则标记为NotNext。如图1所示该NSP(NextSentencePrediction)任务虽然操作简单但我们在第5.1节中展示了其预训练效果对问答系统QA与自然语言推理NLI均具有显著提升作用同时该任务与Jernite等人的表征学习目标高度契合。然而值得注意的是以往研究中仅将句嵌入转移至下游任务并将BERT网络全部参数复制至目标模型并未取得理想效果。
预训练数据
在预训练过程中, 我们主要参考了现有文献中关于语言模型预训练的部分。采用**BooksCorpus(约80亿个词)以及英文维基百科(约250亿个词)**作为数据基础。在处理维基百科内容时, 我们仅提取文本段落, 并排除列表、表格以及页眉页脚等非正文内容。核心是采用文档级别的语料库, 而不是句子级别的数据集(如Billion Word Benchmark),以便能够捕捉到更长的上下文关联。
3.2 微调BERT
采用简洁直观的方式进行模型微调较为理想化。这一方法得益于Transformer架构中自注意力机制的作用原理:由于Transformer架构中的自注意力机制使得BERT能够通过重新排列适当的输入与输出来进行跨任务学习——无论是处理单一文本还是包含两个子文本的任务(即所谓的文本文本)。针对需要处理文本文本的任务,在应用双向交叉注意力之前通常的做法是先分别编码每个文本文本片段(如Parikh等人的工作;Seo等人的研究)。而BERT则通过依赖于自注意力机制的方式将这两部分整合在一起:其优势在于能够同时捕捉两个子任务间的双向关联。
对于特定的任务,在BERT系统中整合输入数据并完成端到端微调工作。在输入部分包含以下四种类型的对齐数据:第一种是基于(1)定义的关系解释性对齐;第二种是基于(2)假设-前提式的假设推理对齐;第三种是基于(3)问答式的问题-答案对齐;第四种是基于(4)文本分类或序列标记退化形式的文本-空对齐。在输出部分包含两种类型的标记信息:第一种是序列级别的标记信息(如关系标记),第二类是单词级别的标注信息(如情感极性)。其中,“token”标识符用于表示经过预处理后的输出层符号级表示信息(如关系标记),而[CLS]标识符则用于分类任务中的整体判断标志信息(如蕴含关系或情感分析)。
相较于预训练模型而言,微调任务相对更为简便。基于相同的预训练模型架构,在本研究的所有实验结果均可在单一的Google Cloud TPU节点上完成任务在1小时内复现,并可在普通GPU环境下完成任务运行所需时间仅需几小时。在第四节所述的部分中详细阐述了该任务相关的具体细节。更多相关内容可参考附录A.5部分
4 实验
在本节中,我们将介绍11个NLP任务的BERT微调结果 。
4.1 GLUE
基于通用语言理解的评估基准构成了多种多样化的自然语言处理任务集合。有关该数据集的详细信息,请参阅附录B.1部分。
为了实现GLUE上的微调任务, 我们将基于第3节所述的输入序列(单个句子或一对句子), 并以第一个输入符号([CLS])标识为对应位置的那一份最终隐藏向量C∈RH作为聚合表示. 在微调过程中, 引入的新参数仅为分类层权重矩阵W∈RK×H, 其中K代表标签的数量. 通过计算C与W的乘积后再经过Softmax函数得到概率分布P=log(Softmax(CWT))
对于所有GLUE任务来说,在采用批量大小为32并对三个epoch的数据进行微调训练的同时,在开发集中确定了最优的微调学习率(分别为5\text{e}-\text{6}、4\text{e}-\text{6}、3\text{e}-\text{6}和2\text{e}-\text{6})。此外,在BERTLARGE模型中发现即使在小规模数据集上进行微调也可能出现不稳定现象因此我们进行了多次随机重启尝试,并在此基础上对模型进行了优化以确保选择最优版本。通过采用不同的微调数据配置及分类层架构我们在相同的预训练基础上重新启动多次优化过程从而实现了更好的效果。
结果如表1所示.BERTBASE和BERTLARGE在各个任务维度上均表现显著优于其他方法.相较于现有技术而言,BERTBASE和OpenAI GPT两者的模型架构基本一致.针对最大规模和最广为人知的GLUE基准任务,MNLI基准下,BERT达到了4.6%的绝对准确度水平.In the official GLUE leaderboard as of the date of this writing,BERTLARGE scored 80.5%, surpassing OpenAI GPT's 72.8%.

研究结果表明BERTLARGE在各类任务中均展现出显著优势
4.2 SQuAD v1.1
该数据集由斯坦福大学推出,并包含超过十万对问答数据;当提供一个问题及其在Wikipedia上包含答案的一个段落时,请确定问题的答案在该段落中的具体位置或范围。
如图1所示,在问答场景中(或问答任务中),我们将输入的问题与待回答的段落统一编码为一个压缩串(或称为序列)。问题部分会采用A型嵌入策略(或A嵌入),而待回答的段落则采用B型嵌入策略(或B嵌入)。在微调过程中(或微调期间),我们仅引入起始向量S∈RH和结束向量E∈RH这两个参数变量。对于待确定答案的第一个单词i来说,在计算其出现概率时(或概率计算步骤中),我们会先计算该单词与起始向量S之间的点积值(或点积运算结果),然后依次对整个段落中的所有单词执行Softmax运算(或Softmax操作)。

用于确定答案末尾的具体计算公式。
候选区间(从位置i到j)的得分为S乘以Ti加上E乘以Tj。
其中j大于等于i时作为预测的最大得分区间。
我们的目标是最优化正确起始和结束位置的概率总和。
模型经过三个完整的训练周期(epoch),采用学习率5e-5,并设置批量大小为32进行训练。

表2呈现了顶级排行榜条目及其对应的顶级发布系统的相关结果。SQuAD排行榜上的最高得分并未包含最新的公共基准数据集,并且其训练过程不依赖于现有公开数据。鉴于此,在开展SQuAD系统的微调训练前,我们进行了A/B测试以比较不同策略的效果。通过TriviaQA的第一次微调实验,在我们的系统中引入了适度的数据增强技术。
我们的性能最优系统在整体排行榜中胜出于顶级排行榜方案(F1提升至+1.5),而在单一领域则领先于全表对比方案(F1高出+1.3)。值得注意的是,在未引入TriviaQA微调数据的情况下(即可能仅会损失0.1至0.4个F1分数),该方案仍能显著超越当前所有现有方案。
4.3 SQuAD v2.0
SQuAD 2.0任务基于允许在所给段落中不提供简短答案的可能性对SQuAD 1.1问题定义进行了扩展,从而使得问题更加实用
基于该任务需求我们采用了扩展的SQuAD v1.1 BERT模型来进行处理工作

的得分进行比较。我们在

预测非空答案,在开发集上基于阈值τ进行F1最大化优化。该模型未使用TriviaQA数据作为训练基础。通过调整参数进行两轮微调训练,并将学习率设置为5×10^-5,采用48的批量大小进行训练。
结果与之前的排行榜条目及顶级出版作品相比,在排除了基于BERT技术作为其核心组件的情况下(如表3所示),我们发现比之前的最佳系统显著提升了5.1分贝的F1值。

4.4 SWAG
该对抗性生成数据集(SWAG)由113,000个样本对构成,用于完成示例,并通过常识下的逻辑推理过程进行评估。在此基础上,请提供一个句子,并从四个选项中选择最合适的后续内容。
当我们对SWAG数据集进行微调训练时,系统性地构建了四个输入序列.每个输入序列由给定句子A与其后续可能延伸的部分即句子B构成.为了实现这一目标,在系统中引入了一个独特的任务特定参数—一个向量V.该向量与[CLS]位置编码向量C进行点积计算,从而得出每个选项对应的分数值.随后通过应用一个softmax层来进行归一化处理.
我们进行了模型微调,并经过三个训练周期后将学习率设为2×10^-5、批次大小设为16。实验结果见表4。其中BERT-Large的表现较作者提出的ESIM+E bERT-Large系统提升了约27.1%,相比OpenAI的GPT模型则提升了约8.3%。

5 消融研究
尽管我们已经呈现了显著的实证结果, 但目前的结果未能明确区分BERT不同组件的作用. 在本节中, 我们对BERT的不同组件进行消融研究, 以更深入地理解其各自的重要性.
5.1 预训练任务的效果
我们重要观点之一是,BERT的深层双向性是最为关键的技术创新,这一优势得益于masked LM预训练技术的支持。为了验证这一论断,我们深入考察了两个新型模型,它们均采用了相同的预训练数据集以及一致的微调策略,同时遵循着统一的transformer参数设置
- No NSP: 采用基于“masked LM”(MLM)的方法进行训练,并未引入“下一句预测”(NSP)任务。
- LTR & No NSP: 在不涉及“下一句预测”任务的情况下,在LTRLM框架中进行建模。在此情况下,“每个输入字”的推断仅基于前后文信息,并未对任何位置应用mask处理。“这些限制同样适用于微调过程”。由于我们在预训练阶段就采用了双向结构,在后续的微调中继续维持这种结构并未带来优势。
该模型仅通过MLM的方式完成了预训练过程。“这与OpenAI GPT本身的架构非常相似”,但在实际应用中采用了更大规模的数据集及其输入编码方式以及独特的微调策略。
实验结果如表5所示。随后我们详细探讨了NSP任务所带来的影响。观察到,在移除NSP时会对QNLI、MNLI和SQuAD的表现产生显著削弱效果。这些观察结果凸显了我们所提出的预训练方法在提升先前得出有力实证结论方面的关键作用

随后
为了增强LTR系统的性能目标, 我们致力于在现有LTR系统架构之上构建一个带有运行初始化机制的BiLSTM模型, 以便实现系统的微调优化. 实验结果表明该方法取得了显著的进步, 然而这些成绩仍然未能达到预训练双向模型的水平.
我们意识到还可以分别训练LTR和RTL两种单向模型,并与类似的预训练语言模型如ELMo类似地将每个词表示为两个子模型的拼接结果。然而: (a)单向训练的成本是双向的一半;(b)对于如问答(QA)等需要上下文理解的任务而言, 这种分离方向的方式显得不够直观, 因为RTL模式无法明确区分答案的方向性;(c)从功能上说并没有超越传统的双向架构的优势, 因为传统架构允许根据任务需求自由选择左右语境信息
5.2 模型大小的影响
在本节中,我们进行了模型大小对微调任务准确率影响的研究。通过训练多个BERT架构实例(每个实例对应不同配置),我们探索了层深、隐藏单元数量以及注意力头数量对任务性能的具体影响效果。这些实验均采用了与之前描述一致的超参数设置及统一的训练策略

表6呈现了选定GLE任务 的详细结果分析。在表格中记录了五次随机微调重启过程中的开发集平均准确率。通过观察数据可以看出,在所有四个基准数据集上均实现了显著的精度提升效果——值得注意的是,在MRPC任务上表现尤为突出(因为该任务仅包含3600个词级别的训练示例),与初始任务目标存在较大差异性。令人意外的是,在已有研究基础上我们实现了如此显著的提升效果。近年来出现的最大规模transformer模型是由Vaswani等人(2017)提出的(其模型架构包括L=6层、H=1024维隐藏层以及A=16个注意力头),该模型总共有约1亿零三百万个可训练参数量;而相比之下,在2018年提出的AI-Rfou模型则采用了更大的架构设计:L=64层、H=512维隐藏层以及A=2个注意力头(总计约两百三十五百万个参数)。此外,BERTBASE版本包含超过一百一十万参数,BERTLARGE版本则拥有三百四十万参数规模
长期以来,人们已经认识到使得在大规模任务中获得持续的改进的方法之一是扩大模型规模。例如,在机器翻译和语言建模领域就可观察到这一现象(如表6所示)。然而我们发现即使缩小至极端的小规模模型也能在小规模任务上实现显著提升
5.3 基于特征的BERT方法
当前所呈现的所有BERT结果采用了微调策略 ,其中在一个预先训练好的模型基础上添加了一个简单的分类层,并且所有的参数均参与了下游任务的具体优化。然而,在这种情况下存在一些局限性:第一种情况是并非所有自然语言处理任务都可以通过Transformer编码器架构轻松建模,并因此需要引入特定于任务的设计方案。第二种情况则是能够预先计算一次训练数据集的整体表示方式,并在此基础上运用较为简单的模型进行多轮实验能够显著提升计算效率。
在本节里, 我们通过在CoNLL-2003 NER任务上生成类似于ELMo模型的预训练语境表示, 旨在针对基于特征的方法进行BERT不同形态的效果评估。为此, 沿用第4.3节所述之输入表示方案, 但采用了单个或多个层级激活机制, 而无需微调BERT任何参数。这些上下文嵌入则被用于构建初始阶段两个768维维度双向长短期记忆单元模块。

结果显示在表7中。最优执行方案是将经过预训练的Transformer模型前四个隐藏层中的词表示进行拼接操作,并且其性能相比完全微调模型仅低0.3 F1分。这一结果表明,在微调与基于特征的方法中,BERT表现出了显著的有效性。
6 结论
基于迁移学习的方法在语言模型领域取得了显著进展
附录




