电信保温杯笔记——NLP经典论文:BERT

电信保温杯笔记——NLP经典论文:BERT

  • 论文
  • 介绍
    • ELMo 对输入的表示
    • OpenAI GPT 对输入的表示
    • BERT 对输入的表示
  • 模型结构
    • 整体结构
    • 输入
    • 模型参数量
      • Input Embedding层
      • Encoder 层
        • Multi-Head Attention
        • Add & Norm层
        • Position-wise Feed-Forward Networks
        • Add & Norm层
      • 总共参数
  • 预训练
  • 微调
  • 文章结构介绍
  • 文章翻译
    • Abstract
    • 1 Introduction
    • 2 Related Work
      • 2.1 Unsupervised Feature-based Approaches
      • 2.2 Unsupervised Fine-tuning Approaches
      • 2.3 Transfer Learning from Supervised Data
    • 3 BERT
      • 3.1 Pre-training BERT
      • 3.2 Fine-tuning BERT
    • 4 Experiments
      • 4.1 GLUE
      • 4.2 SQuAD v1.1
      • 4.3 SQuAD v2.0
      • 4.4 SWAG
    • 5 Ablation Studies
      • 5.1 Effect of Pre-training Tasks
      • 5.2 Effect of Model Size
      • 5.3 Feature-based Approach with BERT
    • 6 Conclusion
    • Appendix for “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”
      • A Additional Details for BERT
        • A.1 Illustration of the Pre-training Tasks
        • A.2 Pre-training Procedure
        • A.3 Fine-tuning Procedure
        • A.4 Comparison of BERT, ELMo ,and OpenAI GPT
        • A.5 Illustrations of Fine-tuning on Different Tasks
      • B Detailed Experimental Setup
        • B.1 Detailed Descriptions for the GLUE Benchmark Experiments.
      • C Additional Ablation Studies
        • C.1 Effect of Number of Training Steps
        • C.2 Ablation for Different Masking Procedures
  • 相关视频
  • 相关的笔记
  • 相关代码
    • pytorch
    • tensorflow
      • keras
  • pytorch API:
  • tensorflow API

论文

NLP论文笔记合集(持续更新)

原论文:《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》

《BERT Rediscovers the Classical NLP Pipeline》对每一层的表示做出了解释,详细参考NLP论文:BERT各层表示在不同NLP任务上的解释 笔记。

介绍

2018-10发表的文章,提出了 BERT 模型,可为其他任务提供预训练的输入表示和基于数据集和任务的微调,效果比 ELMo 和 GPT 要好。

ELMo 对输入的表示

ELMo 使用多个 BiLSTM 层,将输入在不同层中进行表示,然后将这些表示进行 weighted sum,可用于下游任务作为额外的输入表示。对于下游任务的输入来说,这是一种基于特征的表示方法。ELMo 只是将输入以 LTR(Left-To-Right)和 RTL(Right-To-Left)的方式进行读取,即从前往后和从后往前地对文本进行读取,将这2种方式获得的输入表示进行 weighted sum,这只是将浅层的表示进行叠加。可以参考:NLP经典论文:ELMo 笔记。

OpenAI GPT 对输入的表示

这里的 OpenAI GPT 应该是指 GPT-1,尽管原文中引用文献和 GPT-1所指的文献不一样。
OpenAI GPT 的引用文献:《Improving language understanding with unsupervised learning》
GPT-1 的引用文献:《Improving Language Understanding by Generative Pre-Training》

GPT的结构与 Transformer 中的 Decoder 一样,使用 masked attention,可以参考:NLP经典论文:Attention、Self-Attention、Multi-Head Attention、Transformer 笔记,它使得当前输入 token 只能关注到前文的 token,这是深层的基于上文的表示。

BERT 对输入的表示

它的结构与 Transformer 中的 Encoder 一样,同样参考:NLP经典论文:Attention、Self-Attention、Multi-Head Attention、Transformer 笔记,它允许每一个 token 都能关注到所有的 token,从而得到深层的基于上下文的表示。

《BERT Rediscovers the Classical NLP Pipeline》对每一层的表示做出了解释,详细参考NLP论文:BERT各层表示在不同NLP任务上的解释 笔记。


同时它的名字也和美国育儿卡通节目《芝麻街》里面的一个角色一样。
电信保温杯笔记——NLP经典论文:BERT_第1张图片

模型结构

整体结构

电信保温杯笔记——NLP经典论文:BERT_第2张图片
N N N 个 Encoder 层堆叠构成了一个 Encoder,这个 Encoder 就是 BERT。 Encoder 详细结构可以参考NLP经典论文:Attention、Self-Attention、Multi-Head Attention、Transformer 笔记。

输入

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

使用带有30522个 token 词汇表的词条 embedding(Wu et al.,2016)。每个序列的第一个 token 总是一个特殊的分类 token([CLS])。与该 token 相对应的最终隐藏状态用作序列的总表示,这样句子对被压缩成一个单一的序列,用于分类任务的输入。用两种方式区分句子。首先,我们用一个特殊的 token([SEP])将它们分开。其次,我们向每个 token 添加一个学习后的 embedding,指示它是属于句子 A 还是句子 B。如下图所示,我们将输入 embedding表示为 E ∈ R H E\in R^H ERH,特殊 token ([CLS])的最终隐藏向量表示为 C ∈ R H C\in R^H CRH,第 i i i 个输入 token 的最终隐藏向量为 T i ∈ R H T_i\in R^H TiRH

上图中的 Input Embedding 结构如下,对于给定的 token,其输入表示是通过对相应的 token、segment 和位置 embedding 求和来构造的。:
电信保温杯笔记——NLP经典论文:BERT_第3张图片

模型参数量

主要展示两种模型尺寸的结果:
BERT BASE _{\textbf{BASE}} BASE(N=12,H=768,A=12,总参数=110M)。
BERT LARGE _{\textbf{LARGE}} LARGE(N=24,H=1024,A=16,总参数=340M)。
将 Encoder 层数表示为 N N N,隐藏层尺寸表示为 H H H,self-attention head 的数量表示为 A A A

模型参数量将以 BERT BASE _{\text{BASE}} BASE 为例,参考小白Bert系列-参数计算。

电信保温杯笔记——NLP经典论文:BERT_第4张图片

