经典文献翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

原文获取:https://arxiv.org/pdf/1810.04805.pdf&usg=ALkJrhhzxlCL6yTht2BRmH9atgvKFxHsxQ

目录

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

Task #1: Masked LM

Task #2: Next Sentence Prediction (NSP)

Pre-training data

3.2 Fine-tuning BERT

4 Experiments

4.1 GLUE

4.2 SQuAD v1.1

4.3 SQuAD v2.0

4.4 SW AG

5 Ablation Studies

5.1 Effect of Pre-training Tasks

No NSP

5.2 Effect of Model Size

5.3 Feature-based Approach with BERT

6 Conclusion


正文

Abstract

我们介绍了一种新的语言表示模型BERT,即transformer的双向编码表示。不同于之前的语言表示模型,BERT从未标记文本中通过联合调节所有层中的左右上下文来预训练深层双向表示。因此,只需要一个额外的输出层,就可以对预训练好的模型进行精调(fine-tuned),从而在其他任务上(如问答,语言推理)获得最佳模型,而不需要对特定任务的架构进行大量修改。

BERT在概念上更加简单,而且实验效果更好。在11项NLP任务上取得了最佳表现,包括GLUE分数达到80.5%(绝对精度提升了7.7%);MultiNLI精确率达到86.7%(绝对精度提升了4.6%);SQuAD v1.1问答F1值达到93.2%(绝对精度提高1.5);同时SQuAD v2.0 F1值达到83.1(绝对精度提升了5.1)。

1 Introduction

语言模型预训练对提升很多NLP任务很有效,包括句子级任务:自然语言推理和释义,旨在通过对句子的分析预测句子之间的关系;以及token级任务:命名实体识别、问答,需要在token级上生成细粒度的输出。

有两种策略可以将预训练语言表示应用到下游任务中:基于特征和精调。基于特征的方法,如:ELMO,应用于特定任务框架,将预先训练的表示作为附加特征;精调方法,如:OpenAIGPT,引用最小任务特定参数,并通过简单微调所有参数,将其应用于下游任务。这两种方法运用了共同的目标函数,即使用单向的语言模型去学习一般的语言表示。

我们认为现有技术限制了预训练的能力,特别对于精调的方法。其主要限制是标准的语言模型是单向的,这一点限制了预训练期间可以使用的框架选择。如OpenAIGPT,在transformer的自注意力层上每个词只能读取之前的词(只能从左往右读)。这种限制在句子级别的任务上是次优的,并且将基于精调的方法应用于token级别的任务(QA)是可能非常不好,在问答中,从两个方向合并上下文是至关重要的。

文章用BERT(transformer的双向编码表示)提高了精调。用掩码语言模型(MLM)预训练目标缓解了单向的限制。掩码语言模型从输入中随机地遮掉一部分token,仅基于上下文的单词去预测遮盖单词的原始ID。不同于从左向右的语言模型预训练,MLM能够融合左右上下文,允许预训练一个一个深层双向的Transformer。除了使用掩码语言模型外,还使用了“下句预测”任务来联合预训练文本表示。我们的贡献如下:

我们证明了双向预训练对于语言表征的重要性。不像Radford等人(2018年)使用的单向语言模型进行预训练,BERT使用掩码语言模型实现预训练的深度双向表示。这也与Peters等人(2018a)形成对比,他们使用了一个由独立训练的左至右和右至左LMs的浅层串联。

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

开源了模型和代码。

2 Related Work

2.1 Unsupervised Feature-based Approaches

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

这些方法已被推广到更粗糙的粒度,如句嵌入(Kiros等人,2015;Logeswaran和Lee,2018)或段落嵌入(Le和Mikolov,2014)。为了训练句子表示,之前的工作使用了目标对候选下一句进行排序(Jernite等人,2017;Logeswaran和Lee,2018),根据前一句的表示从左到右生成下一句单词(Kiros等人,2015),或降噪自动编码器衍生目标的噪声(Hill等人,2016)。

ELMo及其前身(Peters et al.,2017,2018a)从不同的维度概括了传统的词嵌入研究。他们从从左到右和从右到左的语言模型中提取上下文相关的特征。每个标记的上下文表示是从左到右和从右到左表示的串联。当将上下文词嵌入与现有任务特定的体系结构相结合时,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

