[论文共读][翻译][BERT][Pre-training of Deep Bidirectional Transformers for Language Understanding]

原论文地址:https://arxiv.org/pdf/1810.04805

翻译如下:BERT 用于语言理解的深度双向转换器的预训练

0. 摘要

介绍了一种新的语言表示模型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 问答测试 F1 提高到 93.2(绝对提高 1.5 分),SQuAD v2.0 测试 F1 提高到 83.1(绝对提高 5.1 分)。

1. 引言

语言模型预训练已被证明可以有效改善许多自然语言处理任务(Dai and Le,2015;Peters等人,2018a;Radford 等人,2018 年;Howard 和 Ruder,2018 年)。这些包括句子级别的任务,如自然语言推理(Bowman et al., 2015;Williams et al., 2018) 和释义 (Dolan and Brockett, 2005),旨在通过整体分析句子来预测句子之间的关系,以及标记级任务,例如命名实体识别和问答,其中模型需要在标记级产生细粒度的输出(Tjong Kim Sang 和 De Meulder,2003 年;Rajpurkar 等人,2016 年)

将预训练的语言表示应用于下游任务有两种现有的策略:基于特征的策略和微调。基于特征的方法,如ELMo(Peters等人,2018a),使用特定于任务的架构,其中包括预训练的表示作为附加特征。微调方法,例如生成式预训练转换器 (OpenAI GPT) (Radford et al., 2018),引入了最少的任务特定参数,并通过简单地微调所有预训练参数在下游任务上进行训练。这两种方法在预训练期间共享相同的目标函数,它们使用单向语言模型来学习一般语言表示。

我们认为,当前的技术限制了预训练表示的能力,特别是对于微调方法。主要限制是标准语言模型是单向的,这限制了在预训练期间可以使用的架构的选择。例如,在 OpenAI GPT 中,作者使用从左到右的架构,其中每个令牌只能参与 Transformer 的自注意力层中的先前令牌(Vaswani et al., 2017)。对于句子级别的任务来说,这种限制是次优的,并且在将基于微调的方法应用于令牌级任务(如问答)时可能非常有害,因为在任务中,从两个方向合并上下文至关重要。

在本文中,我们通过提出BERT:来自Transformers的双向编码器表示来改进基于微调的方法。BERT通过使用“掩码语言模型”(MLM)预训练目标来缓解前面提到的单向性约束,该目标的灵感来自Cloze任务(Taylor,1953)。被掩码的语言模型会随机屏蔽输入中的一些标记,其目的是预测被掩码的原始词汇 ID 单词仅基于其上下文。与从左到右的语言模型预训练不同,MLM 目标使表示能够融合左右上下文,这使我们能够预训练深度双向 Transformer。除了掩码语言模型外,我们还使用“下一句预测”任务,该任务共同预训练文本对表示。本文的贡献如下:

  • 我们证明了双向预训练对语言表示的重要性。与Radford等人(2018)使用单向语言模型进行预训练不同,BERT使用掩码语言模型来实现预训练的深度双向表示。这也与Peters等人(2018a)形成鲜明对比,后者使用独立训练的从左到右和从右到左LM的浅层串联。
  • 我们发现,预训练的表示减少了对许多经过大量设计的特定于任务的架构的需求。BERT 是第一个基于微调的表示模型,它在大量句子级和令牌级任务上实现了最先进的性能,性能优于许多特定于任务的架构。
  • BERT 推动了 11 项 NLP 任务的最新技术。代码和预训练模型可在 https://github.com/ google-research/bert 上获取

2 相关工作

预训练通用语言表示由来已久,我们在本节中简要回顾了最广泛使用的方法

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

这些方法已被推广到更粗的粒度,例如句子嵌入(Kiros et al., 2015;Logeswaran 和 Lee,2018 年)或段落嵌入(Le 和 Mikolov,2014 年)。为了训练句子表示,以前的工作已经使用目标对候选的下一个句子进行排名(Jernite et al., 2017;Logeswaran and Lee, 2018),根据前一句的表示,从左到右生成下一个句子词(Kiros et al., 2015),或去噪化自动编码器衍生的目标(Hill et al., 2016)。