Input Embedding层

Token Embeddings:总词汇是30522每个输出维度都是768,参数量是30522*768。

Position Embeddings:transformer 中位置信息是通过 sin 和 cos 生成,但是在 bert 中是学出来了(原文中说的应该是的数据量足,能学出来)最大长度是512,所以这里参数量是512*768。

Segment Embeddings:用1和0表示,所以参数是2*768。

所以这个部分就是 (30522+512 + 2)* 768=23835648‬。

Encoder 层

Multi-Head Attention

multi-head因为分成12份

单个head的参数是 768 * 768/12 * 3

12个head就是 768 * 768/12 * 3 * 12

紧接着将多个head的结果进行concat再进行线性变换,此时W的大小是768 * 768

所以这个部分是768 * 768/12 * 3 * 12 + 768 * 768=2359296‬

Add & Norm层

Add 层是残差连接,没有参数。

Norm层是 layer normalization 归一化层,每个维度有两个参数 γ \gamma γ β \beta β:768 * 2 = 1536

Position-wise Feed-Forward Networks

它包含3个结构:一个线性层,一个ReLU层和一个线性层

第一个线性层:768*3072(原文中4H长度) + 3072=2360064

第二个线性层:3072*768+768=2362368

Add & Norm层

768 * 2 = 1536

总共参数

Input Embedding层 + Encoder 层*12

23835648‬+(2359296‬+1536+2360064+2362368+1536)* 12= 108,853,248 约等于109M参数

预训练

电信保温杯笔记——NLP经典论文:BERT_第5张图片
预训练阶段,使用2个训练目标同时来对模型进行预训练,Masked LM 和 Next Sentence Prediction (NSP)。

Task #1: Masked LM \quad\quad 随机 mask 一定百分比的输入 token,然后预测这些 masked token。我们将此过程称为“masked LM”(MLM),也就是通常的完形填空任务。与 masked token 相对应的最终隐藏向量输入到线性层 + softmax层中预测被 mask 掉的 token,只预测 masked 词,而不是重建整个输入。

尽管这允许我们获得双向预训练模型,但缺点是我们在预训练和微调之间产生了不一致,因为在微调期间 [MASK] token 不会出现。为了缓解这种情况,我们并不总是用实际的 [MASK] token 替换“masked”词。随机选择15%的 token 进行预测。如果选择了第 i i i 个 token,我们将第 i i i 个 token(1)80%几率替换为 [MASK] token(2)10%几率替换为随机 token(3)10%几率不做替换。然后,将最终隐藏向量 T i T_i Ti 输入到线性层 + softmax层中预测原始 token。

假设未标记的句子是 my dog is hairy,在随机 masking 过程中,我们选择了第4个 token(对应于hairy),我们的 masking 过程可以通过

• 80%的情况:将单词替换为 [MASK] token,例如,my dog is hairy→ my dog is [MASK]

• 10%的情况:用随机词替换该词,例如,my dog is hairy→ my dog is apple

• 10%的情况:保持单词不变,例如,my dog is hairy→ my dog is hairy。

Task #2: Next Sentence Prediction (NSP) \quad\quad 许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系,而语言建模并不能直接捕获这些关系。为了训练一个理解句子关系的模型,我们预先训练了一个二值化的下一个句子预测任务,该任务可以从任何单语语料库生成。具体来说,当为每个预训练示例选择句子 A 和 B 时,50%的几率 B 是 A 后面的实际下一个句子(标记为 IsNext),50%的几率 B 是语料库中的随机句子(标记为 NotNext)。上图所示,最终隐藏向量 C C C 输入到2分类器用于下一句预测(NSP)。

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

Input = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]

Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]

Label = NotNext

微调

电信保温杯笔记——NLP经典论文:BERT_第6张图片
在上图中可以看到对不同任务进行微调的示例。特定任务模型是通过将 BERT 与一个额外的输出层合并而成的,即红色箭头的地方,因此需要从头学习最少数量的参数。在这些任务中,(a)和(b)是序列级任务,而(c)和(d)是 token 级任务。序列级表示指的是包含多个 token 的输入序列的信息融合到一个最终隐藏状态中的表示。E 表示输入 embedding, T i T_i Ti 表示 token i 的语境化表示,[CLS] 是用于分类输出的特殊符号,[SEP] 是用于分离非连续 token 序列的特殊符号。

(c)任务中,给定一个问题和一段维基百科中包含答案的文章,任务是预测文章中的答案文本范围。输入为问题和段落,问题使用 A embedding,段落使用 B embedding。在微调过程中,我们只引入一个起始位置向量 S ∈ R H S\in R^H SRH 和一个结束位置向量 E ∈ R H E\in R^H ERH。单词 i i i 作为答案范围起始位置的概率由 T i T_i Ti S S S 之间的点积算得,然后经过关于段落中所有单词的softmax: P i = e x p ( S ⋅ T i ) ∑ j e x p ( S ⋅ T j ) P_i=\frac{exp(S\cdot T_i)}{\sum _jexp(S\cdot T_j)} Pi=jexp(STj)exp(STi)答案范围结束位置使用类似公式。从位置 i i i 到位置 j j j 的候选范围的得分定义为 S ⋅ T i + E ⋅ T j S\cdot T_i+E\cdot T_j STi+ETj,其中 i ≥ j i\geq j ij 的最大得分范围被用作预测。训练目标是正确起始位置和结束位置的对数概率之和。将没有答案的问题视为在 [CLS] token 处有答案的起始和结束位置。对于预测,无答案的得分: s n u l l = S ⋅ C + E ⋅ C s_{null}=S\cdot C+E\cdot C snull=SC+EC ,最佳非空答案的得分: s i , j ^ = max ⁡ j ≥ i S ⋅ T i + E ⋅ T j \hat{s_{i,j}}=\max _{j\geq i} S\cdot T_i+E\cdot T_j si,j^=maxjiSTi+ETj。当 s i , j ^ > s n u l l + τ \hat{s_{i,j}} > s_{null}+\tau si,j^>snull+τ 时,我们预测一个非空答案,其中阈值 τ \tau τ 通过在数据集上以最大化 F1 获得。

文章结构介绍

第二章:基于无监督数据生成特征的表示方法,基于无监督数据微调模型的方法,基于有监督数据的迁移学习的相关工作。