与基于特征的方法一样,第一种方法仅在未标记文本中预训练词嵌入参数的情况下才朝这个方向工作(Collobert和Weston,2008)。

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

2.3 Transfer Learning from Supervised Data

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

3 BERT

本节将介绍BERT及其详细实现。在我们的框架中有两个步骤:预训练和微调。在预训练期间,模型在不同的预训练任务中对未标记的数据进行训练。对于微调,首先使用预训练的参数初始化BERT模型,然后使用来自下游任务的标记数据对所有参数进行微调。每个下游任务都有单独的微调模型,即使它们是用相同的预训练参数初始化的。图1中的问答示例将作为本节的运行示例。

经典文献翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第1张图片

 图1.BERT的预训练和精调。除了输出层不同外,预训练和精调使用了同样的架构。同样的预训练参数用于不同下游任务的模型初始化。在精调中,所有的参数被微调。[cls]是加入在每个输入之前的一个特殊的标记,[sep]是一个特殊的token。

在不同的任务中使用了统一的架构BERT,预训练架构和最终下游架构差别很小。

模型架构 BERT的架构是多层双向的transformer编码器,因为transformer的使用已经变得很普遍,而且我们的实现与最初的几乎相同,所以我们将省略对模型架构的详尽背景描述,并让读者参考Vaswani等人(2017)以及优秀的指南,如“注释transformer”。

这里我们定义:L:transformer块的个数、H:隐藏层大小、A:自注意力头的个数,我们主要分析两个模型大小的结果:

BERTbase:L=12,H=768,A=12,总参数110M

BERTlarge:L=24,H=1024,A=16,总参数340M

为了便于比较,选择BERT base与OpenAI GPT具有相同的模型大小。然而,关键的是,BERT transformer使用双向自我注意力,而GPT transformer使用约束自我注意力,其中每个标记只能关注其左侧的语境。(脚注4:文章中,双向transformer称为transformer encoder,而只有关注到左侧语境的被称为transformer解码器,因为可以用于生成)。

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

我们使用带有30k个token词汇表的WordPiece嵌入(Wu et al.,2016)。每个sequence的第一个token始终是一个特殊的标记[CLS](classification),与该标记相对应的最终隐藏状态用作分类任务的整体序列表示(也就是transformer的输出)。句子对被整合成一个单一的序列,我们用两种方式区分两个句子:首先,我们用一个特殊的标记[SEP]将它们分开;其次,我们向每个token添加一个学习好的嵌入,表示这个token属于A句或B句。如图1所示,我们用E表示输入嵌入,用C\epsilon R^H表示token[cls]的最终隐藏向量,Ti表示第i个输入token的最终隐藏向量。

对于给定的token,其输入表示是通过对相应的token embedding、segment embedding和position embedding求和来构造的。该结构的可视化如图所示。

经典文献翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第2张图片

3.1 Pre-training BERT

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

经典文献翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第3张图片

Task #1: Masked LM

直观地说,有理由相信,深度双向模型比从左到右的模型或从左到右和从右到左的模型的浅层连接更强大。不幸的是,标准的条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用将允许每个单词间接地“看到自己”,并且该模型可以在多层上下文中轻松地预测目标单词。(双向遮盖即可)

为了训练深度双向表示,我们只需随机遮盖某些百分比的输入token,然后预测这些遮盖的token。我们将此过程称为“MLM”(掩码语言模型),尽管在文献中它通常被称为Cloze任务(Taylor,1953)。在这种情况下,与遮盖token相对应的最终隐藏向量被馈送到词汇表上的输出softmax中,如在标准LM中。在我们所有的实验中,我们在每个序列中随机屏蔽所有WordPiece的15%。与去噪自动编码器(Vincent et al.,2008)不同,我们只预测屏蔽掉的词,而不是重建整个输入。

尽管这允许我们获得双向预训练模型,但缺点是我们在预训练和微调之间创建了不匹配,因为在微调期间[MASK]标记不会出现。为了缓解这种情况,我们并不总是用实际的[MASK]标记替换“遮盖”单词。训练数据生成器随机选择15%的token位置进行预测。如果选择第i个令牌,我们将第i个令牌替换为(1)80%时间的用[MASK]遮盖token(2)10%时间的随机替换token(3)10%时间的保持token不变。然后,将使用TIF预测具有交叉熵损失的原始token。我们在附录C中比较了该程序的不同版本。

