论文原文:https://arxiv.org/abs/1810.04805
论文年份:2018
论文被引:36172(2022/3/30)
Bert: Pre-training of Deep Bidirectional Transformers for Language Understanding
Abstract
We introduce a new language representation model calledBERT, which stands forBidirectional Encoder Representations from Transformers. Unlike recent language representation models (Peters et al., 2018a; Radford et al., 2018),BERT is designed to pretrain deep bidirectional representations from unlabeled text by jointly conditioning on both left and right context in all layers. As a result, the pre-trained BERT model can befinetunedwith just one additional output layer to create state-of-the-art models for a wide range of tasks, such as question answering and language inference, without substantial taskspecific architecture modifications.
BERT is conceptually simple and empirically powerful。It obtains newstate-of-the-artresults on eleven natural language processing tasks, including pushing the GLUE score to 80.5% (7.7% point absolute improvement), MultiNLI accuracy to 86.7% (4.6% absolute improvement), SQuAD v1.1 question answering Test F1 to 93.2 (1.5 point absolute improvement) and SQuAD v2.0 Test F1 to 83.1 (5.1 point absolute improvement).
1 Introduction
现在,有两种策略可以将预训练的语言表示用于下游任务:
- 基于特征(feature-based):例如 ELMo 模型,将包含预训练表示作为附加特征的特定任务架构。
- 微调(fine-tuning):例如 GPT 模型,引入了最少的特定于任务的参数,并通过简单地微调所有预训练参数来对下游任务进行训练。
两种方法在预训练期间共享相同的目标函数,使用单向语言模型来学习通用语言表示。
我们认为,当前的技术限制了预训练表示的能力,特别是对于微调方法。主要限制是标准语言模型是单向的(undirectional),这限制了在预训练期间使用的架构的选择。例如,在 OpenAI GPT 中,作者使用从左到右(left-to-right)的架构,其中每个标记只能关注 Transformer 的自注意力层中的先前标记(Vaswani 等,2017)。这种限制对于句子级(sentence-level)任务来说是次优的,并且在将基于微调的方法应用于标记级(token-level)任务(例如问答)时可能非常有害,在这些任务中,从两个方向合并上下文至关重要。
在本文中,我们通过提出 BERT:Transformers 的双向编码器表示来改进基于微调的方法。 BERT 通过使用受完形填空(Cloze)任务 (Taylor, 1953) 启发的掩码语言模型 (Masked Language Model,MLM)预训练目标来缓解前面提到的单向约束。掩码语言模型从输入中随机掩蔽一些标记,目标是仅根据其上下文来预测被掩蔽词的原始词汇表 id。与从左到右的语言模型预训练不同,MLM 目标使表示能够融合左右上下文,这使我们能够预训练一个深度双向 Transformer。除了掩码语言模型之外,我们还使用了下一句预测(next sentence prediction)任务,该任务联合预训练文本对表示。我们论文的贡献如下:
- 我们证明了双向预训练对语言表示的重要性。BERT 使用掩码语言模型来实现预训练的深度双向表示。
- 我们证明了预训练的表示减少了对许多精心设计的任务特定架构的需求。 BERT 是第一个基于微调的表示模型,它在大量句子级和标记级任务上实现了最先进的性能,优于许多特定于任务的架构。
- 源码和预训练模型下载: https://github.com/google-research/bert
2 Related Work
2.1 Unsupervised Feature-based Approaches
ELMo 及其前身 (Peters et al., 2017, 2018a) 将传统的词嵌入研究沿不同的维度进行了推广。他们从从左到右和从右到左的语言模型中提取上下文相关的特征。每个标记(token)的上下文表示是从左到右和从右到左表示的连接(concatenation)。
在将上下文词嵌入与现有的特定任务架构集成时,ELMo提升了几个主要 NLP 基准的最新技术水平,包括问答,情感分析和命名实体识别 。有研究提出通过使用 LSTM 从左右上下文预测单个单词的任务来学习上下文表示。与 ELMo 类似,他们的模型是基于特征的,而不是深度双向的。有研究表明完形填空任务可用于提高文本生成模型的鲁棒性。
2.2 Unsupervised Fine-tuning Approaches
最近,产生上下文标记表示的句子或文档编码器已经从未标记的文本中进行了预训练,并针对有监督的下游任务进行了微调。这些方法的优点是只需要从头开始学习很少的参数。至少部分由于这一优势,OpenAI GPT 在 GLUE 基准的许多句子级任务上取得了先前最先进的结果。
2.3 Transfer Learning from Supervised Data
这方面的研究有很多,比较著名的是计算机视觉领域,其证明了从大型预训练模型进行迁移学习的重要性,其中一个有效的方法是微调使用 ImageNet 预训练的模型。
3 BERT
BERT模型的框架有两个步骤:
- 预训练(pre-training):BERT 模型通过不同的预训练任务在未标记数据上进行训练。
- 微调(fine-tuning):BERT 模型首先使用预训练的参数进行初始化,然后所有参数都使用来自下游任务的标记数据进行微调。
每个下游任务都有单独的微调模型,即使它们使用相同的预训练参数进行初始化。
BERT 的一个显着特点是其跨不同任务的统一架构。预训练架构和最终的下游架构之间相差无几。
BERT 的模型架构是基于原始实现的多层双向 Transformer 编码器。其实现几乎与原始版本的 Transformers 相同,具体可以参考Transformer论文和代码实现(The Annotated Transformer)。
符号标记:
- :层数(即 Transformer blocks)
- :隐藏大小
- :self-attention head的数量
有两种类型的模型架构:
- : L= 12,H=768,A=12,总参数=110M
- :L=24,H=1024,A=16,总参数=340M
为方便比较,BERTBASE 与 OpenAI GPT 有相同的模型大小。重要的区别是,BERT Transformer 使用双向自注意力,而 GPT Transformer 使用受限自注意力(constrained self-attention),其中每个标记只能关注其左侧的上下文。
为了使 BERT 处理各种下游任务,我们的输入表示能够在一个标记序列中明确表示单个句子和一对句子(例如问题 h、答案 i)。在整个工作中,“句子”可以是连续文本的任意跨度,而不是实际的语言句子。一个“序列”是指输入到 BERT 的标记序列,它可能是一个句子,也可能是两个打包在一起的句子。
我们使用 WordPiece Embedding 和 30,000 个标记词汇。每个序列的第一个标记始终是一个特殊的分类标记 ([CLS])。与该标记对应的最终隐藏状态用作分类任务的聚合序列表示。句子对被打包成一个单一的序列。我们以两种方式区分句子。首先,我们用一个特殊的标记([SEP])将它们分开。其次,我们向每个标记添加一个学习嵌入,指示它属于句子 A 还是句子 B。如图 1 所示,我们将输入嵌入表示为,特殊 [CLS] 标记的最终隐藏向量表示为,第个输入标记的最终隐藏向量为。对于给定的标记,其输入表示是通过对相应的标记、段和位置嵌入求和来构造的。这种结构的可视化可以在图 2 中看到。
3.1 Pre-training BERT
Task #1: Masked LM
为了训练深度双向表示,我们简单地随机屏蔽一定百分比的输入标记,然后预测那些被屏蔽的标记。我们将此过程称为“Masked LM”(MLM),它在文献中通常被称为完形填空任务(Taylor,1953)。所有的实验中,我们随机屏蔽了每个序列中所有 WordPiece 标记的 15%。
尽管这使我们能够获得双向预训练模型,但缺点是我们在预训练和微调之间造成了不匹配,因为在微调期间不会出现 [MASK] 标记。为了缓解这种情况,我们并不总是用实际的 [MASK] 标记替换“masked”单词。训练数据生成器随机选择 15% 的标记位置进行预测。如果选择第 i 个标记,我们通过三种方式将第 i 个标记进行替换替换: 1) 80% 的时间用 [MASK] 标记 ;2) 10% 的时间用一个随机标记 ;3) 10% 的时间标记不变。然后,最终的隐藏向量 Ti ,通过softmax激活函数,预测原始标记。具体地:
- 80% 的时间将单词替换为 [MASK] 标记,例如,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)
许多重要的下游任务,例如问答 (Question Answering,QA)和自然语言推理 (Natural Language Inference,NLI),都是基于对两个句子之间关系的理解,而语言建模无法直接捕捉到这一点。为了训练一个理解句子关系的模型,我们预先训练一个二值化的下一个句子预测任务(binarized next sentence prediction task),该任务可以从任何单语语料库(monolingual corpus)中轻松生成。具体来说,在为每个预训练示例选择句子 A 和 B 时,50% 的时间 B 是 A 之后的实际下一个句子(标记为 IsNext),50% 的时间是语料库中的随机句子(标记为作为NotNext)。如图 1 所示,C 用于下一个句子预测 (NSP)。尽管它很简单,但我们在第 5.1 节中证明了针对此任务的预训练对 QA 和 NLI 都非常有益。
在之前的工作中,只有句子嵌入被转移到下游任务,但 BERT 转移所有参数来初始化最终任务模型参数。
对于预训练语料库,BERT 使用 BooksCorpus(8 亿单词)和英语维基百科(25 亿单词)进行预训练。
3.2 Fine-tuning BERT
微调很简单,因为Transformer 中的自注意力机制允许 BERT 通过交换适当的输入和输出来对许多下游任务(无论它们涉及单个文本还是文本对)进行建模。对于涉及文本对的应用程序,一种常见的模式是在应用双向交叉注意之前独立编码文本对。但 BERT 使用自注意力机制来统一这两个阶段,因为使用自注意力对连接的文本对进行编码有效地包括了两个句子之间的双向交叉注意力。
4 Experiments
本节展示了 11 个 NLP 任务的 BERT 微调结果。
4.1 GLUE
通用语言理解评估(General Language Understanding Evaluation ,GLUE)基准是各种自然语言理解任务的集合。
对于 BERTLARGE,我们发现微调有时在小型数据集上不稳定,因此我们运行了几次随机重启并在开发集上选择了最佳模型。通过随机重启,我们使用相同的预训练检查点,但执行不同的微调数据打乱(shuffle)和分类器层初始化。
4.2 SQuAD v1.1
斯坦福问答数据集 (Stanford Question Answering Dataset ,SQuAD v1.1) 是 10 万个众包问答对的集合。给出一个问题和一段来自维基百科的回答,任务是预测文章中的答案文本跨度。
4.3 SQuAD v2.0
SQuAD 2.0 任务扩展了 SQuAD 1.1 的问题定义,允许在提供的段落中不存在简短答案的可能性,使问题更加现实。
4.4 SWAG
Situations With Adversarial Generations (SWAG) 数据集包含 113k 句对完成示例,用于评估基于常识的推理。给定一个句子,任务是在四个选项中选择最合理的延续。
5 Ablation Studies
5.1 Effect of Pre-training Tasks
在表 5 中,我们表明移除 NSP 会显着损害 QNLI、MNLI 和 SQuAD 1.1 的性能。接下来,我们通过比较“No NSP”与“LTR & No NSP”来评估训练双向表示的影响。 LTR 模型在所有任务上的表现都比 MLM 模型差,在 MRPC 和 SQuAD 上的下降幅度很大。
对于 SQuAD,很明显 LTR 模型在预测方面表现不佳,因为令牌级隐藏状态没有右侧上下文。为了真诚地尝试加强 LTR 系统,我们在顶部添加了一个随机初始化的 BiLSTM。这确实显着改善了 SQuAD 的结果,但结果仍然比预训练的双向模型差得多。 BiLSTM 会损害 GLUE 任务的性能。
我们认识到,也可以训练单独的 LTR 和 RTL 模型,并将每个令牌表示为两个模型的串联,就像 ELMo 所做的那样。但是: (a) 这比单个双向模型贵一倍; (b) 这对于像 QA 这样的任务来说是不直观的,因为 RTL 模型无法以问题的答案为条件; © 这严格来说不如深度双向模型强大,因为它可以在每一层使用左右上下文。
5.2 Effect of Model Size
我们假设当模型在下游任务上直接微调并且仅使用非常少量随机初始化的附加参数时,即使下游任务数据量非常小,任务特定模型也可以受益于更大、更具表现力的预训练表示。
5.3 Feature-based Approach with BERT
结果如表 7 所示。BERTLARGE 与最先进的方法具有竞争力。性能最好的方法将来自预训练 Transformer 的前四个隐藏层的标记表示连接起来,这仅落后于微调整个模型的 0.3 F1。这表明 BERT 对于微调和基于特征的方法都是有效的。
6 Conclusion
最近由于使用语言模型进行迁移学习的经验改进表明,丰富的、无监督的预训练是许多语言理解系统不可或缺的一部分。特别是,这些结果使即使是低资源任务也能从深度单向架构中受益。我们的主要贡献是将这些发现进一步推广到深度双向架构,允许相同的预训练模型成功处理广泛的 NLP 任务。
Appendix
不同预训练模型架构的比较
预训练超参数设置
我们以 256 个序列的批大小(256 个序列 * 512 个标记 = 128,000 个标记/批次)训练 1,000,000 个步骤,这在 33 亿个单词语料库中大约是 40 个 epoch。
我们使用 Adam,学习率为 1e-4,β1 = 0.9,β2 = 0.999,L2 权重衰减为 0.01,前 10,000 步进行学习率预热,以及学习率的线性衰减。我们在所有层上使用 0.1 的 dropout 概率。与 OpenAI GPT 相同,使用 gelu 激活函数而不是 relu。训练损失是平均掩蔽 LM 似然和平均下一句预测似然之和。
BERTBASE 在 4 个 Cloud TPU(总共 16 个 TPU 芯片)上进行训练。BERTLARGE 在 16 个 Cloud TPU(总共 64 个 TPU 芯片)上进行训练。每次预训练需要 4 天才能完成。
微调超参数设置
对于微调,大多数模型超参数与预训练中的相同,除了批大小、学习率和训练 epoch 数。dropout 概率始终保持在 0.1。最佳超参数值是特定于任务的,但我们发现以下可能的值范围在所有任务中都能很好地工作:
- Batch size: 16, 32
- Learning rate (Adam): 5e-5, 3e-5, 2e-5
- Number of epochs: 2, 3, 4
我们还观察到,大数据集(例如,100k+ 标记的训练示例)对超参数选择的敏感度远低于小数据集。微调通常非常快,因此只需对上述参数进行详尽的搜索并选择在开发集上表现最佳的模型是合理的。
微调不同的任务
不同训练步骤的效果
图 5 显示了从已预训练 k 步的检查点进行微调后的 MNLI Dev 精度。这让我们可以回答以下问题:
问题1:BERT 真的需要如此大量的预训练(128,000 单词/batch * 1,000,000 步)才能达到很高的微调精度吗?
- 答:是的,与 500k 步相比,BERTBASE 在 1M 步上训练时在 MNLI 上的准确率提高了近 1.0%。
问题2:MLM 预训练收敛速度是否比 LTR 预训练慢,因为每批只预测 15% 的单词而不是每个单词?
- 答:MLM 模型的收敛速度确实比 LTR 模型稍慢。然而,就绝对准确度而言,MLM 模型几乎从开始就优于 LTR 模型。
文章出处登录后可见!