在Transformer和BERT大行其道的时代,搞懂这两种基础模型结构很有必要,在网上没有搜索到满意的论文翻译结果,最近刚好有时间,把BERT的论文在个人英语水平基础上最大程度的保留原作者的本意翻译一遍,如有翻译不到位的地方请各位指出,觉得不错的点个赞鼓励一下,Tansformer的论文我之前已经翻译了,可以查看我的这篇博客attention is all you need 论文翻译。查看bert原论文请点击
以下是翻译部分:
我们介绍一种新的语言表示模型叫BERT,它是Bidirectional Encoder Representations from
Transformers的缩写。与最近的语言表示模型(Peters et al., 2018a; Radford
et al., 2018)不同,BERT的所有层旨在通过联合训练左右上下文的方式从未标注文本中预训练深层的双向表征。因此,预训练好的BERT模型只需使用额外的一层输出层进行微调后就能为广泛的任务创建最好的模型,例如问答和语言推理,而无需针对特定任务进行大量的结构修改。
BERT概念简单且实验效果很好,它在11项自然语言处理任务中获得了最好的结果,包括将GLUE分数提高到80.5%(7.7%的提升),将MultiNLI准确率提高到86.7%(4.6%的提升),将SQuAD v1.1 Test的问答F1值提高到93.2(1.5个点的提升),SQuAD v2.0 Test的F1提高到83.1(5.1个点的提升)。
预训练语言模型已经被证明能够有效的提升很多自然语言处理任务的效果(Dai and Le, 2015; Peters et al.,2018a; Radford et al., 2018; Howard and Ruder,2018)。这些任务包括如自然语言推理(Bowman et al., 2015;Williams et al., 2018)和自然语言理解(Dolanand Brockett, 2005)等句子级任务,这些任务的目的都是通过分析整体句子来预测句子间的关系,也包括命名实体识别和问答等词级别任务,这些任务的模型要求能够产生更细粒度的词级别输出(Tjong Kim Sang and De Meulder, 2003; Rajpurkar et al., 2016)。
目前有两种方式将预训练得到的语言表征应用于下游任务:feature-based(基于特征的)和fine-tuning(微调)。基于特征的方法,例如ELMO(Peterset al., 2018a),它使用特定任务模型结构生成的预训练好的表征作为额外的特征。微调的方法,例如Generative Pre-trained Transformer (OpenAIGPT) (Radford et al., 2018),它引入极少的特定任务参数,并且只需要简单的微调预训练好的参数就可以对下游任务进行训练。这两种方法在预训练的过程中都使用的是同一个目标函数,它们使用的都是单向的语言模型学习通用的语言表征。
我们认为目前的技术限制了预训练表征的效果,特别是基于微调的方法。主要的局限在于常规的语言模型是单向的,这限制了模型在预训练过程中可使用的选择范围。比如,在OpenAIGPT中,作者使用的是left-to-right结构,在Transformer (Vaswani et al., 2017)的self-attention层中每一个词仅仅只能够注意到之前的词。这种限制对于句子级别的任务来说不是最佳的,并且当基于微调的方法应用到如问答一类的词级别任务的时候这种限制可能会非常有害,对于这类任务包含两个方向上的语义是很重要。
这篇论文中,我们提出了BERT:Bidirectional Encoder Representations from Transformers来改进基于微调的方法。受Cloze task(完形填空任务) (Taylor, 1953)的启发,我们使用了一个masked language model( MLM)预训练任务来缓解我们之前提到的单向限制的问题。MLM随机遮蔽掉输入的一些单词,其目标是仅仅依据被遮蔽掉单词的上下文去预测被遮蔽单词的原始词表对应的id。不同于left-to-right的预训练语言模型,MLM的目标能够使表征结合左右上下文,这样我们就可以预训练一个深度双向的Transformer。除了MLM之外,我们还使用了next sentence prediction任务来联合训练文本对表征。我们论文的贡献如下:
预训练通用的语言表示有很长的历史,在这部分我们先简单的回顾一下最广泛使用的方法。
学习广泛适用的词语表示已经是这几十年来最活跃的研究领域,包括非神经网络(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)之上有了显著的提升。为了获得预训练词嵌入向量,已经使用了left-to-right语言建模目标(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,2018a)从不同角度扩大了传统词嵌入的研究。他们从left-to-right 和right-to-left语言模型中提取出了上下文相关的特征。每一个token的上下文相关表征都是串联的left-to-right 和right-to-left表征。使用现有的特定任务结构融合上下文词嵌入时,提升了一些包括问答、情感分析、命名实体识别等一些主流NLP的技术水平基点(Peters et al., 2018a)。Melamud et al. (2016)提出通过一个使用LSTMs从左右的上下文来预测单个单词的任务来学习下文相关的表征。和ELMO一样,他们的模型是基于特征的并且不是深度双向的。Feduset al. (2018)表明完形填空任务可以用来提升文本生成模型的鲁棒性。
和基于特征的方法一样,这个方向上的第一个工作仅仅是从无标签文本中预训练词嵌入参数(Collobert and Weston, 2008)。
最近以来,能够产生上下文相关的token表征的句子或者篇章级编码器已经从未标注的文本中进行预训练然后在下游的监督任务中进行微调(Dai and Le, 2015; Howard and Ruder, 2018; Radford et al., 2018)。这个方法的优点就在于少许的参数需要从头开始训练。至少部分是因为这个原因,OpenAI 的GPT(Radford et al., 2018)在许多以GLUE为基准的句子级任务上达到先前最好的结果。Left-to-right语言模型和auto-encoder(自动编码器)目标已经被用于预训练这个模型(Howard and Ruder,
2018; Radford et al., 2018; Dai and Le, 2015)。
也有研究表明从大数据集的有监督任务中进行迁移是有效的,例如自然语言推理(Conneau et al.,
2017)和机器翻译(McCann et al.,2017)。计算机视觉的研究也证明了从大的预先训练的模型中迁移学习的重要性,其中一个有效的方法是用ImageNet对预训练的模型进行微调(Deng et al., 2009; Yosinski et al., 2014)。
本节中我们将介绍BERT以及具体实现。在我们的框架中有两步:pre-training(预训练)和 fine-tuning(微调)。在预训练期间,模型通过不同的预训练任务在未标注数据上训练。微调阶段,BERT模型首先会使用预训练的参数初始化,并且所有的参数将会使用下游任务的标注数据进行微调。每一个下游任务都有单独的微调模型,尽管它们被相同的预训练参数初始化。图1中的问答案例将会作为本节的操作案例。
图1:BERT的预训练和微调的总体步骤。除了输出层,预训练和微调使用了相同的结构。对于不同的下游任务使用相同的预训练参数进行初始化。微调时,所有参数会被微调好。[CLS]是被添加在每一条输入样本之前的特殊符号,[SEP]是特殊的分隔符(例如分隔问句和答句)
BERT的一个显著特点是其跨不同任务的统一结构。预训练结构和最终的下游结构之间只有极小的不同。
模型结构 BERT的模型结构是基于Vaswani et al. (2017)中描述的多层双向Transformer编码器的原始实现,并且在tensor2tensor中进行了开源。因为使用Transformer已经变得很常见并且我们的实现很大程度上和原始实现完全相同,所以我们将省略模型结构的详细背景介绍,请读者参考Vaswani et al. (2017)以及诸如“The Annotated Transformer”之类优秀的指南。
在这项工作中,我们用L表示层数(也就是Transformer模块),H表示隐层大小,A表示self-attention头数(在所有情况下,我们将feed-forward和filter的大小设置为4H,也就是3072 for the H = 768 and 4096 for the H = 1024)。我们主要公布两个尺寸的模型结果: B E R T B A S E BERT_{BASE} BERTBASE (L=12, H=768, A=12, Total Parameters=110M) and B E R T L A R G E BERT_{LARGE} BERTLARGE (L=24, H=1024, A=16, Total Parameters=340M)。
为了对比, B E R T B A S E BERT_{BASE} BERTBASE选择了和OpenAI的GPT相同的模型的尺寸。然而,关键的是,BERT的Transformer使用的是双向self-attention,而GPT的Transformer使用受约束的self-attention,其中每个token只能关注其左边的上下文(我们注意到,在文献中,双向的Transformer通常被称为“Transformer encoder” ,而 left-context-only版本被称为“Transformer decoder” ,因为它可以用于文本生成)。
输入输出表示 为了使BERT能够处理多种下游任务,我们的输入表征可以在一个序列中明确的表示单个句子或者一对句子(比如
对于给定的token,它的输入表征是由token,segment,和 position embeddings相加构成的。可视化构建可以在图2中看到。
图2:BERT的输入表征,The input embeddings are the sum of the token embeddings, the segmentation embeddings and the position embeddings
与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进行训练,然而双向作用能够允许每一个word间接性的see itself,并且模型可以在多层上下文中预测目标词。
为了训练深度双向表征,我们简单的随机遮蔽了一定百分比的输入token,然后预测这些遮蔽 token。我们把这个过程称之为masked LM(MLM),尽管在文献(Taylor, 1953)中经常被称之为完形填空。此时,遮蔽token对应的最终隐层向量喂入词表大小的softmax输出层,和标准的LM一样。在我们所有的实验中,我们随机遮蔽掉一个序列中所有WordPiece token的15%。为了与去噪自编码器对比,我们仅仅只是预测被遮蔽的词,而不是重构整个输入。
尽管这样能够使我们获得双向的预训练模型,但是一个缺点就是我们这样就会造成预训练和微调之间的不匹配,因为[MASK] token在微调时不会出现。为了缓解这个问题,我们不总是使用真实的[MASK] token 替换“masked” world。训练数据生成器会随机选取15%的token位置进行预测。如果第 i t h i^{th} ith个token被选中,我们将使用以下方法对其进行替换:(1)80%的概率用[MASK] token(2)10%的概率用随机token(3)10%的概率不替换token。然后使用交叉熵损失来用 T i T_i Ti对原始token进行预测。我们在附录二中对这一过程的变化进行了比较。
任务2:Next Sentence Prediction (NSP) 很多重要的下游任务,例如问答、自然语言推理都是建立在理解两个句子之间关系的基础之上的,这是语言模型无法捕获到的。为了训练一个能够理解句子关系的模型,我们预先训练一个二值化的next sentence prediction预测任务,这个任务可以从任何单语语料库生成。具体来说,我们在选择句子A和句子B作为一个预训练样本的时候,50%的概率句子B是句子A真实的下一句(标签是IsNext),50%的概率句子B是从语料库中随机选取的(标签是NotNext)。如我们图1所示,C用于next sentence prediction(在NSP任务上,最终的模型达到了97%-98%的准确率)。尽管它很简单,不过在5.1节部分我们证明针对这个任务的预训练对AQ和NLI都是非常有帮助的(如果没有进行微调的话,C向量是没有任何意义的,因为它是NSP训练得到的)。NSP任务与Jernite et al. (2017)和 Lee 、Logeswaran (2018)用到的表示学习目标密切相关。然而,之前的工作,仅仅只是句嵌入转移到了下游任务,而BERT是将所有参数转移从而初始化end-task模型的参数。
Pre-training data 预训练过程很大程度上遵循现存文献的语言模型预训练。我们使用BooksCorpus (800M words) (Zhu et al.,2015) 和 English Wikipedia (2,500M words)作为预训练语料库。对于English Wikipedia我们仅仅抓取文本段落而忽略列表、表格、标题。为了获取长的连续序列,使用文档级的语料比使用像Billion Word Benchmark (Chelba et al., 2013)这样无序的句子级语料更为重要。
微调是非常简单的,因为Transformer的self-attention机制能够允许BERT对很多下游任务进行建模—无论他们包含的是单个文本还是文本对—只要替换合适的输入输出。对于包含文本对的应用,一个常规的方法是在应用双向交叉attention之前单独的对文本对进行编码,例如Parikh et al. (2016); Seo et al. (2017)。BERT使用的是self-attention机制整合这两个步骤,因为使用self-attention编码的连续文本对有效的包含了两个序列之间的双向交叉attention。
对于每一个任务,我们只需将特定任务的输入和输出连接到BERT中然后端到端的训练所有的参数。对于输入,预训练中的句子A和句子B类似于(1)释义中的句子对,(2)文本蕴含中的前提和假设对,(3)问答中的问句和段落对,(4)文本分类或者序列标注中不全的text- ∅ \varnothing ∅ 对。对于输出,token 表示会被喂入token级任务的输出层,例如序列的标注或者问题的答句,并且[CLS]喂入输出层用于分类,例如情感分析和文本蕴含。
相比预训练,微调相对而言不那么昂贵。从完全相同的预训练模型开始训练,在单个云TPU上复现这篇论文中的所有结果至多一个小时,或者在GPU上几个小时(例如,BERT SQuAD模型能够在当个云TPU上训练大概30分钟F1值就能够达到91.0%)。我们将会在第4部分的相应部分详细描述task-specific。更多的细节可以在附录 A.5中找到。
在这部分,我们将提到BERT在11项NLP任务中的结果。General Language Understanding Evaluation (GLUE) 基准 (Wang et al., 2018a)是一个有着各种NLU任务的集合。在附录B.1中详细介绍了GLUE数据集。
为了在GLUE上微调,我们像第3部分描述的那样表示输入序列(单个句子或者句子对),同时我们使用第一个输入token[CLS]相对应的最终隐层向量 C ∈ R H C \in R^H C∈RH作为总的表示。微调过程中需要介绍的新参数仅仅是分类层的权重 W ∈ R K × H W \in R^{K×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))。
在所有的GLUE任务的数据上,我们的batch size为32,epoch为3。对于每一个任务,我们在验证集上选择了最好的学习率(5e-5, 4e-5, 3e-5, 2e-5)。此外,我们发现 B E R T L A R G E BERT_{LARGE} BERTLARGE有时在小数据集上不稳定,所以我们随机重启运行,选择了验证集上最好的模型。我们使用了相同的预训练checkpoint(模型文件),但是运用了不同的fine-tuning data shuffling(微调数据打乱)和classifier layer initialization(分类器层初始化)。
表1:GLUE测试结果,由评估服务器评分(https://gluebenchmark.com/leaderboard)。每一项任务下的数字表示训练数据的数量,“Average”列的数据与官方的略微不同,因为我们排除了有问题的WNLI set。BERT和OpenAI GPT是单独模型,单独任务。QQP和MRPC公布了F1分,STS-B公布了Spearman相关系数,其他任务公布准确性得分。我们排除了使用BERT作为组件的条目。
表1中展示了结果。 B E R T B A S E BERT_{BASE} BERTBASE和 B E R T L A R G E BERT_{LARGE} BERTLARGE在所有任务上的性能表现比所有系统都要好。分别相较与之前最先进的技术获得了4.5%和7.0%的平均准确率的提升。可以注意到 B E R T B A S E BERT_{BASE} BERTBASE和OpenAI的GPT除了attention masking以外从结构的角度来看是几乎完全相同的。以公布最多GLUE任务MNLI来看,BERT获得了4.6%的绝对准确率提升。在官方的GLUE leaderboard上, 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明显比 B E R T B A S E BERT_{BASE} BERTBASE表现更好,特别是那些只有少量训练数据的任务。在5.2节部分我们将更深入的探索模型尺寸的影响。
**Stanford Question Answering Dataset (SQuAD v1.1)**是一个10万个crowd-sourced问答对的集合(Rajpurkar et al.,2016)。给定一个问题和一个来自包含答案的Wikipedia段落,任务是预测答案在段落中所在的位置。如图1所示,我们把问句和段落用单个压缩序列来表示,问句用A嵌入,段落用B嵌入。在微调的期间我们仅仅只是引入一个起始向量 S ∈ R H S \in R^H S∈RH和一个结束向量 E ∈ R H E \in R^H E∈RH。第i个单词作为答案部分开始的概率是通过计算 T i T_i Ti和 S i S_i Si的点积然后对段落中的所有词进行softmax计算 P i = e S ⋅ T i ∑ j e S ⋅ T j P_i=\cfrac{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的最高得分区域作为预测值。训练的目标是求正确的起始位置和结束位置的对数概率的和。我们微调使用的epoch值是3,学习率是5e-5,batch size是32。
表2显示了顶级排行榜条目以及来自顶级发布系统的结果,(Seo et al., 2017; Clark and Gardner, 2018; Peters et al., 2018a; Hu et al., 2018)。来自SQuAD排行榜的最高结果没有最新的公共系统描述,并且允许我们在训练时使用公共数据集。因此我们使用了首先在TriviaQA (Joshiet al., 2017)上进行微调适度的数据增强,然后再在SQuAD上进行微调。
我们表现最好的系统比排行榜上最高的集成系统的F1值高1.5,单个系统F1值高1.3。事实上,从F1值来看,我们的单BERT模型比最高的集成系统表现还要好。除了TriviaQA微调数据,我们仅仅损失了0.1-0.4F1值,但是仍然比所有现存的系统表现更好(我们使用的TriviaQA数据由TriviaQA Wiki中的段落组成,这些段落由文档中的前400个token组成,其中至少包含一个提供的可能答案)。
Squad2.0任务扩展了Squad1.1问题的定义,允许在提供的段落中不存在简短的答案,从而使问题更加现实。我们使用一个简单的方法来为这个任务扩展Squad1.1 BERT 模型。我们把没有答案的问题视作一个start和end在[CLS] token的答案区。start和end在答案区间位置的概率空间扩展到包含[CLS] token的位置。为了预测,我们将no-answer 区域的得分: S n u l l = S C + E C S_{null}=SC+EC Snull=SC+EC和non-null区域的得分: S ^ i , j = m a x j ≧ i S ⋅ T i + E ⋅ T i \widehat{S}_{i,j}=max_{j\geqq i}S\cdot T_i+E\cdot T_i S i,j=maxj≧iS⋅Ti+E⋅Ti进行比较。当 S ^ i , j > S n u l l + τ \widehat{S}_{i,j} \gt S_{null}+\tau S i,j>Snull+τ的时候即为我们预测non-null答案,其中阈值 τ \tau τ是在验证集上最大化F1值选取的。这个模型我们并没有使用TriviaQA数据。我们的微调的epoch=2,learning rate=5e-5,batch size=48。
表3中显示了我们的结果与榜单上的条目和最高的公开工作的对比(Sun et al., 2018; Wang et al., 2018b),除了使用BERT作为他们的组件之一的系统。我们发现在之前最好的系统上提升了5.1F1值。
Situations With Adversarial Generations (SWAG)数据集包括了113K个句子对用来对基础的常识推理评估。给定一个句子,任务是从备选的四个选项中选择最合理的下一句。在SWAG数据集上微调的时候,我们构造四个输入,每一个序列都是由给定的句子(sentenceA)和可能的下一句(sentence B)组成。唯一要引入的特定任务的参数是一个向量,这个向量与[CLS] token表示C进行点积表示为每一个选择的分数,然后用softmax层进行标准化。我们微调的参数为epoch=3,learning rate=2e-5,batch size=16。结构在公布于表4中。 B E R T L A R G E BERT_{LARGE} BERTLARGE比我们的baseline ESIM+ELMo提升了27.1%,比OpenAI GPT提升8.3%。
在这一部分,我们对 BERT 的许多方面进行了消融实验,以便更好地理解每个部分的相对重要性。其他的一些研究可以在附录C中找到。
我们对 B E R T B A S E BERT_{BASE} BERTBASE使用完全相同的预训练数据、微调方案和超参数来评估两种预训练目标,由此来证明BERT的深度双向的重要性:
**No NSP:**一个在训练的时候使用“masked LM” (MLM)而没有使用“next sentence prediction” (NSP)任务的双向模型。
**LTR&No NSP:**一个训练的时候使用标准的Left-to-Right (LTR)LM,而不是MLM的left-context-only模型。left-only约束也应用于微调过程,因为删除它会导致预训练/微调不匹配,从而降低下游性能。此外,这个模型的预训练没有使用NSP任务。这直接对比OpenAI GPT,但是使用的是大数据集,我们的输入表示,以及我们的微调方案。
表 5:在预训练任务中使用 B E R T B A S E BERT_{BASE} BERTBASE模型进行消融实验。“No NSP”表示不进行下一句预测任务来训练模型。“LTR & No NSP”表示就像 OpenAI GPT 一样,使用从左到右的语言模型不进行下一句预测任务来训练模型。“+ BiLSTM”表示在“LTR & No NSP”模型微调时添加一个随机初始化的BiLSTM 层
我们首先检查NSP任务带来的影响。在表5中,我们表明移除NSP任务,明显在QNLI, MNLI, 和 SQuAD 1.1上性能受损。接下来,我们对比“No NSP”和 “LTR & No NSP”在训练双向表示上的影响。在所有任务上,LTR模型的表现都比MLM模型差,在MRPC和SQuAD上落差很大。
对于SQuAD的token预测可以很清楚的看到LTR模型表现很差,因为token级的隐状态没有右边的上下文。为了尝试增强LTR体系,我们在其上加入了一个随机初始化的BiLSTM。这样在SQuAD上的结果有了明显的提升,但是结果仍然远远比双向模型预训练的结果要差。BiLSTM损害了在GLUE任务上的性能。我们意识到,还可以训练单独的LTR和RTL模型,并像ELMo那样将每个token表示为两个模型的连接。然而:(a)这样比单个双向模型昂贵了一倍;(b)这对于像 QA 这样的任务来说是不直观的,因为 RTL 模型无法以问题为条件确定答案;(c)这比深层双向模型的功能要弱得多,因为深层双向模型可以选择使用左上下文或右上下文。
在本节中,我们将探讨模型大小对微调任务准确度的影响。我们使用了不同的层数,隐藏单元,注意力头数训练了一些BERT模型,而其他超参数和训练过程与之前描述的一样。
表 6:调整 BERT 的模型大小。#L = 层数;#H = 隐藏维度大小;#A = 注意力头的个数。“LM (ppl)”表示遮蔽语言模型在预留训练数据上的困惑度。
表6中显示了选择的GLUE任务的结果。在这个表中,我们公布了 在验证集上随机重启5 次微调的平均模型准确度。我们能够看出在所有的数据集上越大的模型能够带来准确率的提升,甚至是只有3600个标注的训练样本的MRPC任务,并且与预训练任务有很大的不同。同样令人惊讶的是,相对于现有文献,我们能够在现有的模型基础上实现如此显著的改进。例如,Vaswani et al.(2017) 研究的最大 Transformer 为(L=6, H=1024, A=16),编码器参数为 100M,我们所知的文献中的最大Transformer 为(L=64, H=512, A=2),参数为235M(Al-Rfou et al., 2018)。相比之下, B E R T B A S E BERT_{BASE} BERTBASE含有 110M 参数而 B E R T L A R G E BERT_{LARGE} BERTLARGE含有 340M 参数。
多年来人们都知道,增加模型的大小将带来如机器翻译和语言模型上的持续提升,表 6 所示的由留存训练数据(held-out traing data)计算的语言模型的困惑度(perplexity)可以证明。然而,我们相信,这是第一次有力的证明,如果模型得到了足够的预训练,那么将模型扩展到极端的规模也可以在非常小的任务中带来巨大的改进。Peters et al. (2018b)提出了将预先训练的bi-LM大小从两层增加到四层下游任务影响的混合结果,Melamud et al. (2016)顺便提到,将隐藏维度大小从200增加到600有助于提高,但进一步增加到1000并没有带来进一步的改进。之前的这两种方法都是使用的基于特征的方法—我们假设模型直接在下游任务上进行微调并且只额外的使用很少的随机初始化参数,即使下游任务数据非常小,特定任务的模型也可以受益于更大、更具表现力的预训练表示。
目前提到的所有BERT结果都是使用的微调的方法,在预训练模型之后加上一个简单的分类层,然后所有的参数都会在下游任务上进行联合微调。然而,基于特征的方法,即从预训练模型中提取固定特征,具有一定的优势。首先,并不是所有的任务都能够使用Transformer编码器结构轻松的进行表示,因此需要添加特定于任务的模型体系结构。其次,能够一次性耗费大量计算预先计算训练数据的表示,然后在这种表示的基础上使用更节省计算的模型进行许多实验,这有很大的计算优势。
在本节中,我们使用两种方法将BERT应用于CoNLL-2003 Named Entity Recognition (NER) 任务上。在对BERT的输入中,我们使用了一个保留大小写的WordPiece模型,并且包含了由数据提供的最大文档上下文。遵循标准实践,我们将其作为标记任务,但不使用CRF作为输出层。我们使用第一个子token的表示作为NER标签集上token级分类器的输入。
为了消除这种微调方法,我们采用基于特征的方法,从一个或多个层中提取激活,而不需要微调BERT的任何参数。这些上下文相关的嵌入用作在分类层之前随机初始化的两层768维BiLSTM的输入。
表7:CoNLL-2003命名实体识别,使用验证集选取超参数,公布了5次随机重启中使用这些超参数的Dev和Test平均得分。
结果在表7中给出。 B E R T L A R G E BERT_{LARGE} BERTLARGE作为最好的方法表现的更具竞争力。最佳的执行方法是从预训练的转换器的前 4 个隐藏层串联符号表示,这只比整个模型的微调落后 0.3 F1 值。这说明 BERT 对于微调和基于特征的方法都是有效的。
最近,由于使用语言模型进行迁移学习而取得的实验提升表明,丰富的、无监督的预训练是许多语言理解系统不可或缺的组成部分。特别的,这些结果使得即使是低资源的任务也能从深度单向结构模型中受益。我们的主要贡献是将这些发现进一步推广到深层的双向结构,使同样的预训练模型能够成功地广泛地处理 NLP 任务。
经过一段时间的翻译,算是翻译完了,可能后面的一些实验性的部分翻译的不是很好,可能是因为我觉得实验部分不需要太严谨的翻译,明白意思即可,对于论文后面的附录部分内容,我将会在后面进行学习,并会总结在以后的博客中,应该不会太远。