Task #2: Next Sentence Prediction (NSP)

许多重要的下游任务,如问答(QA)和自然语言推理(NLI)都是基于理解两个句子之间的关系,而语言建模并不能直接捕获这些关系。为了训练一个理解句子关系的模型,我们预先训练了一个可以从任何单语语料库生成的二值化下句预测分类任务。具体来说,当为每个训练前示例选择句子A和B时,50%的时间句子B是句子A的下句(标记为IsNext),50%的时间B是语料库中的随机句子(标记为NotNext)。如图1所示,C用于下一句预测(NSP)。尽管它很简单,我们在第5.1节中进行了演示,该任务的预训练对QA和NLI都非常有益。

NSP任务与Ernite et al.(2017)和Logeswaran and Lee(2018)中使用的代表性学习目标密切相关。然而,在以前的工作中,只有句嵌入被迁移到下游任务,其中BERT迁移所有参数来初始化终端任务模型参数。

Pre-training data

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

3.2 Fine-tuning BERT

Fine-tuning是直接的,因为transformer中的自我注意力机制允许BERT对许多下游任务进行建模——无论它们是涉及单个文本还是通过交换适当的输入和输出来涉及文本对。对于涉及文本对的应用,一种常见模式是在应用双向交叉注意力之前对文本对进行独立编码,如Parikh等人(2016);Seo等人(2017年)。相反,BERT使用自注意力机制来统一这两个阶段,因为用自我注意编码一个串联的文本对有效地包括两个句子之间的双向交叉注意力。(BERT与编-解码器的区别:transoformer是编码器-解码器架构,一般编码器看不到解码器的消息;而BERT是编码器,所以对于句子对而言,self attention能够在两端之间都关注到)

对于每个任务,可以根据下游任务,设计我们任务相关的输入和输出(模型不变,只把输入改变成想要的样子)。在输入端,来自预训练的句子A和句子B类似于(1)释义中的句子对,(2)蕴涵中的假设-前提对,(3)问答中的问题-段落对,(4),在文本分类或序列标记中的文本-∅(相当于单句)。在输出时,token表示被送入token级任务的输出层,如序列标记或问答,[CLS]表示被送入分类的输出层,如entailment或情感分析。

与预训练相比,微调相对便宜。从完全相同的预训练模型开始,本文中的所有结果最多可以在单个云TPU上复制1小时,或在GPU上复制几个小时。我们在第4节的相应小节中描述了任务的具体细节。更多详情见附录A。

4 Experiments

这部分介绍BERT在NLP11项任务上的微调结果。

4.1 GLUE

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

为了在GLUE上进行微调,我们按照第3节所述那样表示输入的句子或句子对,并使用最后一层隐藏向量C\epsilon R^H中的第一个输入token [CLS]作为句子的整体表示。在微调期间唯一引入的新参数是一个分类层参数矩阵W\epsilon R^K^H,其中K是要分类的数量。我们用C和W计算一个标准的分类损失log(softmax(CW^T))

我们在GLUE所有的任务中使用32batch大小和3个epoch的微调。对于每个任务,我们在开发集上使用5e-5、4e-5、3e-5和2e-5的学习率来微调,然后在验证集上选择表现最好的学习率。此外,对于BERTlarge,我们发现在小数据集上微调有时是不稳定的,因此我们运行了几次随机重启,并选择了在验证集上表现最好的模型模型。对于随机重启,我们使用相同的预训练的检查点,但执行不同的微调数据shuffle和分类器层初始化来微调模型。

经典文献翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第4张图片

 表1.GLUE测试结果,由GLUE评估服务器评分。每个任务下面的数字表示训练样本量。最后一列于官方GLUE评分略有不同,因为我们拍出来有问题的WNLI数据集。BERT和OpenAI GPT都是但模型,单任务。

结果如表1所示。Bert base和Bert large在所有任务上都胜过现有系统,与现有系统比较分别提升了4.5%和7%平均精度。注意,除了Bertbase有注意力掩码,Bertbase和OpenAI GPT在模型架构方面几乎是相同的。对于最大和最广泛报道的GLUE任务MNLI,BERT比当前最优模型获得了4.6%的绝对提升。在GLUE官方排行榜上,BERT large以80.5分的成绩,与原来的榜首OpenAI GPT相比截至本文写作时只获得了72.8。