第三章: BERT 的预训练和微调方法。

第四章:实验结果,基于 GLUE 基准的任务、2个问答任务、常识推理任务的结果。

第五章:消融实验,什么是消融实验(Ablation experiment)?通过控制变量法,阐明了该文章预训练技巧带来模型性能的提升;模型尺寸的影响;像 ELMo 那样产生特征表示给下游任务带来性能的提升。

附录A:讲述预训练任务;预训练过程;微调过程;BERT, ELMo 和
OpenAI GPT的对比;不同任务进行微调的示例。

附录B:所有的实验任务所用的数据集。

附录C:训练步数的影响;不同 masking 策略的效果。

文章翻译

Abstract

我们介绍了一种新的语言表示模型,称为 BERT,它代表源自 Transformer 的双向 Encoder 表示模型。与最近的语言表示模型(Peters等人,2018a;Rad ford等人,2018)不同,BERT 被设计为通过在所有层中对基于前文和基于后文进行联合,从未标记文本中预训练深层双向表示。结果是,预训练好的 BERT 模型可以通过一个额外的输出层进行微调,从而为多种的任务(如问答系统和语言推理)提供最先进的模型,而无需对特定于任务的体系结构进行实质性修改。

(注:最近的语言表示模型指的是 ELMo 和 OpenAI GPT,感觉这个 GPT 应该是 GPT-1。)

BERT在概念上很简单,在实际运用中也很强大。它在11项自然语言处理任务中获得了最先进的结果,包括将 GLUE 分数提高到80.5%(绝对提高7.7%),MultiNLI(多体裁自然语言推理)准确性提高到86.7%(绝对提高4.6%),SQuAD v1.1 QA 测试集上 F1 提高到93.2(绝对提高1.5分),SQuAD v2.0 测试集上 F1 提高到83.1(5.1分绝对改善)。

1 Introduction

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

将预先训练好的语言表示应用于下游任务有两种现有策略:基于特征的和微调。基于特征的方法,如 ELMo(Peters等人,2018a),使用特定于任务的体系结构,包含预训练的表示作为附加特征。微调方法,如生成式预训练 transformer(OpenAI GPT)(Radford et al.,2018),引入最少的特定于任务的参数,并通过微调所有预训练参数对下游任务进行训练。这两种方法在预训练时使用相同的目标函数,即使用单向语言模型来学习一般的语言表示。

我们认为当前的技术限制了预训练表示的能力,特别是对于微调方法。主要的限制是标准语言模型是单向的,这限制了在预训练期间可以使用的体系结构的选择。例如,在 OpenAI GPT 中,作者使用从前往后的体系结构,其中每个 token 只能关注 transformer self-attention 层中的前文 token(Vaswani等人,2017)。这种限制对于句子级任务来说是次优的,并且在将基于微调的方法应用于 token 级任务(如问答)时可能非常有害,因为在这些任务中,从两个方向结合上下文是至关重要的。

在本文中,我们通过提出 BERT:transformer 的双向 encoder 表示,改进了基于微调的方法。受完形填空任务(Taylor,1953)的启发,BERT 通过使用“masked 语言模型”(MLM)预训练来缓解前面提到的单向性约束。masked 语言模型随机 mask 掉输入中的一些 token,其目的是仅根据其上下文预测 masked 词的原始词汇 id。与从前往后的语言模型预训练不同,MLM 使表示能够融合前文和后文,这使我们能够预训练深度双向 transformer。除了 masked 语言模型外,我们还使用了“下一句预测”任务,该任务共同预训练文本对的表示。我们的论文贡献如下:

• 我们证明了双向预训练对于语言表征的重要性。与 Radford et al.(2018)使用单向语言模型进行预训练不同,BERT使用 masked 语言模型实现预训练的深度双向表示。这也与 Peters et al.(2018a)形成对比,Peters et al.(2018a)使用独立训练的前往后和后往前 LM 的浅层串联。

• 我们表明,预训练的表示减少了对精心设计的特定于任务的许多体系结构的需求。BERT 是第一个基于微调的表示模型,它在大量句子级和 token 级任务上表现出最先进的性能,优于许多特定于任务的体系结构。

• BERT 提高了11项NLP任务的最新技术水平。代码和预训练的模型在https://github.com/google-research/bert.

2 Related Work

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

2.1 Unsupervised Feature-based Approaches

几十年来,学习广泛适用的词表示一直是一个活跃的研究领域,包括非神经(Brown等人,1992年;Ando和Zhang,2005年;Blitzer等人,2006年)和神经(Mikolov等人,2013年;Pennington等人,2014年)方法。预训练的 word embedding 是现代 NLP 系统的一个组成部分,与从头开始学习的 embedding 相比有显著的改进(Turian et al.,2010)。为了预训练 word embedding 向量,使用了从前到后的语言建模(Mnih和Hinton,2009),以及在前文和后文中区分正确单词和错误单词的语言建模(Mikolov等人,2013)。

这些方法已被推广到更大的输入粒度,如句子 embedding(Kiros等人,2015;Logeswaran和Lee,2018)或段落 embedding(Le和Mikolov,2014)。为了训练句子的表示,之前的研究使用了对下一候选句进行排序的语言模型(Jernite等人,2017;Logeswaran和Lee,2018),根据前一句的表示从前往后生成下一句的词(Kiros等人,2015),或去除自动编码器派生模型的噪声(Hill等人,2016)。

ELMo及其前身(Peters et al.,2017,2018a)从不同的维度概括了传统的 word embedding 研究。它们从从前往后和从后往前的语言模型中提取上下文相关的特征。每个 token 的语境化表示是从前往后和从后往前的表示的拼接。当将语境化的 word embedding 与现有特定任务的体系结构相结合时,ELMo 提高了几个主要的 NLP 基准(Peters等人,2018a)的技术水平,包括问答(Rajpurkar等人,2016年)、情感分析(Socher等人,2013年)和命名实体识别(Tjong Kim Sang和De Meulder,2003年)。Melamud等人(2016年)提出通过一项任务学习语境化的表示,即使用 LSTM 从前文和后文预测单个单词。与 ELMo 类似,他们的模型是基于特征的,而不是深度双向的。Fedus等人(2018)表明完形填空任务可以用来提高文本生成模型的稳健性。