ELMo及其前身(Peters et al., 2017, 2018a)将传统的词嵌入研究沿不同维度进行了推广。它们从从左到右和从右到左的语言模型中提取上下文相关特征。每个令牌的上下文表示是从左到右和从右到左表示的串联。当将上下文词嵌入与现有的特定任务架构集成时,ELMo 推进了几个主要 NLP 基准测试(Peters et al., 2018a) 的最新技术,包括问答 (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 无监督微调方法
与基于特征的方法一样,第一种方法在这个方向上只对未标记文本中的预训练词嵌入参数起作用(Collobert and Weston,2008)。

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

2.3 从监督数据中迁移学习
还有一些研究表明,从具有大型数据集的监督任务中可以有效地转移,例如自然语言推理(Conneau et al., 2017)和机器翻译(McCann et al., 2017)。计算机视觉研究还证明了从大型预训练模型中迁移学习的重要性,其中有效的方法是微调使用 ImageNet 预训练的模型(邓等人,2009 年;Yosinski 等人,2014 年

3. BERT

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

BERT 的一个显着特征是其跨不同任务的统一架构。预训练架构和最终下游架构之间的最小差异。

模型架构 BERT 的模型架构是基于 Vaswani et al. (2017) 中描述并在 tensor2tensor 库中发布的原始实现的多层双向 Transformer 编码器.1 由于 Transformer 的使用已经变得普遍,并且我们的实现几乎与原始相同,我们将省略对模型架构的详尽背景描述,并参考读者参考 Vaswani et al. (2017) 以及优秀的指南,例如作为“带注释的转换器”。

在这项工作中,我们将层数(即 Transformer 块)表示为 L,将隐藏尺寸表示为 H,将自注意力头数表示为 A。 3 我们主要报告两种模型大小的结果:BERTBASE(L=12,H=768,A=12,总参数=110M)和 BERTLARGE(L=24,H=1024,A=16,总参数=340M)。

为了进行比较,选择 BERTBASE 具有与 OpenAI GPT 相同的模型大小。然而,至关重要的是,BERT Transformer 使用双向自注意,而 GPT Transformer 使用受约束的自注意,其中每个令牌只能关注其左侧的上下文。

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

我们使用 WordPiece 嵌入(Wu et al., 2016)和 30,000 个标记词汇表。每个序列的第一个标记始终是特殊分类标记 ([CLS]) 。与此令牌对应的最终隐藏状态用作分类任务的聚合序列表示。句子对被打包成一个序列。我们以两种方式区分句子。首先,我们用一个特殊令牌 ([SEP]) 将它们分开。其次,我们为每个标记添加一个学习嵌入,指示它是属于句子 A 还是句子 B。如图 1 所示,我们将输入嵌入表示为 E,特殊 [CLS] 标记的最终隐藏向量表示为 C ∈ R H,第 i 个输入标记的最终隐藏向量表示为 Ti ∈ R H。

对于给定的令牌,其输入表示是通过对相应的令牌、段和位置嵌入求和来构造的。图 2 显示了这种结构的可视化效果。
在这里插入图片描述

3.1 预训练 BERT
与 Peters et al. (2018a)和 Radford et al. (2018)不同,我们不使用传统的从左到右或从右到左的语言模型来预训练BERT。取而代之的是,我们使用两个无监督任务来预训练 BERT,如本节所述。此步骤显示在图 1 的左侧部分。

任务 #1:Masked LM 直观地说,有理由相信深度双向模型严格来说比从左到右的模型或从左到右和从右到左的模型的浅层串联更强大。不幸的是,标准的条件语言模型只能从左到右或从右到左进行训练,因为双向条件反射将允许每个单词间接地“看到自己”,并且模型可以在多层上下文中轻松预测目标单词.

为了训练深度双向表示,我们只需随机屏蔽一定比例的输入标记,然后预测那些被屏蔽的标记。我们将此过程称为“masked LM”(MLM),尽管它在文献中通常被称为完形填空任务(Taylor,1953)。在这种情况下,与掩码标记对应的最终隐藏向量被输入到词汇表上的输出 softmax,就像在标准 LM 中一样。在我们所有的实验中,我们随机屏蔽了每个序列中所有 WordPiece 标记的 15%。与去噪的自动编码器(Vincent et al., 2008)相比,我们只预测被屏蔽的词,而不是重建整个输入。

虽然这使我们能够获得双向预训练模型,但缺点是我们在预训练和微调之间造成了不匹配,因为在微调过程中不会出现 [MASK] 标记。为了缓解这种情况,我们并不总是用实际的 [MASK] 标记替换“masked”单词。训练数据生成器随机选择 15% 的代币位置进行预测。如果选择了第 i 个令牌,我们将第 i 个令牌替换为 (1) 80% 的 [MASK] 令牌 (2) 10% 的时间为随机令牌 (3) 10% 的时间替换不变的第 i 个令牌。然后,Ti 将用于预测具有交叉熵损失的原始代币。我们在附录 C.2 中比较了此过程的变体。

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

NSP任务与Jernite等人(2017)和Logeswaran和Lee(2018)中使用的表征学习目标密切相关。然而,在之前的工作中,只有句子嵌入被转移到下游任务,其中 BERT 传输所有参数以初始化结束任务模型参数.

预训练数据 预训练过程在很大程度上遵循现有的关于语言模型预训练的文献。对于预训练语料库,我们使用BooksCorpus(800M字)(Zhu et al.,2015)和英语维基百科(2,500M字)。对于维基百科,我们只提取文本段落,忽略列表、表格和标题。为了提取长连续的序列,使用文档级语料库而不是像十亿字基准(Chelba et al., 2013)这样的打乱句子级语料库是至关重要的。

3.2 微调 BERT
微调很简单,因为 Transformer 中的自注意力机制允许 BERT 通过交换适当的输入和输出来建模许多下游任务——无论它们涉及单个文本还是文本对。对于涉及文本对的应用,一种常见的模式是在应用双向交叉关注之前独立编码文本对,例如Parikh et al. (2016);Seo等人(2017)。相反,BERT使用自注意力机制来统一这两个阶段,因为用自注意力编码串联的文本对有效地包括了两个句子之间的双向交叉注意力。

对于每个任务,我们只需将特定于任务的输入和输出插入 BERT,并端到端地微调所有参数。在输入时,来自预训练的句子 A 和句子 B 类似于 (1) 释义中的句子对,(2) 蕴涵中的假设-前提对,(3) 问答中的问句-段落对,以及(4)文本分类或序列标记中的退化文本-∅对。在输出端,令牌表示被馈送到输出层以执行令牌级任务,例如序列标记或问答,而 [CLS] 表示被馈送到输出层进行分类,例如蕴涵或情感分析。

与预训练相比,微调相对便宜。从完全相同的预训练模型开始,本文中的所有结果都可以在单个 Cloud TPU 上最多复制 1 小时,或者在 GPU 上复制几个小时。7 我们将在第 4 节的相应小节中描述特定于任务的详细信息。详情请参阅附录A.5。

4. 实验

在本节中,我们展示了 11 个 NLP 任务的 BERT 微调结果。

4.1 GLUE
通用语言理解评估 (GLUE) 基准(Wang et al., 2018a)是多种自然语言理解任务的集合。GLUE 数据集的详细说明包含在附录 B.1 中

为了在 GLUE 上进行微调,我们表示第 3 节中所述的输入序列(对于单个句子或句子对),并使用对应于第一个输入标记 ([CLS]) 的最终隐藏向量 C ∈ R H 作为聚合表示。在微调过程中引入的唯一新参数是分类层权重 W ∈ R K×H,其中 K 是标签的数量。我们用 C 和 W 计算标准分类损失,即 log(softmax(CWT ))

我们使用 32 的批处理大小,并对所有 GLUE 任务的数据进行 3 个周期的微调。对于每个任务,我们都选择了 Dev 集上的最佳微调学习率(在 5e-5、4e-5、3e-5 和 2e-5 之间)。此外,对于 BERTLARGE,我们发现在小型数据集上微调有时不稳定,因此我们运行了几次随机重启,并在 Dev 集上选择了最佳模型。对于随机重启,我们使用相同的预训练检查点,但执行不同的微调数据洗牌和分类器层初始化。
GLUE 测试结果
结果如表1所示。BERTBASE 和 BERTLARGE 在所有任务上都比所有系统都高出很大,与之前的技术水平相比,平均精度分别提高了 4.5% 和 7.0%。请注意,BERTBASE 和 OpenAI GPT 在模型架构方面几乎相同,除了注意力屏蔽。对于规模最大、报道最广泛的 GLUE 任务 MNLI,BERT 的绝对精度提高了 4.6%。在官方 GLUE 排行榜10 上,BERTLARGE 的得分为 80.5,而 OpenAI GPT 截至撰写本文之日为 72.8 分。

我们发现 BERTLARGE 在所有任务上都明显优于 BERTBASE,尤其是那些训练数据很少的任务。第 5.2 节更深入地探讨了模型大小的影响。

4.2 SQuAD
v1.1 斯坦福问答数据集 (SQuAD v1.1) 是 100k 个众包问答对的集合(Rajpurkar 等人,2016 年)。给定一个问题和一段话包含答案的维基百科,其任务是预测段落中的答案文本跨度。

如图 1 所示,在问答任务中,我们将输入问题和段落表示为单个打包序列,问题使用 A 嵌入,段落使用 B 嵌入。在微调过程中,我们只引入起始向量 S ∈ R H 和结束向量 E ∈ R H。单词 i 作为答案跨度开始的概率计算为 Ti 和 S 之间的点积,然后是段落中所有单词的 softmax:Pi = e S·Ti P j e S·Tj .类似的公式用于答案跨度的结束。候选人从位置 i 到位置 j 的分数定义为 S·Ti + E·Tj 和 j ≥ i 的最大评分跨度用作预测。训练目标是正确开始和结束位置的对数似然之和。我们以 5e-5 的学习率为 5e-5,批量大小为 32 个 epoch 进行微调。

表 2 显示了排名靠前的排行榜条目以及排名靠前的发布系统的结果(Seo et al., 2017;克拉克和加德纳,2018 年;Peters等人,2018a;胡等人,2018)。SQuAD排行榜的排名靠前的结果没有最新的公共系统描述11,并且在训练其系统时可以使用任何公共数据。因此,我们通过首先对TriviaQA(Joshi等人,2017)进行微调,在我们的系统中使用了适度的数据增强,以便在SQuAD上进行微调。

我们表现最好的系统在集成方面比顶级排行榜系统高出 +1.5 F1,作为单一系统则比 +1.3 F1 高出。事实上,我们的单一 BERT 模型在 F1 分数方面优于顶级集成系统。没有 调整数据,我们只损失了 0.1-0.4 F1,性能仍然远远超过所有现有系统。
在这里插入图片描述
在这里插入图片描述
4.3 SQuAD v2.0版本
SQuAD 2.0 任务扩展了 SQuAD 1.1 问题定义,允许在提供的段落中不存在任何简短答案,从而使问题更加真实。

我们使用一种简单的方法来扩展 SQuAD v1.1 BERT 模型以完成此任务。我们将没有答案的问题视为具有 [CLS] 标记的开始和结束的答案跨度。开始和结束答案跨度位置的概率空间已扩展为包括 [CLS] 标记的位置。为了预测,我们比较了无答案跨度的分数:snull = S·C+E·C 表示最佳非零量程的分数sˆi,j = 最大j≥iS·Ti + E·Tj .当 sˆi,j > snull + τ 时,我们预测一个非空答案,其中在 dev 集上选择阈值 τ 以最大化 F1。我们没有将TriviaQA数据用于此模型。我们以 5e-5 的学习率为 5e-5 和 48 的批量大小对 2 个 epoch 进行了微调。

结果与之前的排行榜条目和已发表的顶级作品进行比较(Sun et al., 2018;Wang等人,2018b)如表3所示,不包括使用BERT作为其组件之一的系统。我们观察到 +5.1 F1 比之前的最佳系统有所改进。

4.4 SWAG
Situation With Adversarial Generations (SWAG) 数据集包含 113k 个句子对完成示例,用于评估扎根常识推理(Zellers et al., 2018)。给定一个句子,任务是在四个选项中选择最合理的延续。

在对 SWAG 数据集进行微调时,我们构建了四个输入序列,每个序列都包含给定句子(句子 A)和可能的延续(句子 B)的串联。唯一引入的特定于任务的参数是一个向量,其点积与 [CLS] 标记表示 C 表示每个选择的分数,该分数使用 softmax 层进行归一化。

我们以 2e-5 的学习率为 2e-5,批量大小为 16 对 3 个时期的模型进行微调。结果如表4所示。BERTLARGE的表现比作者的基准ESIM+ELMo系统高出+27.1%,比OpenAI GPT高出8.3%。
在这里插入图片描述

5 消融研究

在本节中,我们将对BERT的多个方面进行烧蚀实验,以更好地了解它们的相对重要性。附加的消融研究可在附录 C 中找到。

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

无 NSP:使用“屏蔽 LM”(MLM) 训练的双向模型,但没有“下一句预测”(NSP) 任务。

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

我们首先研究了NSP任务带来的影响。在表 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 模型无法根据问题确定答案;(c) 这与深度双向模型严格来说弱于深层双向模型,因为它可以在每一层同时使用左上下文和右上下文。

5.2 模型大小的影响
在本节中,我们将探讨模型大小对微调任务准确性的影响。我们训练了许多具有不同数量的层数、隐藏单元和注意力头的 BERT 模型,同时使用如前所述的相同超参数和训练过程。

选定的 GLUE 任务的结果如表 6 所示。在此表中,我们报告了 5 次随机重启微调的平均开发集准确率。我们可以看到,更大的模型会导致所有四个数据集的准确性提高,即使对于只有 3,600 个标记训练样本的 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)。相比之下,BERTBASE 包含 110M 参数,BERTLARGE 包含 340M 参数。

人们早就知道,增加模型大小将导致大规模任务(如机器翻译和语言建模)的持续改进,表 6 中所示的保留训练数据的 LM 困惑性证明了这一点。然而,我们相信这是第一项令人信服地证明,只要模型已经进行了充分的预训练,那么扩展到极端模型大小也会导致在非常小规模的任务上有很大的改进。Peters et al. (2018b) 对将预训练的 bi-LM 大小从两层增加到四层对下游任务的影响提出了不同的结果,Melamud et al. (2016) 顺便提到,将隐藏维度大小从 200 增加到 600 有帮助,但进一步增加到 1,000 并没有带来进一步的改进。这两项先前的工作都使用了基于特征的方法——我们假设,当模型直接在下游任务上进行微调并且只使用极少数随机初始化的附加参数时,即使下游任务数据非常小,特定任务的模型也可以从更大、更具表现力的预训练表示中受益。

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

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

Table 6
在这里插入图片描述
为了消除微调方法,我们应用了基于特征的方法,从一个或多个层中提取激活,而不微调BERT的任何参数。这些上下文嵌入被用作分类层之前随机初始化的两层 768 维 BiLSTM 的输入。

结果如表7所示。BERTLARGE以最先进的方法表现出色。性能最好的方法将预训练 Transformer 的前四个隐藏层的令牌表示连接起来,仅落后微调整个模型的 0.3 F1。这表明BERT对于微调和基于特征的方法都是有效的。

6. 结论

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


附录没有翻译,可以参考原文。主要摘要一下 BERT 与其他模型的比较
BERT、ELMo 和 OpenAI GPT 的比较
这里我们研究了最近流行的表示学习模型的差异,包括 ELMo、OpenAI GPT 和 BERT。模型架构之间的比较如图 3 所示。请注意,除了架构差异之外,BERT 和 OpenAI GPT 是微调方法,而 ELMo 是一种基于特性的方法。

与 BERT 最具可比性的现有预训练方法是 OpenAI GPT,它在大型文本语料库上训练从左到右的 Transformer LM。事实上,BERT 中的许多设计决策都是有意做出的,以使其尽可能接近 GPT,以便可以对这两种方法进行最小的比较。这项工作的核心论点是,第 3.1 节中提出的双向性和两个预训练任务占了经验改进的大部分,但我们确实注意到 BERT 和 GPT 的训练方式之间存在其他一些差异:

  • GPT 在 BooksCorpus 上进行训练(800M 字); BERT接受过BooksCorpus(800M字)和Wikipedia(2,500M字)的培训。
  • GPT 使用句子分隔符 ([SEP]) 和分类器标记 ([CLS]),它们仅在微调时引入;BERT 在预训练期间学习 [SEP]、[CLS] 和句子 A/B 嵌入。
  • GPT 训练了 1M 步,批量大小为 32,000 字;BERT 进行了 1M 步的训练,批量大小为 128,000 个单词。
  • GPT 对所有微调实验使用相同的 5e-5 学习率;BERT 选择特定于任务的微调学习率,该学习率在开发集上表现最佳。
  • 为了隔离这些差异的影响,我们在第 5.1 节中进行了消融实验,该实验表明,大部分改进实际上来自两个预训练任务以及它们实现的双向性。
    在这里插入图片描述
    预训练模型架构的差异。BERT使用双向 Transformer。OpenAI GPT 使用从左到右的 Transformer。ELMo 使用独立训练的从左到右和从右到左的 LSTM 的串联来为下游任务生成特征。在这三者中,只有BERT表示在所有层中都共同受制于左上下文和右上下文。除了架构差异之外,BERT 和 OpenAI GPT 是微调方法,而 ELMo 是一种基于特性的方法。
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Sentence-transformers是一种基于深度学习的工具,用于将自然语言句子转换为向量表示。以下是该工具的帮助文档: 1. 安装 要安装Sentence-transformers,请使用以下命令: pip install sentence-transformers 2. 使用 使用Sentence-transformers很简单。只需导入相应的模型和tokenizer,并将文本传递给模型即可。以下是一个示例: from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('bert-base-nli-mean-tokens') sentences = ['This is an example sentence', 'Each sentence is converted to a vector'] sentence_embeddings = model.encode(sentences) 3. 模型 Sentence-transformers包括许多不同的模型,包括基于BERT、RoBERTa和DistilBERT的模型。您可以使用以下命令查看所有可用的模型: from sentence_transformers import SentenceTransformer models = SentenceTransformer.models print(models) 4. 相似度计算 Sentence-transformers还包括一些实用程序函数,可用于计算句子之间的相似度。以下是一个示例: from sentence_transformers import SentenceTransformer, util model = SentenceTransformer('bert-base-nli-mean-tokens') sentences = ['This is an example sentence', 'Each sentence is converted to a vector', 'Sentence embeddings are useful for many NLP tasks'] sentence_embeddings = model.encode(sentences) # 计算第一句话和第二句话之间的余弦相似度 cosine_scores = util.pytorch_cos_sim(sentence_embeddings[0], sentence_embeddings[1]) print(cosine_scores) 5. 参考文献 如果您想了解有关Sentence-transformers的更多信息,请参阅以下文献: - Reimers, N., & Gurevych, I. (2019). Sentence-BERT: Sentence embeddings using siamese BERT-networks. arXiv preprint arXiv:1908.10084. - Devlin, J., Chang, M. W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. arXiv preprint arXiv:1810.04805.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值