我们发现Bert large在所有任务中都显著优于Bertbase,即使是那些训练数据很少的任务。第5节将更深入地探讨BERT模型大小的影响。

4.2 SQuAD v1.1

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

如图1所示,在问答任务中,我们将输入的问题和段落表示为单个整体序列,其中问题使用A嵌入,段落使用B嵌入。在微调中,唯一需要学习新参数是一个区间起始向量S\epsilon R^H和一个区间结束向量E\epsilon R^H。计算单词i作为答案区间开始的概率,它是Ti和S之间的点积并初一改段落所有单词的结果之后在sofrtmax:

区间答案结束的概率使用类似公式。

我们使用3个epoch,学习率为5e-5,批量大小为32进行了模型训练。

4.3 SQuAD v2.0

4.4 SW AG

5 Ablation Studies

(消融研究,指通过移除某个模型或者算法的某些特征,来观察这些特征对模型效果的影响)

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

经典文献翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第5张图片

5.1 Effect of Pre-training Tasks

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

No NSP

LTR & No NSP: 使用标准的从左到右(LTR)LM(而不是MLM)训练的仅左上下文模型。仅左约束也适用于微调,因为删除它会导致预训练/微调不匹配,从而降低下游性能。此外,该模型在没有NSP任务的情况下进行了预训练。这与OpenAI GPT有直接的可比性,但使用了我们更大的训练数据集、输入表示和微调方案。

我们首先检查NSP任务带来的影响。在表5中,我们发现移除NSP会显著影响QNLI、MNLI和SQuAD v1.1的表现。接下来,我们通过比较“无NSP”和“LTR&无NSP”来评估训练双向表征的影响。LTR模式在所有任务上的表现都比MLM模型差,并且在MRPC和SQuAD的表现大幅下降。

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

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

5.2 Effect of Model Size

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

所选GLUE任务的结果如表6所示。在此表中,我们报告了5次随机重新启动微调的平均开发集精度。我们可以看到,更大的模型导致所有四个数据集的准确度都有了严格的提高,即使对于MRPC,它只有3600个标记的训练示例,并且与训练前任务有很大的不同。与现有文献相比,我们能够在已经相当大的模型之上实现如此显著的改进,这也许也令人惊讶。例如,V aswani等人(2017年)研究的最大transformer为(L=6,H=1024,A=16),编码器参数为100M,我们在文献中发现的最大transformer为(L=64,H=512,A=2),参数为235M(al Rfou等人,2018年)。相比之下,BERTBASE包含110M参数,Bertlarge包含340M参数。

经典文献翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第6张图片

人们早就知道,增加模型大小将导致大规模任务(如机器翻译和语言建模)的持续改进,表6中所示的LM困惑所示。然而,我们相信,这是第一个令人信服地证明,如果模型经过充分的预训练,扩展到极端模型尺寸也会导致非常小规模任务的大幅改进的工作。

Peters等人(2018b)提出了将预训练的bi LM尺寸从两层增加到四层对下游任务影响的混合结果,Melamud等人(2016)顺便提到,将隐藏尺寸从200增加到600有帮助,但进一步增加到1000并没有带来进一步的改善。这两项先前的工作都使用了基于特征的方法-我们假设,当模型直接在下游任务上进行微调,并且只使用非常少的随机初始化的附加参数时,特定于任务的模型可以从更大的,即使在下游任务数据非常小的情况下,也可以使用更具表现力的预训练表示法。

5.3 Feature-based Approach with BERT

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

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

为了消除微调方法,我们采用基于特征的方法,从一个或多个层中提取激活,而无需微调任何BERT参数。这些上下文嵌入用作分类层之前 随机初始化的两层768维BiLSTM的输入。

结果见表7。Bert large采用最先进的方法进行比赛。性能最好的方法将来自预训练的Transformer的前四个隐藏层(仅为0.3)的标记表示连接起来。对整个模型进行微调。这表明BERT对于微调和基于特征的方法都是有效的。

经典文献翻译:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding_第7张图片

6 Conclusion

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

(注:翻译能力有限,难免存在错误,后续将逐步完善与改进,欢迎大家多多交流)

你可能感兴趣的:(经典文献翻译,自然语言处理)