2.2 Unsupervised Fine-tuning Approaches

与基于特征的方法一样,第一种方法仅在无标记文本中预先训练 word embedding 参数的情况下,才能往微调这个方向走(Col lobert和Weston,2008)。

最近,产生语境化的 token 表示的句子或文档 encoder 已从无标记文本中预训练,并针对有监督的下游任务进行微调(Dai和Le,2015;Howard和Ruder,2018;Radford等人,2018)。这些方法的优点是很少有参数需要从头学习。至少部分由于这一优势,OpenAI GPT(Radford等人,2018年)在 GLUE 基准测试的许多句子级任务上取得了显著的最新成果(Wang等人,2018a)。从前往后语言建模和自动 encoder 已用于此类模型的预训练(Howard和Ruder,2018;Radford等人,2018;Dai和Le,2015)。

2.3 Transfer Learning from Supervised Data

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

3 BERT

本节将介绍 BERT 及其详细实现。在我们的框架中有两个步骤:预训练和微调。在预训练期间,模型在不同的预训练任务中基于无标记的数据进行训练。对于微调,首先使用预训练参数初始化 BERT 模型,然后使用来自下游任务的标记数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。图1中的问答示例将作为本节的运行示例。
电信保温杯笔记——NLP经典论文:BERT_第7张图片
BERT 的一个显著特点是其跨任务的统一体系结构。预训练的体系结构和最终的下游体系结构之间的差异最小。

Model Architecture \quad\quad BERT 的模型架构是一个多层双向 transformer encoder ,基于Vaswani等人(2017)中描述的原始实现,并在 tensor2tensor 库 1 ^1 1中发布。由于 transformer 的使用已变得普遍,且我们的实现几乎与原始版本相同,因此我们将省略对模型架构的详尽背景描述,并向读者介绍Vaswani等人(2017)以及优秀指南,如“注释的 transformer ” 2 ^2 2

在这项工作中,我们将层数(即 transformer 块)表示为 L L L,隐藏层尺寸表示为 H H H,self-attention head 的数量表示为 A A A 3 ^3 3。我们主要展示两种模型尺寸的结果:BERT BASE _{\textbf{BASE}} BASE(L=12,H=768,A=12,总参数=110M)和BERT LARGE _{\textbf{LARGE}} LARGE(L=24,H=1024,A=16,总参数=340M)。

为了便于比较,选择 BERT BASE _{\text{BASE}} BASE 的模型尺寸与 OpenAI GPT 相同。然而,关键的是,BERT transformer 使用双向 self-attention,而 GPT transformer 使用约束 self-attention,其中每个 token 只能关注其上文。 4 ^4 4

1 ^1 1https://github.com/tensorflow/tensor2tensor
2 ^2 2http://nlp.seas.harvard.edu/2018/04/03/attention.html
3 ^3 3在所有实验中,我们将前馈/滤波器大小设置为 4 H 4H 4H,即,对于 H H H =768,设置为3072;对于 H H H =1024,设置为4096。
4 ^4 4我们注意到,在文献中,双向 transformer 通常被称为“transformer encoder ”,而仅基于上文的版本被称为“transformer decoder”,因为它可以用于文本生成。

Input/Output Representations \quad\quad 为了使 BERT 能够处理各种下游任务,我们的输入表示能够在一个 token 序列中明确地表示单个句子和一对句子(例如,< 问题,答案>) 。在整个工作中,“句子”可以是连续文本的任意跨度,而不是实际的语言句子。“序列”是指输入到 BERT 的 token 序列,可以是一个句子或两个句子组合在一起。

我们使用带有30000个 token 词汇表的词条 embedding(Wu et al.,2016)。每个序列的第一个 token 总是一个特殊的分类 token([CLS])。与该 token 相对应的最终隐藏状态用作分类任务的序列总表示。句子对被压缩成一个单一的序列。我们用两种方式区分句子。首先,我们用一个特殊的 token([SEP])将它们分开。其次,我们向每个 token 添加一个学习后的 embedding,指示它是属于句子 A 还是句子 B。如图1所示,我们将输入 embedding表示为 E E E,特殊 token ([CLS])的最终隐藏向量表示为 C ∈ R H C\in R^H CRH,第 i i i 个输入 token 的最终隐藏向量为 T i ∈ R H T_i\in R^H TiRH

对于给定的 token,其输入表示是通过对相应的 token、segment 和位置 embedding 求和来构造的。这种结构的可视化如图2所示。
电信保温杯笔记——NLP经典论文:BERT_第8张图片

3.1 Pre-training BERT

与Peters等人(2018a)和Radford等人(2018)不同,我们不使用传统的从前往后或从后往前的语言模型来预训练 BERT。相反,我们使用两个无监督任务对 BERT 进行预训练,如本节所述。图1的左半部分显示了该步骤。

Task #1: Masked LM \quad\quad 直观地说,我们有理由相信,深度双向模型严格地比从前往后模型,或从前往后与从后往前模型的浅层连接更强大。不幸的是,标准的条件语言模型只能从前往后或从后往前进行训练,因为双向条件作用将允许每个词间接地“看到自己”,并且该模型可以在多层上下文中轻松地预测目标词。

为了训练深度双向表示,我们只需随机 mask 一定百分比的输入 token,然后预测这些 masked token。我们将此过程称为“masked LM”(MLM),尽管在文献中它通常被称为完形填空任务(Taylor,1953)。在这种情况下,与 mask token 相对应的最终隐藏向量被馈送到基于词汇表的输出 softmax 中,如在标准LM中。在我们所有的实验中,我们在每个序列中随机屏蔽15%的所有词条 token。与去噪自动 encoder (Vincent et al.,2008)不同,我们只预测 masked 词,而不是重建整个输入。

尽管这允许我们获得双向预训练模型,但缺点是我们在预训练和微调之间产生了不一致,因为在微调期间 [MASK] token 不会出现。为了缓解这种情况,我们并不总是用实际的 [MASK] token 替换“masked”词。训练数据生成器随机选择15%的 token 进行预测。如果选择了第 i i i 个 token,我们将第 i i i 个 token 替换为(1)80%几率的 [MASK] token(2)10%几率的随机 token(3)10%几率的未更改的第 i i i 个 token。然后,将 T i T_i Ti 用于预测具有交叉熵损失的原始 token。我们在附录C.2中比较了该步骤的变化。

