【论文翻译】BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
Jacob Devlin(第一作者) 论文原文 NAACL 论文原文 arxiv
0 摘要
本文介绍一种新的语言表达模型-BERT(Bidirectional Encoder Representations from Transformers)。与近期语言表达模型 (Peters et al., 2018a; Radford et al., 2018)不同的是,BERT旨在通过联合调节所有层中的左右上下文来预先训练深度双向表示。得到的结果是,预训练的BERT模型能够仅使用一个额外的输出层进行微调(fine-tune),且没有大量的针对任务进行架构的修改,就在多种任务上取得了最好的效果,也为各种任务创建最先进的模型,比如问答系统、语言推理系统。 Bert理论简单,实战有效,经验丰富。它在11个NLP任务中取得了最好的效果,包括将 GLUE分数提高到80.5%(提高7.7%),MultiNLI auc提高到86.7%(提高4.6%),SQuAD v1.1 问题回答测试F1提高到93.2(提高1.5个点)以及SQuAD v2.0 测试 F1 提高到83.1(提高5.1个点)。
1 介绍
语言模型预训练已在多个NLP任务(Dai and Le, 2015; Peters et al.,2018a; Radford et al., 2018; Howard and Ruder,2018)中展示出了其有效性。这些任务包括自然语言推理(NLI) (Bowman et al., 2015;Williams et al., 2018)这种句子级别的任务,以及旨在通过整体分析来预测句子之间的关系的释义任务(Dolan and Brockett, 2005),同样还有命名实体识别(NER)这种字符级别的任务,SQUAD问答(Rajpurkar等,2016),其中模型需要在字符标记级别生成细粒度标记的输出。 ??将预训练的语言表示应用于下游任务有两种现有策略:基于特征的方法(feature-based)和微调(fine-tune)的方法。基于特征的方法比如ELMo (Peterset al., 2018a), 使用包含预训练表述作为额外特征的特定任务结构。微调方法比如OpenAI GPT (Radford et al., 2018), 使用一个少量任务相关的参数,通过在下游任务中简单地微调所有预训练参数来训练模型。在以前的工作中,这两种方法在预训练阶段都共享了相同的目标函数,其中,预训练阶段它们使用了单向的语言模型来学习一般语言表达。 ??我们认为当前的技术限制了预训练表达模型的能力,尤其是对微调方法。主要的限制在于标准的语言模型是单向的,并且这也限制了用来进行预训练的模型结构的选择。例如在OpenAI GPT中,作者使用了从左到右的网络结构,其中每一个字符仅能够将该字符之前的字符加入到Transformer的self-attention层中,在Transformer的自注意力层,每一个标记只能注意到它之前的标记(Vaswani et al., 2017)。这样的限制对于句子级别的任务是次优的,并且在将基于微调的方法应用于字符级任务(如SQuAD问答)时可能是毁灭性的,比如在问答系统中这对于从双向组合上下文是至关重要的。 ??在本文中,我们提出一种基于微调的方法BERT(Bidirectional Encoder Representations from Transformers)。BERT解决了先前提到的单向限制问题:受完形填空任务启发的掩码语言模型(MLM)。掩码语言模型随机地屏蔽一些输入字符,其目标是通过输入数据的上下文信息,来预测那些被屏蔽的字符的ID。与从左到右的预训练语言模型不同,MLM的目标允许得到的表示融合了上下文信息,因此,这让我们可以使用一个预训练的深度双向Transformer。对于MLM来说,我们同样会介绍一个通过联合文本对的表示用于预测下一个句子的任务。 本论文的贡献包含以下方面:
- 我们证明了对于语言表示来说,双向预训练的重要性。不同于Radford et al. (2018)使用单向语言模型做预训练,BERT利用遮挡的语言模型使得预训练深度双向表示。这个也可以对比Peters et al.(2018a),他们研究中使用一个从左到右和从右到左的独立训练的语言模型的“浅连接”。
- 我们展示了预训练的表示消除了许多工程中需要针对特定任务设计体系结构的需求。BERT是第一个基于微调的表示模型,包括它在大量句子级别任务和字符级任务上实现了最先进的性能,优于许多针对特定任务体系结构的系统。
- BERT 提升了11个NLP任务的最好效果。代码和预训练模型可通过以下链接:https://github.com/google-research/bert
2 相关研究
预训练一般语言表达有很长的历史,在这一章节我们简单的回顾以下几个最常用的方法。
2.1 基于特征的非监督方法
数十年来,学习广泛适用的单词的表示(笔者理解应该是解决一词多义的问题)一直是一个活跃的研究领域,包括非神经网络的方法(Brown et al., 1992; Ando and Zhang, 2005; Blitzer et al., 2006)和神经网络的方法(Mikolov et al., 2013; Pennington et al., 2014)。预训练word embedding是现在NLP系统中一个完整的部分,与从头开始学习的word embedding,相比有很大的提升(Turian et al., 2010)。为了预训练word embedding,从左到右的语言模型目标函数被应用过(Mnihand Hinton, 2009),同样在左右上下文中评判单词正确与否的目标函数也被应用过(Mikolov et al., 2013)。 ??这些方法被广泛的应用到粗粒度的文本内容,比如sentence embedding (Kiros et al., 2015; Logeswaran and Lee, 2018)和paragraph embedding(Le and Mikolov, 2014)。为了训练句子表达,先前的工作使用目标函数去对候选下一句子排序(Jernite et al., 2017; Logeswaran and Lee, 2018), 在给定前一句子表达的情况下从左到右生成下一句子(Kir?dkmsos et al., 2015), 或者是加噪自编码衍生出目标函数 (Hill et al.,2016 )。 ?? ELMo及其前身(Peters et al.,2017 )将传统的word embedding研究推广到一个不同的维度。它们通过从左到右以及从右到左的语言模型提取了上下文相关的特征,提出了从语言模型中获取上下文敏感的特征。每一个标记的上下文相关的表达都关联其左右语境。当将上下文word embedding与现有的特定任务体系结构结合时,ELMo推进了几个主要NLP基准测试(Peters et al.,2018)的最新技术,包括SQUAD问答系统(Rajpurkar et al., 2016),情感分析(Socher et al., 2013),以及命名实体识别(Tjong Kim Sang and De Meulder, 2003)。Melamud et al., 2016提出了通过将LSTM应用到双向文本预测单一词的任务来学习上下文语义。与ELMo相似,它们的模型都是基于特征而给深度的双向模型。Fedus et al.,2018展示了完形填空任务可以提升文本生成模型的鲁棒性。
2.2 非监督的微调方法
和基于特征的方法一样,该方法的首要工作也是在无标注文本上预训练word embedding参数(Col lobert and Weston, 2008)。 ?? 近期的研究中,产生上下文相关字符标记表示的句编码器和文章编码器,在被未标定的文本中进行预训练和在下游的有监督任务中进行微调(Daiand Le, 2015; Howard and Ruder, 2018; Radford et al., 2018)。这些方法的优势是,有少量参数需要从头学起。至少借助这优势, OpenAI GPT (Radford et al., 2018)在GLUE基准(Wang et al., 2018a)的许多句子级别的任务中取的了最好的效果。从左到右的语言模型以及自编码目标已经被使用到预训练这些模型(Howard and Ruder, 2018; Radford et al., 2018; Dai and Le, 2015).
2.3 在有监督数据上的transform学习
已经有研究表明,在大数据集上的有监督任务中transfer很有效,比如NLI (Conneau et al., 2017)和机器翻译 (McCann et al., 2017)。在NLP领域之外,CV的研究也证明了从大规模预训练模型进行迁移的重要性,其中有效的方法是在ImageNet上微调模型(Deng et al., 2009; Yosinski et al., 2014)。
3 BERT
在这一节,我们将详细介绍BERT及其实现方法。我们的框架有两步:预训练(pre-training)和微调(fine-tuning)。在预训练期间,模型在不同的预训练任务上训练未标记的数据。首先用预训练的参数初始化BERT模型,并使用来自下游任务的标签数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使他们使用了相同的预训练参数进行了初始化。图1中的问答系统示例将作为本节的运行示例。 BERT的一个显着特点是它在不同任务中有着统一架构。预训练架构和最终下游架构之间存在微小差异。
模型结构 BERT的模型结构是多层双向的Transformer编码器,该编码器是基于Vaswani et al.(2017)描述的原始实现且发布在tensor2tensor库。由于Transformer的使用很普遍并且我们的实现几乎与原始实现完全相同,我们将省略对模型架构详尽的背景描述,并且请读者参考Vaswani et al.(2017)同样优秀的指南,比如“The Annotated Transformer”。 ??在本论文中,我们指定L为layers数量(比如, Transformer blocks),H为hidden layers的大小,A为self-attention heads的个数。我们主要报告以下两种大小的模型结果:
B
E
R
T
B
A
S
E
BERT_{BASE}
BERTBASE? (L=12, H=768, A=12, Total Parameters=110M) 以及
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使用双向自注意力机制,而GPT Transformer使用有约束的自注意力机制其每一个token只能注意到其左边的内容。
输入输出层表示 为了使BERT能应对各种各样的下游任务,我们的输入表示能够在一个标记(token)序列中明确的表示单个句子和一对句子(e.g., h Question, Answeri)。通过这个工作,一个“句子”可以是任意一个片段的连续文本,而不是一个真正的(完整)的符合语言学的句子。一个“句子”指的是输入BERT的标记序列,这个序列可以是单个序列或者是两个序列连在一起。 ??我们使用带有30000个token的词汇表做WordPiece embedding(Wu et al., 2016)。每个序列的第一个token都是一个特殊的分类符号([CLS])。最终隐藏状态对应的token被用作分类任务的聚合序列表示。句子对打包在一起成为单个序列,我们有两种方式区分句子。第一,第一我们使用特殊的标记(token)([SEP])将句子分开。第二,我们在每个标记中加入一个学习embedding,表明它是属于句子A还是句子B. 如图1所示,我们用E表示输入embedding,特殊token[CLS]的最终隐藏向量为
C
∈
R
H
C\in\mathbb{R}^H
C∈RH,第i个输入token的最终隐藏向量记为
T
i
∈
R
H
T_i\in\mathbb{R}^H
Ti?∈RH. ??对于给定的token,其输入表示通过对相应的token embedding、segment embedding和position embedding求和来构造。可视化的结构如图2.
3.1 预训练BERT
不同于Peters et al.(2018a) and Radford et al.(2018)的研究,我们不使用传统的从左到右或者从右到左的语言模型来预训练BERT。我们使用两个非监督任务来预训练BERT,本小节对此介绍。这一步体现在图1的左半部分。
任务1:Masked LM(MLM) 直观的说,我们有理由相信深度的双向模型比一个从左到右模型或是一个浅层的左到右或右到左的模型更加强大。不幸的是,标准的条件语言模型只被从左到右或者从右到左训练,双向调节会允许每个单词间接地“看到自己”,并且模型可以在多层次的语境中对目标词进行简单的预测。 ??为了训练深度双向的表示,我们只是随机的mask一定百分比的输入token,然后去预测那些遮盖掉的token。我们将这个过程称为是“masked LM”(MLM),尽管它经常被归类到在文献(Taylor, 1953)中的完形填空任务。在这种情况下,对应于mask token的最终的隐藏向量通过词汇表输出softmax,正如标准的语言模型(中的操作)如标准的LM。在我们所有的实验中,在我们所有的实验中,我们随机屏蔽每个序列中所有的WordPiece token的15%。和去燥的auto-encoder相比(Vincent et al., 2008),我们只预测掩蔽的单词而不是重建整个输入。 ??虽然这能使我们得到一个双向预训练模型,但是缺点是我们造成了预训练和微调之间的不匹配,因为 [MASK] token不会再微调阶段中出现。为了减轻这个缺点,我们不能使用实际[MASK] token来替代masked word。训练数据生成器随机选取15%的token位置用于预测。如果选中第i个token,我们会用以下方式替代它:(1)80%的情况替换为[MASK] token,(2)10%的情况替换为随机的token,(3)10%的情况保持不变。然后Ti 将用于预测具有交叉熵损失的原始token。在附录C.2中我们比较了该过程的不同之处。
任务2:下一句子预测(NSP) 许多重要的下游任务都是基于对两个句子之间关系的理解,这不能从语言模型中直接捕获到,比如问答系统QA和自然语言推理NLI。为了训练理解句子间关系的模型,我们预训练了二值化的下一句预测任务,该任务可以从任何单一语料库中轻松的生成。具体的,当选择句子A和B作为每个预训练样例,50%的情况下B是真正A后面的下一个句子(标记为IsNext),且50%的情况下B是从语料库中任意选一个句子作为下一句(标记为NotNext)。正如图1所示,C用于下一句子预测(NSP)。尽管这很简单,我们仍会在5.1小节展示针对这个任务(指NSP)的预训练对问答系统QA和自然语言推理NLI非常有效。 NSP任务与Jernite等人研究中的使用的表征学习目标密切相关。然而,之前的工作只将sentence embedding传递到下游任务,其中BERT传输所有参数以初始化最终任务模型参数。
预训练数据 预训练过程很大程度遵循现有研究的语言模型预训练。我们使用BooksCorpus (800M词汇) (Zhu et al., 2015) 和英文维基百科(2,500M词汇)作为预训练语料库。对于维基百科我们只获取文本片段,忽略列表,表格,标题等。为了提取长连续序列,关键是要使用文档级的语料库,而不是像Billion Word Benchmark (Chelba et al.,2013 的百万词基准)这样打乱的句子级语料库。
3.2 微调BERT
微调是理所应当且简单直接的操作,因为Transformer中的自注意机制允许BERT通过交换适当的输入和输出来模拟许多下游任务,无论任务是单个文本还是文本对。对于涉及文本对的应用,一个常见的模式是在应用双向交叉注意机制对之前独立编码文本对,比如Parikh et al.(2016); Seo et al.(2017)。BERT使用self-attention机制来统一这两个阶段,因为编码具有自关注的连接文本对有效地包括两个句子之间的双向交叉关注。 ??对于每个任务,我们只需将任务特定的输入和输出插入到BERT中,并将所有参数端到端地输入。在输入端,来自训练前的句子A和句子B类似于(1)对句子进行释义,(2)暗含的 hypothesis-premise 对,(3)问答中的问答对,以及(4)在文本分类或序列标记中退化text-? 对。在输出端,token表示被馈送到用于符号级任务的输出层,例如序列标记或问题应答,并且[CLS]表示被馈送到输出层以用于分类,例如entailment 或是情感分析。 ??与预训练相比,微调相对容易。从完全相同的预训练模型开始,本文中的所有结果可以在单个云TPU上最多1小时复现,或者在GPU上几小时复制。在第四节相应的小节中,我们描述了任务特定的细节。更多细节可以在附录A.5中找到。
4. 实验
本小节,我们将展示BERT在11个NLP任务上的微调。
4.1 GLUE
通用语言理解评估(GLUE)基准(Wang et al., 2018a) 是各种自然语言理解任务的集合。关于GLUE数据集的详细描述参见附录B.1。 为了在GLUE上微调,我们回忆第3节中描述的输入序列(单个句子或句子对),并使用与第一个输入符号([CLS])对应的最终隐藏向量
C
∈
R
H
C\in\mathbb{R}^H
C∈RH作为聚合表示。在微调期间引入的唯一新参数是分类层权重
W
∈
R
K
×
H
W\in\mathbb{R}^{K \times 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并对3个epochs的数据进行微调。对于每项任务,我们都在验证数据集上选用最好的微调学习率( 5e-5, 4e-5, 3e-5, 以及2e-5)。另外我们发现
B
E
R
T
L
A
R
G
E
BERT_{LARGE}
BERTLARGE? 在小数据集上有时候并不稳定,因为我们随机执行几次重启并在验证集上选用最好的模型。使用随机重启,我们使用相同的预处理检查点(模型),但是执行不同的微调数据重组以及分类层初始化。 ??结果如表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%的平均准确度的提升。我们注意到
B
E
R
T
B
A
S
E
BERT_{BASE}
BERTBASE?和OpenAI GPT除了注意力mask之外,模型结构几乎一样。对于最大最广范的GLUE任务,MNLI, BERT达到了4.6%绝对准确率提高。在BLUE排行榜上,
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小节更深入的讨论。
4.2 SQuAD v1.1
斯坦福问答数据集(SQuAD v1.1)系统收集了100K个问答对(Rajpurkar et al., 2016)。给定一个问题以及Wikipedia中包含答案的段落,任务是预测段落中的答案文本范围。 ??如图1所示,在问答任务中,我们将输入问题和段落表示为一个单独压缩序列,问题使用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
i
i作为答案开始的概率,计算
T
i
T_i
Ti?和
S
S
S之间的点积,然后是段落中所有单词的softmax:
P
i
=
e
S
?
T
i
∑
j
e
S
?
T
i
P_i=\frac{e^{S\cdot T_i}}{\sum_j e^{S\cdot T_i}}
Pi?=∑j?eS?Ti?eS?Ti??。类似的公式用于答案的末端。从候选文本段(第i个词到第j个词)的得分定义为
S
?
T
i
+
E
?
T
i
S \cdot T_i+E \cdot T_i
S?Ti?+E?Ti?,以及
j
≥
i
j \geq i
j≥i用作预测的最大得分跨度,训练的目标函数是开始和结尾位置正确的极大似然函数的对数之和。我们进行3个epoch,学习率为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的第一次微调,在我们的系统中使用适度的数据增强 (Joshi et al., 2017) 。 ??我们最好的新能系统胜过顶级排行榜系统,集成系统增加1.5F1,单个系统增加1.3F1. 实际上,在F1分数方面,我们单个BERT模型由于顶级集成系统。在没有TriviaQA的微调数据,我们我们只损失了0.1-0.4 F1,仍然远超于所有现有系统。
4.3 SQuAD v2.0
SQuAD 2.0任务扩展了 SQuAD 1.1的问题定义,通过允许在所提供的段落中没有简短答案的可能性,使得问题更加现实。 ??对于该任务我们使用简单的方法来扩展SQuAD v1.1 BERT模型。我们将没有答案的问题视为具有从[CLS]标记处开始和结束的答案范围。开始和结束答案范围位置的概率空间被扩展为包括[CLS]token的位置。对于预测,我们将无应答范围:
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
i
S_{\widehat{i}j}=\mathrm{max}_{j\geq i}S\cdot T_i+E\cdot T_i
Si
j?=maxj≥i?S?Ti?+E?Ti?的得分进行比较。当
S
i
^
j
≥
S
n
u
l
l
+
τ
S_{\widehat{i}j} \geq S_{null} + \tau
Si
j?≥Snull?+τ,我们预测是一个非空答案,其中阈值
τ
\tau
τ在验证集最大化F1选出。在这个模型中我们没有使用TriviaQA数据。我们微调了2个epoch,学习率为5e-5,batch size为48。 ??表3中展示了与之前排行榜条目和最好的已发布研究工作(Sun et al., 2018;Wang et al., 2018b),这也包括了所用BERT的一些系统。我们注意到比之前最好的系统F1有5.1提升。
4.4 SWAG
具有对抗性生成的情况(SWAG)数据集包含113k个句子对完成示例,其评估基于常识的推论(Zellers et al., 2018)。该任务是给定一个句子,在四个选项中选择最有可能是下一句的选项。 ??在SWAG数据集上微调时,我们构建4组输入序列,每一个序列都包含给定句子(句子A)和可能的下一句(句子B)的关联。唯一引入的任务特定的参数是个向量,该向量与[CLS]token的表示C做内积,表示每个选项的得分,这个得分会通过softmax层进行归一化。 ??我们微调模型,使用3个epoch,学习率为2e-5,batch size为16。结果如表4所示。
B
E
R
T
L
A
R
G
E
BERT_{LARGE}
BERTLARGE?分别以27.1%远超于作者初始ESIM+ELMo系统,8.3%优于OpenAI GPT。
5.消融实验(模型简化实验)Ablation Studies
在本小节,我们将在BERT的方方面面进行消融实验,以更好的理解他们关联价值。更多的消融研究可参见附录C。
5.1 预训练任务的作用
通过评估两个使用和
B
E
R
T
B
A
S
E
BERT_{BASE}
BERTBASE?完全相同的预训练数据、微调策略以及超参数的预训练目标函数,来论证BERT深度双向的重要性。
No NSP: 一个用MLM训练的双向模型,没有“下一句预测”NSP任务。
LTR & No NSP: 一个左上下文模型,是用从左到右(LTR)标准语言模型(LM)而非MLM训练的。左向约束也作用于微调,因为若删除此约束就会引入与训练和微调不匹配问题,这会减低下游任务的效果。另外模型不使用NSP任务预训练。这直接和OpenAI GPT可对比,但是训练使用我们的更大的训练数据集、我们的输入以及我们的微调策略。
??我们首先评测NSP任务带来的影响。表5展示了删除NSP,显著的降低了在QNLI、MNLI和SQuAD 1.1上效果。
紧接着,我们通过比较“No NSP”和“LTR & No NSP”来评估对训练双向表达的影响。在所有任务中LTP模型都逊色与MLM模型,在MRPC和SQuAD上有极大的下降。 ??对于SQuAD数据集,LTR模型在token预测上显然会表现差,因为字符级别的隐藏状态,上下文没有右侧信息。为了更好的尝试加强LTR系统,我们在顶层增加随机初始化的BiLSTM。这样做在SQuAD上有显著提高,但是仍然要比预训练双向模型的效果差很多。BiLSTM降低了在GLUE任务上的效果。 ??我们认识到,可以单独训练LTR和RTL模型并且将每个token表示为两个模型的关联,正如ELMo所做的。然而,(a)这是单个双向模型的两倍开销;(b)对于问答系统这是不直观(不可行的),以为RTL模型不能保证“答案”就是问题对于应的答案;(c)它确实没有深度双向模型效果好,因为深度双向模型每一层能使用双向上下文,左上下文或者右上下文。
5.2 模型大小的作用
本小节,我们将探索模型大小在微调任务准确率上的作用。我们使用许多不同层数、隐藏单元以及注意力头来训练BERT模型,然而其他方面如前边描述使用相同的超参和训练过程。 表6展示了GLUE任务的效果。这张表显示了在验证集上5次随机重启微调的平均准确率。我们可以看出较大模型会使得在所有4个数据集上的准确率明显提升,即使在只有3600个标定的训练样本的MRPC上,也与预训练任务有很大不同。同样令人惊讶的是,相较于现有文献已经相当大模型上我们能够取到如此重大提升。例如,Vaswani et al.2017 提出的最大的Tansformer结构(L=6, H=1024, A=1)用于encoder参数有100M。我们发现Al-Rfo et al.,2018 的文献中最大的Transformer结构(L=64, H=512, A=2) 用于encoder参数有235M。相比之下,
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的LMpp(数据)证明了这一点。然而,我们相信这是第一个研究工作证明:经过充分预训练的模型,扩展到极致大小的模型也可以使得小规模任务有很大的提升。Peters et al.(2018b)的研究呈现了将预训练bi-LM大小由2层变为4层对下游任务影响的混合结果。Melamud et al.(2016)的研究顺带提出隐藏维度从200提升到600对效果有一定提升,但是扩大到1000并没有来带进一步的提升。这些之前的工作都使用了基于特征的方法——我们假设当模型直接在下游任务微调并且只使用极小量的随机初始额外参数,该特定任务的模型可以从更大、耗费更多的预训练表示中获益,即使下游任务非常小。
5.3 基于特征的BERT方法
目前所有BERT结果都使用了微调方法,其中在预训练模型后加一个简单的分类层,以及所有参数在下游任务上一起微调。然而基于特征的方法具有一定优势,如从预训练模型中提取固定特征。首先,并不是所有的NLP任务都能通过Transformer编码器架构来简单表述,因此需要添加一个针对任务的模型体系结构。其次,在训练数据上进行一次预先计算高消耗表示,然后在这个表示基础上进行多次低消耗的实验,这是主要的计算优势。 ??在本小节,我们通过将BERT应用到CoNLL-2003 NER任务(Tjong Kim Sang and De Meulder, 2003)来比较两种方法。在BERT的输入中,我们使用保持大小写按字分割的模型,并且包含数据提供的最大文档内容。我们遵循标准实践经验,将其视作一个标注任务,但是不在输出添加CRF层。我们使用第一个sub-token的表示作为NER标定集上token级别分类器的输入。 ??为消除(BERT中的)微调方法,我们采用基于特征的方法,使用来自一个或多个层的激活函数,不对BERT任何参数做微调。在分类层之前,这些上下文embedding用作一个随机初始化两层786维Bi-LSTM的输入。 结果如表7所示。BERTLARGE使用最先进方法表现很有竞争力。效果最好的方法将预训练Transformer的顶部4个隐藏层的token描述关联起来,仅仅以0.3F1落后于微调整个模型(的方法)。这证明BERT对于基于微调和基于特征的方法都是有效的。
6 总结
最近的源于语言模型的迁移学习的实践进展已经证明了,大量、非监督的预训练是许多语言理解系统的(不可或缺的)一部分。特别是,这些结果使得即使是低资源任务也能从深度单向架构中受益。我们的主要贡献是进一步将这些发现推广到深度双向架构,允许相同的预训练模型成功解决一系列广泛的NLP任务。
参考借鉴 https://zhuanlan.zhihu.com/p/54853340
|