BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding
摘要
我们介绍一种新的语言表达模型叫做BERT,它代表Transformers双向编码器表示。不像之前的语言表示模型(Peters et al.,2018a;Radford et al.,2018),BERT被设计成使用无标签在所有层的左右内容共同条件的预训练深度双向表示。结果上,预训练BERT模型仅仅一个附加的输出层的微调能在广范围任务中创造最先进的模型。诸如qa和语言推理,没有大量的特别任务架构的修改。
BERT概念简单,经验丰富.它在11个自然语言处理任务中获得了最先进的结果,包括推进GLUE分数达到80.5%(7.7%绝对提升),MultiNLI acc达到86.7%(4.6%的绝对提升),SQuADv1.1 QA测试F1达到93.2(1.5%绝对提升)和SQuADv2.0测试F1达到83.1(5.1%绝对提升);
1 引言
预训练语言模型已经展示出在提高许多自然语言处理任务是有效的(Dai and Le,2015;Peters et al.,2018a;Radford et al.,2018;Howard and Ruder 2018).这包括句子级别诸如自然语言推理和句子改写(Dolan and Brokett,2005),目的是通过全面的分析来预测两个句子之间的关系,在token-level任务也是一样的,诸如命名实体识别和QA,这些模型需要产生在token级别细颗粒度的输出。(Tjong Kim Sang and De Meulder,2003;Rajpurkar et al,.2016).
这有两个存在策略在下游任务中应用预训练语言表达:feature-based和fine-tuning.这个特征为基础的方法,诸如ELMo(Peters et al.,2018a),使用预训练表示作为附加特征的特殊任务架构。微调方法,诸如Generative Pre-trained Transformer(OpenAI GPT)(Radford et al.,2018),包含最小化特殊任务参数,通过简单的微调所有预训练的参数在下游任务中训练。两个方法在预训练期间分享了相同的目标函数,它们使用单向语言模型学习通用语言表示。
我们讨论当前的任务限制预训练表示模型的力量,特别是预训练的方法。主要的限制是标准语言模型是单向的,这限制在预训练期间能被使用架构的选择。举例,在OpenAIGPT,作者使用了一个left-to-right架构,每一个token仅仅主意在Transformer的self-attention层之前的 tokens(Waswani et al.,2017).这种限制对于句子级任务不是最佳的,当以微调为基础的方法应用诸如qa的token-level任务使时可能是非常有害的,这是重要的从两边混合内容。
在这篇论文中,我们通过提出BERT提升微调为基础的方法。BERT :Transformer双向Encoder表示.BERT缓和了之前提及单项的限制通过使用一个"masked language model"(MLM)预训练,受Cloze Task(Taylor,1953)任务的启发。遮盖语言模型随机遮盖输入的一些tokens,目标是仅仅以上下文为基础预测预测遮盖单词词汇表的原始ID。不像left-to-right语言模型预训练,MLM目标能够表达融合左右内容的表达,这允许我们预训练一个深度双向Transformer。除了MLM模型,我们也使用一个’next sentence prediction’任务共同的预训练文本对表达。我们论文的贡献如下所示。
- 我们论证了双向预训练语言表示的重要性。不像Radford et al.(2018),使用了一个单项预训练语言模型,BERT使用MLM使得预训练深度双向表示成为可能。这跟Peter et al.(2018a)是一种对照,使用一个浅层拼接独立训练的左到右,右到左的LMs.
- 我们展示了预训练表示降低了许多需要精心设计的特殊任务架构。BERT是第一个以表达模型为基础的微调在一系列以句子级别和token级别的任务中实现了最先进的效果,胜过了许多特别任务的架构。
- BERT提出了NLP11个任务最先进的效果,代码和预训练模型能在https://github.com/google-research/bert上获取。
2 相关工作
预训练生成语言模型是一个长历史,我们在这个章节简介的回顾最广泛使用的方法。
2.1 无监督特征基础方法
学习广泛的单词应用是最近几十年热门的研究方向,包括non-neural(Brown el al.,1992;Ando和Zh ang,2005,Blizer et al.,2006)和neural(Mikolov et al.,2013;Pennington et al.,2014)方法。预训练单词嵌入是现代NLP系统不可或缺的一部分。在从头开始embedding学习之上提供了重大的提升(Turian et al.,2010).为了预训练单词嵌入向量,left-to-right语言模型目标已经被使用(Mnih and Hinton,2009),跟在左右上下文中从错误的单词中辨别正确的目标是一样的。(Mikolov et al.,2013).
这些方法已经成为粗颗粒度的。诸如句子embeddings(Kiros et al.,2015;Logeswaran and Lee,2018)或者段落embeddings(Le and Mikolov 2014).为了训练句子表示,之前工作使用的目标是排序下一个句子的候选目标(Jernite et al.,2017;Logeswaran and Lee,2018).给予之前句子的一个表示left-to-right生成下一个句子单词(Kiros et al.,2015),去噪自编码器衍生目标(Hill et al.,2016)
ELMo和它的前辈(Peters et al.,2017,2018a)生成传统单词嵌入研究沿着一个不同的方面。它们从左到右和右到左语言模型提取上下文敏感特征。每个token上下文内容表示是左到右和右到左表示的连接。当用存在特殊任务的架构集成上下文单词的嵌入,ELMo在多个主要NLP的基准上提供了最先进的水平。(Peters et al.,2018a)包括qa(Rajpurkar et al.,2016),语义解析(Socher et al.,2013),和命名实体识别(Tjong Kim Sang and De Meulder,2003).Melamud et al.(2016)提出通过使用LSTMs从左右上下文内容预测一个单词的任务来学习上下文的表示。跟E lMo相似,他们的模型以特征为基础且不是深度双向。Fedus el al.(2018)展现全部的完整的任务能被使用来提升文本生成模型的鲁棒性。
2.2 非监督微调方法
与特征为基础的方法一样,这个方向的第一个工作仅仅从无标签文本预训练单词嵌入向量。(Col-lobert and Weston.2008).
最近,句子或者文档产生上下文token表示的编码已经从无标签文本预训练且为一个监督下游任务来微调(Dai and Le,2015;Howard and Ruder,2018;Radford et al.,2018).这些方法的优势是很少的参数需要从头学习。至少部分因为这个优势,OpenAI GPT(Radford et al.,2018)根据GLUE基准上在学多句子级别的人物中实现了之前最先进的结果。(Wang et al.,2018a).Left-to-right语言模型和自动编码目标已经使用在预训练诸如这些模型(Howard and Ruder,2018;Radford et al.,Dai and Le,2015).
图1:BERT整体的预训练和微调程序。除了输出层之外,相同的架构使用在预训练和微调中。相同的预训练模型参数被使用初始化不同下游任务模型。在微调期间,所有的参数被微调。[CLS]是一个添加到每一个输入样本前面的特殊符号,[SEP]是一个特殊分离的token(e.g. 分离的 q/a)
2.3 从监督数据的迁移学习
也有工作展示从使用大量数据集的监督任务迁移是有效的,诸如自然语言推理(Conneau et al., 2017)和机器翻译(McCann et al.,2017).CV研究也证明了从大量预训练模型迁移学习的重要性。一个有效的秘诀是在预训练的ImageNet上微调模型。(Deng et al.,2009;Yosinski et al.,2014).
3 BERT
我们介绍BERT和它详细的实现在这一章节。在我们的框架中有两个步骤:预训练和微调。在预训练期间,模型在不同预训练任务无标签数据上训练。对于微调,BERT模型使用预训练参数进行首次初始化,所有的参数从下游任务中使用有标签的数据进行微调。每一个下游任务有一个独立的微调模型,虽然他们使用相同预训练参数进行初始化。在图1中qa示例在这个 章节起到一个运行示例的作用。
BERT独特的特征是统一了跨越不同任务的架构。这是在预训练架构和最终下游任务架构最小的不同。
模型架构BERT模型架构在Vaswani et al.(2017)原始实现描述的基础上的一个多层双向Transformer编码并且发布在tensor2tensor库中。因为使用Transformers成为共同且我们的实现跟原始几乎完全相同,我们将省略详细模型架构的后端描述,读者参考Vaswani et al.(2017)卓越的指南诸如"The Annotated Transformer".
在这个工作中,层数(Transformer块数)来表示L,隐藏层的大小作为H,self-attention头的数量作为A.我们主要报道两个模型尺寸的结果。 B E R T B A S E BERT_{BASE} BERTBASE(L=12,H=768,A=12,总共参数1.1亿)和 B E R T L A R G E BERT_{LARGE} BERTLARGE(L=24,H=1024,A=16,总共参数3.4亿)。
B E R T B A S E BERT_{BASE} BERTBASE选择使用跟OpenAI GPT相同模型大小进行比较的目的。很长程度上,当然,BERT Transformer使用双向的self-attention,而GPT Transformer使用受限制的self-attention,每一个token仅仅关注它上下文的左侧。
1
https://github.com/tensorflow/tensor2tensor
2
http://nlp.seas.harvard.edu/2018/04/03/attention.html
3
In all cases we set the feed-forward/filter size to be 4H,
i.e., 3072 for the H = 768 and 4096 for the H = 1024. 4We note that in the literature the bidirectional Trans-former is often referred to as a “Transformer encoder” while
the left-context-only version is referred to as a “Transformer
decoder” since it can be used for text generation.
5
The final model achieves 97%-98% accuracy on NSP.
6
The vector C is not a meaningful sentence representation
without fine-tuning, since it was trained with NSP.
输入输出表示 使BERT处理一个下游任务的变体,我们的输入表示能够明白地表示单个句子和一对句子。(例如<Question,Answer>)在一个符号序列。遍及这个工作,一个“sentence”可以是一个任意长度的连续文本,而不是一个实际语言学句子。一个“sequence”引用输入符号序列到BERT,可能是一个单独的序列句子或者两个句子组装到一起。
我们使用WordPiece embeddings(Wu et al.,2016)具有30000符号词汇表.每个序列第一个符号总是一个特别分类符号([CLS]).最终的隐藏状态是跟这个token是一致的用作为分类任务聚合序列表示。句子对一起组装到一个单独的序列。我们区分句子以两种方法。第一个,我们分离它们使用一个特别的符号([SEP]).第二个,我们在每个符号上增加一个学习的embedding来暗示它属于句子A还是句子B.在图1中显示,我们使用E表示输入embedding,特别符号[CLS]最终的隐藏向量使用 C ∈ R H C\in \mathbb{R}^H C∈RH表示,第i个输入符号在最终隐藏向量使用 T i ∈ R H T_i\in \mathbb{R}^H Ti∈RH表示。
对于一个给予的符号,它的输入表示是由相应的符号,片段,位置embeddings求和构成。这个结构可视化在图2中可见。
3.1 预训练 BERT
不像Peters et al.(2018a)和Radford et al.(2018),我们没有使用使用传统left-to-right或者right-to-left语言模型来预训练BERT。我预训练BERT使用两个非监督任务来替代。在本章节描述。这个步骤出现在图1的左部分。
任务 #1:**Masked LM **
直观上,有理由相信一个深度双向模型比left-to-right还是浅层链接一个left-to-right和right-to-left模型更强有力。不幸的是,标准的条件语言模型仅能训练left-to-right或者是right-to-left,自从双向条件允许每个单词间接“see itself”,模型在一个多层上下文中简洁预测一个目标词。
为了训练一个深度双向的表示,我们简单随机遮蔽输入符号的一定比例。我们将此过程称为“masked LM”(MLM),尽管它经常在文献中被称为一个完形填空任务。(Taylor,1953).在这种情况,最终隐藏向量对应的遮蔽符号被注入词汇表的softmax输出。作为一个标准的LM,在我们所有的实验中,我们在每一个序列随机遮蔽15%的所有WordPiece符号。与去噪声自动编码(Vincent et al.,2008)对比,我们仅仅预测遮蔽的单词而不是重构全体的输入。
尽管这允许我们获得一个双向预训练的模型,一个缺点是我们在预训练和微调之间创建了一个错误匹配,因为[MASK]符号在微调期间没有出现。为了缓和这个问题,我们不总是使用实际的[MASK]符号来替代“masked”单词。为了预测训练数据随机生成选择15%符号位置。如果第i个符号被选择了,我们替换第i个符号,(1)80%的时间使用[MASK]符号。(2)10%时间随机符号 (3)10%不改变第i个位置的符号。然后, T i T_i Ti预测原始的符号使用交叉熵损失。我们对比这个步骤的变种在附录C.2.
Task #2:下一个句子预测(NSP)
许多重要的下游任务注入QA和自然语言推理(NLI)都是理解两个句子的关系为基础,不是通过语言模型直接捕获。为了训练一个理解句子关系的模型,我们预训练一个二值化的下一个句子预测,能简单的使用任何单语料生成。特别当对于每一个预训练的样本选择句子A和B时。50%时间B时跟谁A的实际下一个句子(标签为Is Next),50%的时间是预料中随机一个句子(标签是NotNext).我们在图1中展示,C被使用下一个句子的预测(NSP).尽管它是简单的,我们在5.1章节证明了预训练用于这个任务对QA和NLI是非常有益的。
图2:BERT输入表示。输入embeddings是符号embeddings,segmentation embeddings和位置embedding的求和。
NSP跟表示学习目标使用在Jernite el al.(2017)和Logeswaran and Lee(2018)是很相似.当然,之前的工作,仅仅句子的embeddings转换到下游任务,BERT转换所有的参数来初始化终端模型的参数。
预训练数据
预训练过程大部分遵循语言模型预训练的既有文献。我们使用BooksCorpus(8亿个词)来作为预训练的预料和英文维基百科(25亿单词)。我们仅仅提取维基百科的文本短文,忽略列表,表格,头。使用一个文档级语料库而不是打混句子级语料库(诸如 Billion Word Benchmark Chelba et al.,2013)至关重要为了提取长连续的序列。
3.2 BERT微调
微调是简单直接的因为Transformer的注意力机制允许BERT训练许多下游任务-它们是否包括单独文本或者文本对-通过适当的输入和输出进行交换。应用包含文本对,一个共同的模式是在双向交叉注意力时候独立编码文本对,诸如Parikh et al.(2016);Seo et al.(2017).BERT使用self-attention机制代替统一了两个阶段,使用self-attention编码一个链接的文本对有效的包含了两个句子的双向交叉注意力。
对于每一个任务,我们在特殊任务的输入和输出中简单的插入到BERT且在端到端中微调所有的参数。作为输入,预训练句子A和句子B在释义上类似的序列句子(1),(2)蕴含中的假设前提对,(3)在QA之中的问题-段落对。(4)在文本分类或者序列标签的去文本对。输出,在字符级别人物符号表示喂入到输出层,诸如序列标签或者QA,分类时候[CLS]表示喂入到一个输出层,诸如蕴含或者情感分析。
跟预训练比较,微调是相对便宜的。论文中的所有结果被复现最多在一个Cloud TPU训练一个小时或者在一个gpu上训练几个小时,从一个精确相同的预训练模型开始。我们详细描述特殊任务在对应的4章节。更多详细的内容在附录A.5发现。
4 实验
在这个章节,我们提供BERT在11个NLP任务重的结果。
4.1 GLUE
(GLUE)通用语言理解评估基准(Wang et al.,2018a)集合跟自然语言理解任务是不同的。GLUE数据集详细的描述包括在附录B.1中。
在GLUE微调,我们提出了输入序列(单句子或者句子对)在章节3描述。使用最终隐藏向量 C ∈ R H C\in \mathbb{R}^H C∈RH对应第一个输入符号([CLS])来聚合表示。唯一新的参数引入是在微调分类层权重向量 W ∈ R K ⋅ H W\in \mathbb{R}^{K\cdot H} W∈RK⋅H,K是标签的数量。我们计算一个标准的分类损失使用C和W, l o g ( s o f t m a x ( C W T ) ) log(softmax(CW^T)) log(softmax(CWT))
表1:GLUE测试结果,评估服务评分(https://gluebenchmark.com/leaderborad).每一个任务下面的数字表示训练样本的数目。“Alverage”列跟官方GLUE分数有些许的不同,因为我们排除了WNLI错误数据集。BERT和OPenAI GPT是单独的模型,单个任务。QQP和MRPC报道的是F1值,STS-B报道的是Spearman相关性,其他任务是acc分数。我们排除使用BERT作为它们组件的条目。
我们在所有的GLUE任务的数据上使用batch_size是32,epochs是3来微调。每一个任务,我们选择在开发集最后的微调学习率。( 5 e − 5 , 4 e − 5 , 3 e − 5 , 2 e − 5 5e^{-5},4e^{-5},3e^{-5},2e^{-5} 5e−5,4e−5,3e−5,2e−5)之一。附加地,我们发现 B E R T L A R G E BERT_{LARGE} BERTLARGE在小数据集上有时候是不稳定的,所以我们随机重新开始运行几次并且选择在开发数据集上最好的模型。因为随机重新开始,我们使用相同的预训练checkpoint但是执行不同的微调数据shuffling分类层的初始化。
出现在表1的结果。 B E R T B A S E , B E R T L A R G E BERT_{BASE},BERT_{LARGE} BERTBASE,BERTLARGE大大的超出了所有任务的所有系统,分别获得在之前最先进的水平上提高了4.5%,7.0%平均acc的提升。注意 B E R T b a s e 跟 O p e n A I G P T BERT_{base}跟OpenAI GPT BERTbase跟OpenAIGPT除了注意力遮盖而言就模型结构而言是十分相似的。对于最大且最广泛的GLUE任务,MNLI,BERT获得了4.6%的绝对的提升。在官方GLUE排行榜, B E R T L A R G E BERT_{LARGE} BERTLARGE获得80.5的分数,跟OpenAI GPT比较,截止到目前为止分数是72.8。
我们发现 B E R T L A R G E BERT_{LARGE} BERTLARGE在所有的任务之前明显地做的好。特别在很少训练数据集的时候。模型尺寸的影响更多曝光在5.2章节。
4.2 SQuAD v1.1
斯坦福问答数据集(SQuAD v1.1)收集了100k众包问答对(Rajpurkar et al., 2016).给一个问题和从维基百科包含答案的片段,这个任务是预测段落中的答案文本。
图1展示,在qa任务中,我们表示输入问题和段落作为一个单独打包序列,问题使用A embedding和段落使用B embedding.我们仅仅引入了一个开始向量 S ∈ R H S\in \mathbb{R}^H S∈RH和一个结束向量 E ∈ R H E\in \mathbb{R}^H E∈RH在微调期间。单词i的概率是开始计算答案跨度作为一个点积在 T i T_i Ti和S之间跟随一个点积,段落中所有单词softmax。 P i = e S ⋅ T i ∑ j e S ⋅ T j P_i=\frac{e^S\cdot T_i}{\sum_je^{S\cdot} T_j} Pi=∑jeS⋅TjeS⋅Ti.相似的公式使用在结束的答案跨度中。候选跨度的分数是从位置i到位置j被定义为 S ⋅ T i + E ⋅ T j S\cdot T_i+E\cdot T_j S⋅Ti+E⋅Tj,使用 j ≥ i j\ge i j≥i最大化的分数跨度作为预测。训练目标是正确开始和结束位置的最大释然函数的和。3个epochs,学习率是 5 e − 5 5e^{-5} 5e−5,batch_size是32.
表2展示排行榜的头部跟发布系统头部是一样的。(Seo et al.,2017;Clark and Gardner,2018;Peters et al.,2018a;Hu et al.,2018).SQuAD头部结果没有最新可获得的系统描述,当训练它们的系统允许使用任何公开的数据。因此我们使用适度的数据增加在我们的系统在SQuAD微调之前,首次在TriviaQA微调。
我们最好的执行系统胜过排行榜头部系统在融合情况下F1高1.5,单独系统高1.3。事实上,我们单独BERT模型就F1值而言超过头部融合系统。不用使用TriviaQA微调数据,我们仅仅损失0.1-0.4分数,仍然远远超过所有既存系统。
4.3 SQuAD v2.0
SQuAD2.0任务延伸了SQuAD1.1问题定义通过考虑在提供段落中没有短回答的存在,使得问题更加符合实际情况。
在这个任务中我们使用了一个简单的方法来扩增SQuAD V1.1 BERT 模型。我们将没有答案的问题视为一个答案跨度使用[CLS]符号作为开始和结束。开始和结束的问答跨度位置的概率空间扩展为包含位置[CLS]的符号。预测,我们比较没有答案跨度的分数 s n u l l = S ⋅ C + E ⋅ C s_{null}=S\cdot C+E\cdot C snull=S⋅C+E⋅C跟最好非空跨度的分数 s i ^ , j = m a x j ≥ i S ⋅ T i + E ⋅ T j s_{\hat{i},j}=max_{j\ge i}S\cdot T_{i} + E\cdot T_j si^,j=maxj≥iS⋅Ti+E⋅Tj.当 S i ^ , j > s n u l l + τ S_{\hat{i},j}>s_{null}+\tau Si^,j>snull+τ,阈值 τ \tau τ选择开发数据集上的最大F1值。这个模型我们没有使用TriviaQA数据集。微调在2的epochs学习率是 5 e − 5 5e^{-5} 5e−5,bacth_size是48.
4.4 SWAG
对抗生成数据集包含11.3万完整样本句子对来评估理性常识推理(Zellers et al.,2018).给予一个句子,任务是从4个选项中选择一个最合理的延续。
在SWAG数据集上微调,我们构造4个输入序列,每一个包含连接给予句子(句子A)和一个连续的句子(句子B)。这个特殊的任务参数仅仅引入了[CLS]符号表示C的点积表达每一个选择的分数的向量,使用softmax层来进行标准化。
我们微调的模型使用了3个epochs,学习率是 2 e − 5 2e^{-5} 2e−5,batch_size为16.表4中展示了结果。 N E R T L A R G E NERT_{LARGE} NERTLARGE超越作者基准线 E S I M + E L M o ESIM+ELMo ESIM+ELMo系统27.1%,OpenAI GPT超出了8.3%。
5 消融实验
在这个章节中,我们展示了BERT消融实验大量的事实为了更好的理解它们相关的重要性。额外的消融研究在附录C.
5.1 预训练任务的影响
我们通过评估两个预训练目标使用实际相同的预训练数据、微调的规则,作为 B E R T B A S E BERT_{BASE} BERTBASE的超参数来证明深度双向BERT的重要性。
No NSP:
一个双向的模型使用“MLM”训练而没有使用“下一个句子预测”NSP任务。
LTR&No NSP:
一个仅仅左内容模型使用了一个标准左到右的语言模型,而不是一个MLM.left-only也应用在微调,因为移除它会引入预训练和微调的错误匹配使得下游任务效果的衰减。额外的,这个模型预训练没有NSP任务。这个可以直接与OpenAI GPT比较,但是我们使用更大的训练数据集,我们输入的表示,和我们的微调规则。
我们首先检查了NSP任务带来的影响,在表5,我们展示了移除了NSP任务严重的损害了QNLI,MNLI,SQuAD性能。下一个,我们评估双向表示训练的影响通过比较“No NSP”跟“LTR & No NSP”.LTR模型比MLM模型在所有的任务中效果更差,在MRPC和SQuAD任务下降的更严重。
对于SQuAD,LTR模型在符号预测上表现糟糕是清晰直观的,因为符号级别隐藏状态没有右侧上下文。为了一个好的信念我们尝试加强LTR系统,我们在头部增加了一个随机初始化的BiLSTM.这在SQuAD上有重大的结果提升。BiLSTM在GLUE任务上损害了性能。
我们认识到分别训练LTR和RTL模型和连接两个模型每个符号的表示也是可能的,像ELMo。当然(a)两次跟单个双向模型一样昂贵。(b)像QA任务这是不直观的,因为RTL模型不能够在问题上来决定答案。(C)这个比深度双向模型严格缺少力量,因为深度双向模型能在每一层使用左右上下文。
5.2 模型大小的影响
在这个章节中,我们暴露在微调任务acc上模型大小的影响。我们训练大量的BERT模型使用不同数量的层,隐藏单元,注意力头,当然另外使用相同上面描述的超参数和训练程序。
选择GLUE任务的结果展示在图6。在这个表中,我们从5次随机重新开始的微调报道了在开发集的acc.我们能看到大模型在所有4个数据集导致严格准确率的提升,甚至MRPC仅有3600个标签的训练样本,这实质上跟预训练任务是不同的。这也是或许是令人惊讶的,我们在跟头部的相对于现有文献已经相当大模型实现了相当大的提升。例如,在Vaswani et al.(2017)探测的最大的Transformer编码层1亿个参数,在文件中发现的最大的Transformer是(L=24,H=512,A=2)2.35亿的参数(AL-Rfou et al.,2018).与之相比, B E R T B A S E BERT_{BASE} BERTBASE包含1.1亿的参数, B E R T L A R G E BERT_{LARGE} BERTLARGE包含3.4亿的参数。
已经知道很长时间增加模型的尺寸将会导致在大规模的任务上有持续的提升诸如机器翻译和语言模型,这个在表6中的LM训练数据的困惑度来表示。当然,我们相信这是第一个证明缩放极大的模型尺寸在很小规模的任务也能带来极大的提升,提供的模型已经进行充足的预训练。Peters et al.(2018b)增加预训练bi-LM尺寸从2层到4层对下游任务的影响提出不同的结果且Melamud et al.(2016)提及通过增加隐藏层尺寸从200到600是有帮助的,但是进一步增加到1000并没有带来进一步的提升。所有他们之前的工作使用的基于特征的方法-我们假设当一个模型直接在下游任务进行微调且仅仅使用一个非常小数量的随机初始化额外参数,这个特别任务模型得益于大尺寸,更多预训练的表达,甚至下游任务数据很小。
5.3 BERT特征为基础的方法
所有的BERT结果展现目前为止使用的微调方法,一个简单的分类层加到了预训练模型,所有的参数在一个下游任务中共同的微调。当然,特征为基础的方法,从预训练模型固定的特征被提取,有确定的优势。首先,不是所有的任务可以通过一个Transformer编码架构来表示,因此需要一个特殊模型架构加入。第二,主要是计算益处,预计算一次训练数据昂贵的表达然后在这个表达之上运行很多次简单实验模型。
在这个章节,我们比较两种方法通过应用BERT到CoNLL-2003命名实体识别任务(Tjong Kim Sang and De Meulder,2003).在BERT的输入中,我们使用保留大小写的WordPiece模型。我们包含数据提供最大化的文本内容。随着标准的训练,我们规范这个为目标任务而不是在输出使用一个CRF层。我们使用第一个子符号表示作为符号级别分类的输入在NER标签数据集之上。
消除微调方法,我们通过提取一层或则多层激活来应用特征为基础方法不适用BERT任何微调的参数。这个上下文的embeddings作为输入使用在随机初始化的两层768维度的BiLSTM在分类层之前。
结果在表7提供。 B E R T L A R G E BERT_{LARGE} BERTLARGE效果跟最先进的水平的方法竞争。最好效果的方法连接预训练Transformer上方4个隐藏层符号表达,仅仅落后微调完整模型0.3F1.这证明BERT对于微调和以特征为基础的方法都是有效的。
6 结论
最近实证的改善因为语言模型迁移学习已经丰富的证实,无监督预训练是许多语言理解系统不可或缺的一部分。尤其是,这些结果使得资源匮乏的任务从深度单向任务受益。我们主要的贡献是进一步通用化的发现深度双向架构,允许相同的预训练模型成功的处理广泛的一系列NLP任务。
附录
我们将附录组织到3个部分。
BERT额外的详细实现在附录A提供;
我们实验额外详细的内容提供在附录B;
额外消融实验研究在附录C;
我们提出额外的BERT消融研究包括
- 训练步骤的数量的影响。
- 不同遮盖程序的消融。
A BERT详细表述
A.1 说明预训练任务
我们在下面提出了预训练任务的样本。
Masked LM和Masking Procedure
假设无标签的句子是my dog is hairy
,在随机遮盖程序的过程中我们选择第四个符号(相对应的是hairy),我们marking procedure进一步的说明如下。
- 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
.这个目的是偏置的表示趋向实际观察的单词。
这个程序Transformer编码的优势是不知道哪些单词被问来预测或者随机替换某些单词,所以它强制保持每一个输入符号上下文分布的表示。额外的,因为随机发生替换的1.5%(例如10%,15%)所有的符号,这似乎没有损害语言模型的理解能力。在C.2章节,我们评估这个程序的影响。
跟标准语言模型训练比较,masked LM每个批次仅仅预测15%的符号,为了模型的收敛建议需要更多的预训练步骤。在C.1章节我们证实MLM比left-to-right模型(预测每一个符号)收敛稍微慢了些,但是MLM模型实证的提高远远超过训练花费的提升。
预测下一个句子
下一个句子的说明如下例子来说明。
Input=[CLS] the man went ot [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 预训练程序
为了生成每个训练输入序列,我们从预料中抽样了两个文本跨度,我们引用为句子甚至他们典型比单独句子更长(但是也能更短)。第一个句子接收A embedding然后第二个句子接收 B embedding.50%时间B是A后面真实的下个句子,50%的时间是一个随机的句子,这个做法称为"next sentence prediction"任务。他们进行采样且组合长度小于等于512个符号。LM masking应用在WordPiece分词之后使用统一的15%masking率,并且没有特别考虑部分单词。
我们训练每个batch是256序列(256序列*512符号=128 000符号/批次)一共1000 000步,大约40个epochs在3.3亿个单词预料上。我们使用Adam学习率是
1
e
−
4
1e^{-4}
1e−4,
β
1
=
0.9
,
β
2
=
0.999
,
L
2
权
重
衰
减
为
0.01
\beta_1=0.9,\beta_2=0.999,L2权重衰减为0.01
β1=0.9,β2=0.999,L2权重衰减为0.01,学习率预热在第一个10000步上,线性衰减学习率。在所有层上我们使用dropout概率为0.1.我们使用gelu
(Hendrycks and Gimpel,2016)激活函数而不是标准relu
。跟随OpenAI GPT.训练的损失是masked LM似然的平均与下一句句子预测似然的和。
B E R T B A S E BERT_{BASE} BERTBASE训练执行在Pod配置4个Cloud TPUs上(总共16片TPU)。 B E R T L A R G E 训 练 执 行 在 16 个 C l o u d T P U s BERT_{LARGE}训练执行在16个Cloud TPUs BERTLARGE训练执行在16个CloudTPUs(一共64片TPU)。每个预训练花费4天完成。
长序列是不成比例的昂贵因为注意力跟序列的长度成二次方。为了加速我们的实验,我们在90%的步骤预训练的模型序列的长度是128.我们训练剩余的10%序列的长度为512来学习位置embeddings.
A.3 微调程序
微调,模型大多数参数跟预训练是一样的,期望的batch size,学习率,训练epochs数量。dropout概率总保持在0.1.可选择的参数值是特殊任务,但是我们发现下面范围可能的值在所有任务上做的好。
- batch size:16,32
- 学习率(Adam): 5 e − 5 , 3 e − 5 , 2 e − 5 5e^{-5},3e^{-5},2e^{-5} 5e−5,3e−5,2e−5
- epochs数量:2,3,4
我们发现大数据集(例如:100k+标签的训练样本)比小数据集对于超参数的选择更不敏感。微调代表性的快,所以有理由在上面的参数之上简单跑一个详尽的搜索并且选择在开发数据集上最后效果的模型。
A.4 BERT,ELMo,OpenAI GPT比较
这里我们研究最近受欢迎表示学习不同的模型,包括BERT,ELMo,OpenAI GPT.模型架构之间的比较在图3进行可视化表示了。注意除了不同的架构以外,BERT和OpenAI GPT是微调的方法,而ELMo是以特征为基础的方法。
更加可比较存在的预训练方法是BERT和OpenAI GPT,训练一个left-to-rightTransformer LM在一个大文本语料库。事实上,许多决定在BERT上的设计有意使之跟GPT尽可能的相近以至于两个方法能最小化的比较。这个工作争论的核心是双向和两个预训练任务呈现在3.1章节导致对主要的实际提升,但是我们注意这有几个其他的不同在BERT和GPT怎么训练。
- GPT在BooksCorpus(800M)上训练的;BERT在BooksCorpus(800M词)和Wikipedia(2500M词)。
- GPT使用一个句子分离([SEP])和分类符号([CLS])仅仅引进在微调时候;BERT学习[SEP],[CLS]和句子A/B embeddings在预训练的时候。
- GPT训练1百万步,一个batch 是32000词;BERT训练1百万步,一个batch是128000词。
- GPT使用相同的学习率 5 e − 5 5e^{-5} 5e−5在所有微调时间;BERT选择一个特殊的任务微调学习率在开发数据集上最好的效果。
分离这些不同的影响,我们在5.1章节执行了消融实验,证明主要的提升主要来源于两个预训练的任务和它们启用了双向。
A.5 说明在不同任务的微调
BERT在不同任务的微调说明请看图4.我们特殊的模型是结合BERT与一个额外的输出层形成的,所以一个最小数量的参数需要从头开始学习。几乎所有的任务,(a)和(b)是一个序列级别的任务,而©和(d)是符号级别的任务。在图中,E表示输入embedding, T i T_i Ti表示符号i的上下文表示,[CLS]对于分类输出是一个特殊的符号,[SEP]是分离不连续字符序列的特殊符号。
B 详细实验步骤
GLUE 基准线实验详细描述
我们GLUE结果在表1中可以从https://gluebenchmark.com/leaderboard 和 https://blog.openai.com/language-unsupervised获得。GLUE基准线包含下面的数据集,原始的概述描述在Wang et al.(2018a).
MNLI
多生成自然语言推理是一个大规模,众包蕴含分类任务(Williams et al.,2018).给一对句子,目标是预测第二个句子是否与第一个句子有关,是蕴含,反对,中立。
QQP
Quora问题对是一个二分类任务,目标是决定在Quora两个问题是否语等价。(Chen et al.,2018)
QNLI
自然语言推理是斯坦福问答数据集一个版本(Rajpurkar et al.,2016),已经转换成一个二分类任务了(Wang et al.,2018a).正样本是(问题,句子)对,句子中包含正确的答案,负样本是(问题,句子)来自相同的段落中但是不包括答案。
SST-2
斯坦福情感数图数据库是一个二值化单句分类任务由电影评论,人情感释意提取出来的。(Socher et al.,2013)
CoLA
语言可接受性语料库是一个二值化的单句子分类任务,目标是预测是否一个英文句子是语言学上可接受的还是不可接受的。(Warstadtet al.,2018)
STS-B
语义文本相似基准线是一个从新闻头条和其他源收集的句子对(Cer et al.,2017).它们被分数从1到5注释,分数代表两个句子就语义而言的相似度。
MRPC
微软搜索释义语料由从线上新闻数据源自动提取的句子对,带有人工注释,句子对在语义上是否相等。(Dolan and Brockett,2005)
RTE
识别文本蕴含是一个二值蕴含任务跟MNLI相似,但是有更少的训练数据(Bentibvogli et al.,2009).
WNLI
Winograd NLI是一个小的自然语言推理数据集(Levesque et al.,2011).GLUE网页上提示这个数据集构成有一个问题,每一个提交到GLUE的训练系统币基准线65.1acc执行的更糟糕在预测主要类别。我们为了公平的跟OpenAI GPT因此排除了这个数据集。对于我们的提交,我们总是预测主要的类别。
C 附加的消融研究
图5提供了在从一个已经预训练k步的checkpoint微调的MNLI Dev acc,这允许我们回答下面的问题;
- 问题:BERT真的需要如此大规模的预训练(每一个batch128000单词,一共1000000步)来实现一个高微调acc吗?
- 回答:是的, B E R T B A S E BERT_{BASE} BERTBASE在MNLI上训练1百万步跟训练50万步实现了几乎额外1%的acc.
- 问题:MLM预训练比LTR预训练收敛缓慢,因为仅仅在每个batch中仅仅15%被预测而不是每个单词?
- 回答:MLM模型比LTR模型收敛稍微慢了些。当然,就MLM模型提升的绝对acc而言几乎立即开始优于LTR模型
C.2 不同Masking程序的消融
在3.1章节,我们提及BERT在以遮掩语言模型(MLM)为目标的预训练时使用了混合策略,为了遮掩目标符号。下面是一个消融研究来评估不同遮掩策略的影响。
注意遮掩策略的目标是减少错误匹配预训练和微调,因为微调阶段[MASK]符号从来没有出现。我们报道MNLI和NER的开发结果。对于NER,我们报道了微调和以特征为基础的方法,因为我们期望错误匹配将会放大以特征为基础的方法,因为模型没有机会调整分布。
结果在表8中提出。在这个表,MASK意味着我们为MLM使用[MASK]符号来替换目标符号;SAME含义我们保持目标符号;RND意味着我们使用另一个随机符号来替换目标符号。
表左边的数据表示特殊策略使用替换的概率在MLM预训练期间(BERT使用80%,10%,10%)。论文的右侧部分表示开发集的结果。以特征为基础的方法,我们连接BERT最后的4层最为特征,在5.3章我们只能是的最好的方法。
从这个表能看到微调对于不同的策略是有惊人的鲁棒性。当然,不错所料,仅仅使用MASK策略是有问题的,当应用以特征为基础的方法。有趣的事,仅仅使用随机的策略比我们的策略更糟糕。