Task #2: Next Sentence Prediction (NSP) \quad\quad 许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系,而语言建模并不能直接捕获这些关系。为了训练一个理解句子关系的模型,我们预先训练了一个二值化的下一个句子预测任务,该任务可以从任何单语语料库生成。具体来说,当为每个预训练示例选择句子 A 和 B 时,50%的几率 B 是 A 后面的实际下一个句子(标记为 IsNext),50%的几率 B 是语料库中的随机句子(标记为 NotNext)。如图1所示, C C C 用于下一句预测(NSP) 5 ^5 5。尽管它很简单,我们在第5.1节中证明了针对该任务的预训练对 QA 和 NLI 都非常有益 6 ^6 6。NSP 任务与Jernite et al.(2017)和Logeswaran and Lee(2018)中使用的表征学习密切相关。然而,在以前的工作中,只有句子 embedding 被 迁移到下游任务,其中 BERT 转移所有参数来初始化终端任务模型参数。

5 ^5 5最终的模型在 NSP 上达到97%-98%的精度。
6 ^6 6向量 C C C 在没有微调的情况下不是有意义的句子表示,因为它是用 NSP 训练的。

Pre-training data \quad\quad 预训练步骤在很大程度上遵循了关于语言模型预训练的现有文献。对于预训练语料库,我们使用BooksCorpus(8亿字)(Zhu等人,2015年)和英语维基百科(2.5亿字)。对于维基百科,我们只提取文本段落,而忽略列表、表格和标题。为了提取长的连续序列,使用文档级语料库而不是像十亿字基准(Chelba et al.,2013)这样的混合句子级语料库是至关重要的。

3.2 Fine-tuning BERT

微调是直接的,因为 Transformer 中的 self-attention 机制可以通过交换适当的输入和输出来模拟许多下游任务,无论这些任务涉及单个文本还是文本对。对于涉及文本对的应用,一种常见模式是在应用双向交叉 attention 之前对文本对进行独立编码,如Parikh等人(2016);Seo等人(2017年)。相反,BERT 使用 self-attention 机制来统一这两个阶段,因为使用 self-attention 编码串联文本对有效地囊括两个句子之间的双向交叉 attention。

对于每个任务,我们只需将特定于任务的输入和输出插入到 BERT 中,并端到端微调所有参数。在输入端,来自预训练的句子 A 和句子 B 类似于(1)含义解释中的句子对,(2)事物推断中的假设-前提对,(3)问答中的问题-答案对,以及(4)在文本分类或序列标记中的简并的文本-∅对。在输出时,token 表示被馈送到输出层用于 token 级任务,例如序列标记或问答,并且 [CLS] 表示被馈送到输出层用于分类,例如事物推断或情感分析。

与预训练相比,微调相对计算复杂度低。从完全相同的预训练模型 7 ^7 7开始,本文中的所有结果可以在单个云 TPU 上复现顶多需要1小时,或在 GPU 上顶多需要几个小时。我们在第4节的相应小节中描述了特定于任务的详细信息。更多详情见附录A.5。

7 ^7 7例如,在一个云TPU上,可以在大约30分钟内对 BERT SQuAD 模型进行训练,以获得91.0%的 F1 验证分数。

4 Experiments

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

4.1 GLUE

通用语言理解评估(GLUE)基准(Wang等人,2018a)是各种自然语言理解任务的集合。GLUE 数据集的详细说明见附录B.1。

为了对 GLUE 进行微调,我们按照第3节所述表示输入序列(对于单个句子或句子对),并使用与第一个输入 token([CLS])相对应的最终隐藏向量 C ∈ R H C\in R^H CRH 作为总表示。微调期间唯一引入的新参数是分类层权重 W ∈ R K × H W\in R^{K\times H} WRK×H,其中 K K K 是标签的数量。我们用 C C C W W W 计算标准分类损失,例如, log ⁡ ( s o f t m a x ( C W T ) ) . \log(softmax(CW^T )). log(softmax(CWT)).
电信保温杯笔记——NLP经典论文:BERT_第9张图片
8 ^8 8见 https://gluebenchmark.com/faq 的 (10) 。

我们使用32的 batch size,并对所有 GLUE 任务的数据进行3个 epoch 的微调。对于每个任务,我们在开发集上选择最佳微调学习率(5e-5、4e-5、3e-5和2e-5)。此外,对于 BERT LARGE _{\text{LARGE}} LARGE,我们发现在小数据集上微调有时是不稳定的,因此我们运行了几次随机重启,并在开发集上选择了最佳模型。对于随机重启,我们使用相同的预训练的试点,但执行不同的微调数据打乱和分类器层初始化。 9 ^9 9

9 ^9 9Glue 的数据分布不包括测试标签,我们只分别为 BERT BASE _{\text{BASE}} BASE 和 BERT LARGE _{\text{LARGE}} LARGE 上传了一个GLUE评估服务器。

结果见表1。BERT BASE _{\text{BASE}} BASE 和 BERT LARGE _{\text{LARGE}} LARGE 在所有任务上都比其他模型表现出色,与现有技术相比,平均精度分别提高了4.5%和7.0%。注意,除了 attention masking 之外,BERT BASE _{\text{BASE}} BASE 和 OpenAI GPT 在模型架构方面几乎是相同的。对于最大和最广为报道的 GLUE 任务,MNLI,BERT 获得了4.6%的绝对精度提高。在官方 GLUE 排行榜 10 ^{10} 10中,BERT LARGE _{\text{LARGE}} LARGE 获得80.5分,而 OpenAI GPT 获得72.8分截止本文写作时。

10 ^{10} 10https://gluebenchmark.com/leaderboard

我们发现 BERT LARGE _{\text{LARGE}} LARGE 在所有任务中都显著优于 BERT BASE _{\text{BASE}} BASE ,尤其是那些训练数据很少的任务。第5.2节更深入地探讨了模型尺寸的影响。

4.2 SQuAD v1.1

斯坦福问答数据集(SQuAD v1.1)收集了10万对众包问答对(Rajpurkar等人,2016)。给定一个问题和一段维基百科中包含答案的文章,任务是预测文章中的答案文本范围。

如图1所示,在问答任务中,我们将输入的问题和段落表示为单个压缩序列,问题使用 A embedding,段落使用 B embedding。在微调过程中,我们只引入一个起始位置向量 S ∈ R H S\in R^H SRH 和一个结束位置向量 E ∈ R H E\in R^H ERH。单词 i i i 作为答案范围起始位置的概率由 T i T_i Ti S S S 之间的点积算得,然后经过关于段落中所有单词的softmax: P i = e x p ( S ⋅ T i ) ∑ j e x p ( S ⋅ T j ) P_i=\frac{exp(S\cdot T_i)}{\sum _jexp(S\cdot T_j)} Pi=jexp(STj)exp(STi)答案范围结束位置使用类似公式。从位置 i i i 到位置 j j j 的候选范围的得分定义为 S ⋅ T i + E ⋅ T j S\cdot T_i+E\cdot T_j STi+ETj,其中 i ≥ j i\geq j ij 的最大得分范围被用作预测。训练目标是正确起始位置和结束位置的对数概率之和。我们微调了3个 epoch,学习率为5e-5,batch size 为32。

表2显示了顶级排行榜记录以及顶级的发布系统的结果(Seo等人,2017年;Clark和Gardner,2018年;Peters等人,2018a;Hu等人,2018年)。SQuAD 排行榜中的排名靠前的结果没有可用的最新系统公开描述 11 ^{11} 11,并且允许在训练其系统时使用任何公共数据。因此,我们在我们的系统中使用适度的数据扩充,在基于 SQuAD 进行微调之前,首先基于 TriviaQA 进行微调(Joshi et al.,2017)。

11 ^{11} 11Yu等人(2018)对 QANet 进行了描述,但该系统在出版后有了实质性改进。
电信保温杯笔记——NLP经典论文:BERT_第10张图片
我们的最佳性能系统在集成方面的性能比排行榜榜首系统高出1.5个 F1 百分点,作为单一系统的性能比排行榜榜首系统高出1.3个 F1 百分点。事实上,我们的单 BERT 模型在 F1 成绩方面优于顶级集成系统。如果没有 TriviaQA 微调数据,我们只会损失0.1-0.4 的F1,仍然远远超过所有现有系统 12 ^{12} 12

12 ^{12} 12我们使用的TriviaQA数据由TriviaQA Wiki中的段落组成,这些段落由文档中的前400个 token 组成,其中至少包含一个提供的可能答案。

4.3 SQuAD v2.0

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

我们使用一种简单的方法来扩展此任务的 SQuAD 1.1 BERT 模型。我们将没有答案的问题视为在 [CLS] token 处有答案的起始和结束位置。答案的起始和结束位置的概率空间被扩展以包括 [CLS] token 的位置。对于预测,我们比较了无答案的得分: s n u l l = S ⋅ C + E ⋅ C s_{null}=S\cdot C+E\cdot C snull=SC+EC 和最佳非空答案的得分: s i , j ^ = max ⁡ j ≥ i S ⋅ T i + E ⋅ T j \hat{s_{i,j}}=\max _{j\geq i} S\cdot T_i+E\cdot T_j si,j^=maxjiSTi+ETj。当 s i , j ^ > s n u l l + τ \hat{s_{i,j}}>s_{null}+\tau si,j^>snull+τ 时,我们预测一个非空答案,其中阈值 τ \tau τ 通过在数据集上以最大化 F1 获得。我们没有对这个模型使用 TriviaQA 数据。我们对两个 epoch 进行了微调,学习率为5e-5,batch size 为48。

表3显示了与之前的排行榜记录和顶级发布作品(Sun等人,2018;Wang等人,2018b)相比的结果,不包括使用 BERT 作为其组件之一的系统。我们观察到,与以前的最佳系统相比,F1 提高了5.1。
电信保温杯笔记——NLP经典论文:BERT_第11张图片

4.4 SWAG

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

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

我们对模型进行了3个 epoch 的微调,学习率为2e-5,batch size 为16。结果见表4。BERT LARGE _{\text{LARGE}} LARGE 的性能比作者的基线 ESIM+ELMo 系统高出27.1%,比 OpenAI GPT 高出8.3%。
电信保温杯笔记——NLP经典论文:BERT_第12张图片

5 Ablation Studies

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

(注:什么是消融实验(Ablation experiment)?)

5.1 Effect of Pre-training Tasks

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

No NSP:一种双向模型,使用“masked LM”(MLM)进行训练,但没有“下一句预测”(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 上的表现大幅下降。
电信保温杯笔记——NLP经典论文:BERT_第13张图片
(注:这里的 + BiLSTM 应该是 LTR & No NSP + BiLSTM)

对于 SQuAD 来说,直觉上很清楚,LTR 模型在 token 预测方面表现不佳,因为 token 级的隐藏状态没有下文信息。为了真正地加强 LTR 系统,我们在顶部添加了一个随机初始化的 BiLSTM。这确实显著改善了 SQuAD 的结果,但结果仍然比预训练的双向模型差得多。BiLSTM 会影响 GLUE 任务的性能。

我们认识到,也可以训练单独的 LTR 和 RTL 模型,并像 ELMo 那样将每个 token 表示为两个模型的串联。然而:(a)这是一个双向模型的两倍计算花费;(b) 对于像 QA 这样的任务,这是不直观的,因为 RTL 模型无法将问题的答案作为条件;(c) 这严格地说,它不如深度双向模型强大,因为它可以在每一层使用上文和下文。

5.2 Effect of Model Size

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

所选的 GLUE 任务的结果如表6所示。在此表中,我们展现了5次随机重新启动微调的平均开发集精度。我们可以看到,更大的模型导致所有四个数据集的准确度都有了严格的提高,即使对于 MRPC,它只有3600个被标记的训练示例,并且与训练前任务有很大的不同。与现有文献相比,我们能够在已经相当大的模型之上实现如此显著的改进,这也许也令人惊讶。例如,Vaswani等人(2017年)研究的最大 Transformer 是(L=6,H=1024,A=16), encoder 参数为100M,我们在文献中发现的最大 Transformer 是(L=64,H=512,A=2),参数为235M(al Rfou等人,2018年)。相比之下,BERT BASE _{\text{BASE}} BASE 包含110M参数, BERT LARGE _{\text{LARGE}} LARGE 包含340M参数。
电信保温杯笔记——NLP经典论文:BERT_第14张图片
(注:模型评估方法之held-out data(留出法))

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

5.3 Feature-based Approach with BERT

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

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

为了消除微调的影响,我们采用基于特征的方法,从一个或多个层提取激活,而不微调 BERT 任何参数。这些语境化的 embedding 会作为输入,来随机初始化分类层之前的两层768维 BiLSTM 。

结果见表7。 BERT LARGE _{\text{LARGE}} LARGE 采用最先进的方法进行比较。性能最佳的方法将来自预训练的 Transformer 的前四个隐藏层的 token 表示拼接起来,这仅比微调整个模型落后0.3个 F1。这表明 BERT 对于微调和基于特征的方法都是有效的。
电信保温杯笔记——NLP经典论文:BERT_第15张图片

6 Conclusion

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

Appendix for “BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding”

我们将附录分为三个部分:

• BERT 的其他实施细节见附录A;

• 附录B中给出了我们实验的其他细节;并且

• 附录C中介绍了其他消融研究。

我们为BERT提供了额外的消融研究,包括:

–训练步骤数量的影响;和

–不同 masking 过程的消融。

A Additional Details for BERT

A.1 Illustration of the Pre-training Tasks

我们在下面提供了预训练任务的示例。

Masked LM and the Masking Procedure \quad\quad 假设未标记的句子是 my dog is hairy,在随机 masking 过程中,我们选择了第4个 token(对应于hairy),我们的 masking 过程可以通过

• 80%的情况:将单词替换为 [MASK] token,例如,my dog is hairy→ my dog is [MASK]

• 10%的情况:用随机词替换该词,例如,my dog is hairy→ my dog is apple

• 10%的情况:保持单词不变,例如,my dog is hairy→ my dog is hairy。这样做的目的是使表示偏向实际观察到的词。

此过程的优点是,Transformer encoder 不知道将要求其预测哪些字,或者哪些字已被随机字替换,因此它必须保持每个输入 token 的分布式语境化表示。此外,由于随机替换只发生在所有 token 的1.5%(即15%中的10%),因此这似乎不会损害模型的语言理解能力。在第C.2节中,我们评估了此步骤的影响。

与标准语言模型训练相比,masked LM 仅对每批中15%的 token 进行预测,这表明可能需要更多的预训练步骤才能使模型收敛。在第C.1节中,我们证明 MLM 确实比从前往后的模型(预测每一个 token)收敛得稍慢,但 MLM 模型依据实验的改进远远超过了增加的训练成本。

Next Sentence Prediction \quad\quad 下面的例子可以说明下一个句子预测任务。

Input = [CLS] the man went to [MASK] store [SEP] he bought a gallon [MASK] milk [SEP]

Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP] penguin [MASK] are flight ##less birds [SEP]

Label = NotNext

A.2 Pre-training Procedure

为了生成训练的每个输入序列,我们从语料库中抽取两段的文本,我们称之为“句子”,尽管它们通常比单个句子长很多(但也可以更短)。第一个句子接收 A embedding,第二个句子接收 B embedding。50%的情况 B 是 A 后面的实际下一个句子,50%的情况 B 是随机句子,这是“下一句预测”任务的训练步骤。对其进行采样,使 AB 组合的长度为≤ 512个 token。LM masking 是在 WordPiece 被 tokenize 之后使用的,掩蔽率为15%,即使只给予部分采样词条也不会有特殊考虑。

我们以 batch size 为256的序列(256个序列 * 512个 token =128000个 token/batch)进行1000000个时间步的训练,这在33亿字的语料库中大约是40个 epoch。我们使用 Adam 优化器,学习率为1e-4, β 1 = \beta _1= β1= 0.9, β 2 = \beta _2= β2= 0.999,L2 权重衰减为0.01,前10000步的学习率预热,以及学习率的线性衰减。我们在所有层上使用0.1的 dropout 率。我们使用 gelu 激活(Hendrycks和Gimpel,2016),而不是遵循 OpenAI GPT 的标准 relu。训练损失是平均 masked LM 似然和平均下一句预测似然的总和。

BERT BASE _{\text{BASE}} BASE 的训练在 Pod 配置的4个云 TPU 上进行(总共16个 TPU 芯片) 13 ^{13} 13。BERT LARGE _{\text{LARGE}} LARGE 的13个训练在16个云 TPU 上进行(总共64个TPU芯片)。每次预训练需要4天才能完成。

13 ^{13} 13https://cloudplatform.googleblog.com/2018/06/Cloud-TPU-now-offers-preemptible-pricing-and-global-availability.html

较长的序列成本过高,因为 attention 是序列长度的二次方。为了在我们的实验中加速预训练,我们对90%的时间步进行了序列长度为128的预训练。然后,其余10%的时间步我们训练长度为512的序列来学习位置 embedding。

A.3 Fine-tuning Procedure

对于微调,除 batch size、学习率和训练次数外,大多数模型超参数与训练前相同。dropout 概率始终保持在0.1。最佳超参数值是特定于任务的,但我们发现以下可能值范围适用于所有任务:

• Batch size: 16, 32
• Learning rate (Adam): 5e-5, 3e-5, 2e-5
• Number of epochs: 2, 3, 4

我们还观察到,与小数据集相比,大数据集(例如,100k+标记的训练示例)对超参数选择的敏感性要低得多。微调通常非常快,因此只需对上述参数进行彻底搜索并选择在开发集上表现最佳的模型是合理的。

A.4 Comparison of BERT, ELMo ,and OpenAI GPT

在这里,我们研究了最近流行的表征学习模型的差异,包括 ELMo、OpenAI GPT 和 BERT。模型架构之间的比较如图3所示。请注意,除了架构上的差异外,BERT 和 OpenAI GPT 是微调方法,而 ELMo 是基于特性的方法。
电信保温杯笔记——NLP经典论文:BERT_第16张图片
与 BERT 最相似的现有预训练方法是 OpenAI GPT,它在大型文本语料库上训练从前往后的 Transformer LM。事实上,BERT 中的许多设计决策都是为了使其尽可能接近 GPT,以便将这两种方法进行最低限度的比较。这项工作的核心论点是,第3.1节中介绍的双向性和两项预训练任务占了大部分实验改进,但我们确实注意到,BERT 和 GPT 的训练方式还有其他一些差异:

• GPT 在图书语料库(800M个词)上接受训练;BERT 接受了图书语料库(8亿个词)和维基百科(2.5亿个词)的训练。

• GPT 使用仅在微调时引入的句子分隔符([SEP])和分类器标记([CLS]);BERT 在预训练期间学习 [SEP]、[CLS] 和句子A/B embedding。

• GPT 接受1M时间步的训练,批量大小为32000个词;伯特接受了1M时间步的训练,批量大小为128000个词。

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

为了隔离这些差异的影响,我们在第5.1节中进行了每种形式的消融实验,实验证明,大多数改进实际上来自两项预训练任务以及它们所带来的双向性。

A.5 Illustrations of Fine-tuning on Different Tasks

在图4中可以看到对不同任务进行微调的示例。我们的特定任务模型是通过将 BERT 与一个额外的输出层合并而成的,因此需要从头学习最少数量的参数。在这些任务中,(a)和(b)是序列级任务,而(c)和(d)是 token 级任务。在图中,E 表示输入 embedding, T i T_i Ti 表示 token i 的语境化表示,[CLS] 是用于分类输出的特殊符号,[SEP] 是用于分离非连续 token 序列的特殊符号。
电信保温杯笔记——NLP经典论文:BERT_第17张图片

B Detailed Experimental Setup

B.1 Detailed Descriptions for the GLUE Benchmark Experiments.

表1中的 GLUE 结果来自 https://gluebenchmark.com/leaderboard 和 https://blog. openai.com/language-unsupervised。GLUE 基准包括以下数据集,其描述最初在Wang等人(2018a)中进行了总结:

MNLI \quad\quad 多体裁自然语言推理(Multi-Genre Natural Language Inference)是一项大规模的众包蕴涵分类任务(Williams et al.,2018)。给定一对句子,目标是预测第二句相对于第一句是包含句、矛盾句还是中性句。

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

QNLI \quad\quad 问题自然语言推理(Question Natural Language Inference)是斯坦福问答数据集(Rajpurkar等人,2016)的一个版本,该数据集已转换为二元分类任务(Wang等人,2018a)。正面例子是(问题、句子)对,包含正确答案,反面例子是(问题、句子)来自同一段落,不包含答案。

SST-2 \quad\quad 斯坦福情感树库(Stanford Sentiment Treebank)是一个二元单句子分类任务,由从电影评论中提取的句子组成,并对其情感进行人为注释(Socher等人,2013)。

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

STS-B \quad\quad 语义-文本相似度基准(Semantic Textual Similarity Benchmark)是从新闻标题和其他来源提取的句子对的集合(Cer等人,2017年)。他们被标注了一个1到5的分数,表示这两个句子在语义上有多相似。

MRPC \quad\quad 微软研究释义语料库(Microsoft Research Paraphrase Corpus)由自动从在线新闻来源中提取的句子对组成,有人为注释,判断其中的句子对是否语义对等(Dolan和Brockett,2005)。

RTE \quad\quad 识别文本蕴涵(Recognizing Textual Entailment)是一项类似于MNLI的二元蕴涵任务,但训练数据要少得多(Bentivogli et al.,2009) 14 ^{14} 14

WNLI \quad\quad Winograd NLI (Winograd Natural Language Inference)是一个小型自然语言推理数据集(Levesque et al.,2011)。GLUE 网页指出,该数据集的构建存在问题 15 ^{15} 15,并且提交给 GLUE 的每一个经过训练的系统的性能都低于预测大多数类别的65.1基线精度。因此,为了对OpenAI GPT公平,我们排除了该集合。对于我们的 GLUE 提交,我们总是预测大多数类别。

14 ^{14} 14注意,在本文中我们只展现单任务微调结果。多任务微调方法可能会进一步提高性能。例如,我们确实观察到 MNLI 的多任务训练对 RTE 的实质性改进。

C Additional Ablation Studies

C.1 Effect of Number of Training Steps

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

1.问题:BERT 真的需要如此大量的预训练(128000词/批 * 1000000步)来实现高微调精度吗?

答:是的,与500k步相比,BERT BASE _{\text{BASE}} BASE 在1M步训练中的 MNLI 准确度提高了近1.0%。

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

答:MLM 模式的收敛速度确实略慢于 LTR 模式。然而,就绝对准确度而言,MLM 模式几乎一开始就超越 LTR 模式。
电信保温杯笔记——NLP经典论文:BERT_第18张图片

C.2 Ablation for Different Masking Procedures

在第3.1节中,我们提到,当使用 masked 语言模型(MLM)目标进行预训练时,BERT 使用混合策略来 mask 目标 token。以下是评估不同 masking 策略效果的消融研究。

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

结果如表8所示。在表中,MASK 表示我们用 MLM 的 [MASK] 符号替换目标 token;这意味着我们保持目标 token 不变;RND 意味着我们用另一个随机 token 替换目标 token。
电信保温杯笔记——NLP经典论文:BERT_第19张图片
表格左半部分的数字代表 MLM 预训练期间使用的特定策略的概率(BERT 使用80%、10%、10%)。本文右侧部分表示开发集结果。对于基于特征的方法,我们将最后4层 BERT 连接为特征,这在第5.3节中被证明是最好的方法。

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

相关视频

BERT 论文逐段精读【论文精读】
李宏毅-ELMO, BERT, GPT讲解:0:19:09开始

相关的笔记

BERT-论文翻译
小白Bert系列-参数计算

相关代码

pytorch

Vaswani等人(2017)以及优秀指南,“注释的 transformer ”
MorvanZhou /NLP-Tutorials

tensorflow

keras

pytorch API:

transformers官方文档
bert-base-chinese预训练模型下载地址

Pytorch-Bert预训练模型的使用(调用transformers)
Pytorch-Bert预训练模型的使用(调用transformers)
基于pytorch的中文语言模型预训练
pytorch中文语言模型bert预训练代码
transformers下载中文预训练BERT模型 (pytorch) bert-base-chinese

tensorflow API

你可能感兴趣的:(论文笔记,自然语言处理,bert,transformer)