BERT-论文翻译 - Go语言中文社区

BERT-论文翻译


转自:https://github.com/yuanxiaosc/BERT_Paper_Chinese_Translation
对于原文的部分地方进行了删改,并增加了标记;图片无法直接链接到原文的地址上,所以我重新在原论文里截了图。
转发的原因是,github对Markdown的支持似乎没有CSDN的好,尤其是Latex那部分。
最后,感谢大神yuanxiaosc的卓越贡献。

BERT:预训练的深度双向 Transformer 语言模型

Jacob Devlin;Ming-Wei Chang;Kenton Lee;Kristina Toutanova
Google AI Language
{jacobdevlin,mingweichang,kentonl,kristout}@google.com

摘要

我们提出了一种新的称为 BERT 的语言表示模型,BERT 代表来自 Transformer 的双向编码器表示Bidirectional Encoder Representations from Transformers)。不同于最近的语言表示模型(Peters et al., 2018Radford et al., 2018), BERT 旨在通过联合调节所有层中的左右上下文来预训练深度双向表示。因此,只需要一个额外的输出层,就可以对预训练的 BERT 表示进行微调,从而为广泛的任务(比如回答问题和语言推断任务)创建最先进的模型,而无需对特定于任务进行大量模型结构的修改。

BERT 的概念很简单,但实验效果很强大。它刷新了 11 个 NLP 任务的当前最优结果,包括将 GLUE 基准提升至 80.4%(7.6% 的绝对改进)、将 MultiNLI 的准确率提高到 86.7%(5.6% 的绝对改进),以及将 SQuAD v1.1 的问答测试 F1 得分提高至 93.2 分(提高 1.5 分)——比人类表现还高出 2 分。

1. 介绍

语言模型预训练可以显著提高许多自然语言处理任务的效果(Dai and Le, 2015Peters et al., 2018Radford et al., 2018Howard and Ruder, 2018)。这些任务包括句子级任务,如自然语言推理(Bow-man et al., 2015Williams et al., 2018)和释义(Dolan and Brockett, 2005),目的是通过对句子的整体分析来预测句子之间的关系,以及标记级任务,如命名实体识别(Tjong Kim Sang and De Meulder, 2003)和 SQuAD 问答(Rajpurkar et al., 2016),模型需要在标记级生成细粒度的输出。

现有的两种方法可以将预训练好的语言模型表示应用到下游任务中:基于特征的和微调基于特征的方法,如 ELMoPeters et al., 2018),使用特定于任务的模型结构,其中包含预训练的表示作为附加特特征。微调方法,如 生成预训练 Transformer (OpenAI GPT)Radford et al., 2018)模型,然后引入最小的特定于任务的参数,并通过简单地微调预训练模型的参数对下游任务进行训练。在之前的工作中,两种方法在预训练任务中都具有相同的目标函数,即使用单向的语言模型来学习通用的语言表达

我们认为,当前的技术严重地限制了预训练表示的效果,特别是对于微调方法。主要的局限性是标准语言模型是单向的,这就限制了可以在预训练期间可以使用的模型结构的选择。例如,在 OpenAI GPT 中,作者使用了从左到右的模型结构,其中每个标记只能关注 Transformer 的自注意层中该标记前面的标记(Williams et al., 2018)。这些限制对于句子级别的任务来说是次优的(还可以接受),但当把基于微调的方法用来处理标记级别的任务(如 SQuAD 问答)时可能会造成不良的影响(Rajpurkar et al., 2016),因为在 标记级别的任务下,从两个方向分析上下文是至关重要的

在本文中,我们通过提出 BERT 改进了基于微调的方法:来自 Transformer 的双向编码器表示。受完形填空任务的启发,BERT 通过提出一个新的预训练任务来 解决前面提到的单向约束“遮蔽语言模型”(MLM masked language model)(Tay-lor, 1953)。遮蔽语言模型从输入中随机遮蔽一些标记,目的是仅根据被遮蔽标记的上下文来预测它对应的原始词汇的 id。与从左到右的语言模型预训练不同,MLM 目标允许表示融合左右上下文,这允许我们预训练一个深层双向 Transformer。除了遮蔽语言模型之外,我们还提出了一个联合预训练文本对来进行“下一个句子预测”的任务。

本文的贡献如下:

  • 我们论证了双向预训练对语言表征的重要性。与 Radford et al., 2018 使用单向语言模型进行预训练不同,BERT 使用遮蔽语言模型来实现预训练深层双向表示。这也与 Peters et al., 2018 的研究形成了对比,他们使用了一个由左到右和由右到左的独立训练语言模型的浅层连接。
  • 我们表明,预训练的表示消除了许多特定于任务的高度工程化的的模型结构的需求。BERT 是第一个基于微调的表示模型,它在大量的句子级和标记级任务上实现了最先进的性能,优于许多特定于任务的结构的模型。
  • BERT 为 11 个 NLP 任务提供了最先进的技术。我们还进行大量的消融研究,证明了我们模型的双向本质是最重要的新贡献。代码和预训练模型将可在 goo.gl/language/bert 获取。

2 相关工作

预训练通用语言表示有很长的历史,我们将在本节简要回顾最流行的方法。

2.1 基于特征的方法

几十年来,学习广泛适用的词语表示一直是一个活跃的研究领域,包括非神经网络学领域(Brown et al., 1992;;Blitzer et al., 2006)和神经网络领域(Collobert and Weston, 2008Mikolov et al., 2013Pennington et al., 2014)方法。经过预训练的词嵌入被认为是现代 NLP 系统的一个不可分割的部分,词嵌入提供了比从头开始学习的显著改进(Turian et al., 2010)。

这些方法已被推广到更粗的粒度,如 句子嵌入Kiros et al., 2015Logeswaran and Lee, 2018)或 段落嵌入Le and Mikolov, 2014)。与传统的单词嵌入一样,这些学习到的表示 通常也用作下游模型的输入特征

ELMoPeters et al., 2017)从不同的维度对传统的词嵌入研究进行了概括。他们建议从语言模型中提取上下文敏感的特征。在将上下文嵌入与特定于任务的架构集成时,ELMo 为几个主要的 NLP 标准提供了最先进的技术(Peters et al., 2018),包括在 SQuAD 上的问答(Rajpurkar et al., 2016),情感分析(Socher et al., 2013),和命名实体识别(jong Kim Sang and De Meul-der, 2003)。

2.2 基于微调的方法

语言模型迁移学习(LMs)的一个最新趋势是,在对受监督的下游任务的模型进行微调之前,先对 LM 目标上的一些模型构造进行预训练Dai and Le, 2015Howard and Ruder, 2018Radford et al., 2018)。这些方法的优点是只有很少的参数需要从头开始学习。至少部分得益于这一优势,OpenAI GPT (Radford et al., 2018)在 GLUE 基准测试的许多句子级任务上取得了此前最先进的结果(Wang et al.(2018))。

2.3 从有监督的数据中迁移学习

虽然无监督预训练的优点是可用的数据量几乎是无限的,但也有研究表明,从具有大数据集的监督任务中可以进行有效的迁移,如 自然语言推理Con-neau et al., 2017)和 机器翻译McCann et al., 2017)。在NLP之外,计算机视觉研究也证明了从大型预训练模型中进行迁移学习的重要性,有一个有效的方法可以在 ImageNet 上微调预训练的模型(Deng et al., 2009Yosinski et al., 2014

3 BERT

本节将介绍 BERT 及其具体实现。首先介绍了 BERT 模型结构和输入表示。然后我们在 3.3 节介绍本文的核心创新——预训练任务。在 3.4 和 3.5 节中分别详细介绍了预训练过程和微调模型过程。最后,在 3.6 节中讨论了 BERT 和 OpenAI GPT 之间的区别。

3.1 模型结构

BERT 的模型结构是一个原始实现的基于 Vaswani et al.(2017) 所描述的多层双向 Transformer 编码器,并且 Transformer 编码器发布在 tensor2tensor 代码库中。由于最近 Transformer 的使用已经非常普遍,而且我们的实现与最初的实现实际上是相同的,所以我们将省略对模型结构的详尽的背景描述,并向读者推荐 Vaswani et al.(2017) 以及相关的优秀指南,如“带注释的 Transformer”。

在这项工作中,我们将层的数量(即,Transformer 块)表示为 LL,隐藏尺寸为 HH,自注意头的个数为 AA。在所有例子中,我们将前馈/过滤器的大小设置为 4H4H,即当 H=768H = 768

  • BERTBASE:L=12,H=768,A=12,TotalParameters=110MBERT_{BASE}: L=12, H=768, A=12, Total Parameters=110M
  • BERTLARGE:L=24,H=1024,A=16,TotalParameters=340MBERT_{LARGE}: L=24, H=1024, A=16, Total Parameters=340M

为了方便比较,BERTBASEBERT_{BASE}

图 1:预训练模型结构的不同。BERT 使用双向 Transformer。OpenAI GPT 使用 从左到右的 Transformer。ELMo 使用独立训练的从左到右和从右到左的 LSTM 的连接来为下游任务生成特征。其中,只有 BERT 表示在所有层中同时受到左右语境的制约。

3.2 输入表示

我们的输入表示能够在一个标记序列中清楚地表示单个文本句子或一对文本句子(例如,[Question, Answer])。(注释:在整个工作中,“句子”可以是连续的任意跨度的文本,而不是实际语言意义上的句子。“序列”是指输入到 BERT 的标记序列,它可以是单个句子,也可以是两个句子组合在一起。)通过把给定标记对应的标记嵌入、句子嵌入和位置嵌入求和来构造其输入表示。图 2 给出了输入表示的可视化表示。
细节是:

  • 我们使用含 3 万个标记词语的 WordPiece 嵌入(Wu et al., 2016)。我们用 ## 表示拆分的单词片段
  • 我们使用学习到的位置嵌入,支持的序列长度最长可达 512 个标记。
  • 每个序列的第一个标记始终是特殊分类嵌入([CLS])。该特殊标记对应的最终隐藏状态(即,Transformer 的输出)被用作分类任务中该序列的总表示。对于非分类任务,这个最终隐藏状态将被忽略。
  • 句子对被打包在一起形成一个单独的序列。我们用两种方法区分这些句子。方法一,我们用一个特殊标记([SEP])将它们分开。方法二,我们给第一个句子的每个标记添加一个可训练的句子 A 嵌入,给第二个句子的每个标记添加一个可训练的句子 B 嵌入
  • 对于单句输入,我们只使用句子 A 嵌入
    在这里插入图片描述

图 2:BERT 的输入表示。输入嵌入是标记嵌入(词嵌入)、句子嵌入和位置嵌入的总和。

3.3.1 任务一#:遮蔽语言模型

直觉上,我们有理由相信,深度双向模型严格来说比从左到右模型或从左到右模型结合从右到左模型的浅层连接更强大。不幸的是,标准条件语言模型只能从左到右或从右到左进行训练,因为双向条件作用将允许每个单词在多层上下文中间接地“看到自己”。

为了训练深度双向表示,我们采用了一种简单的方法,即随机遮蔽一定比例的输入标记,然后仅预测那些被遮蔽的标记。我们将这个过程称为“遮蔽语言模型”(MLM),尽管在文献中它通常被称为完形填词任务(Taylor, 1953)。在这种情况下,就像在标准语言模型中一样,与遮蔽标记相对应的最终隐藏向量被输入到与词汇表对应的输出 softmax 中(也就是要把被遮蔽的标记对应为词汇表中的一个词语)。在我们所有的实验中,我们在每个序列中随机遮蔽 15% 的标记。与去噪的自动编码器(Vincent et al., 2008)不同的是,我们只是让模型预测被遮蔽的标记,而不是要求模型重建整个输入。

虽然这确实允许我们获得一个双向预训练模型,但这种方法有两个缺点第一个缺点是,我们在预训练和微调之间造成了不匹配,因为 [MASK] 标记在微调期间从未出现过。为了缓和这种情况,我们并不总是用真的用 [MASK] 标记替换被选择的单词。而是,训练数据生成器随机选择 15% 的标记,例如,在my dog is hairy 这句话中,它选择 hairy。然后执行以下步骤:

  • 数据生成不会总是用 [MASK] 替换被选择的单词,而是执行以下操作:
  • 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% 的标记(即,15% 的 10%)这似乎不会损害模型的语言理解能力。

第二个缺点是,使用 Transformer 的每批次数据中只有 15% 的标记被预测,这意味着模型可能需要更多的预训练步骤来收敛。在 5.3 节中,我们证明了 Transformer 确实比从左到右的模型(预测每个标记)稍微慢一点,但是 Transformer 模型的实验效果远远超过了它增加的预训练模型的成本。

3.3.2 任务2#:下一句预测

许多重要的下游任务,如问题回答(QA)和自然语言推理(NLI),都是建立在理解两个文本句子之间的关系的基础上的,而这并不是语言建模直接捕捉到的。为了训练一个理解句子关系的模型,我们预训练了一个下一句预测的二元分类任务,这个任务可以从任何单语语料库中简单地归纳出来。具体来说,在为每个训练前的例子选择句子 A 和 B 时,50% 的情况下 B 是真的在 A 后面的下一个句子,50% 的情况下是来自语料库的随机句子。比如说:
在这里插入图片描述

我们完全随机选择不是下一句的句子,最终的预训练模型在这个任务中达到了 97%-98% 的准确率。尽管这个任务很简单,但是我们在 5.1 节中展示了针对此任务的预训练对 QA 和 NLI 都非常有益。

3.4 预训练过程

预训练过程大体上遵循以往文献中语言模型预训练过程。对于预训练语料库,我们使用 BooksCorpus(800M 单词)(Zhu et al., 2015)和英语维基百科(2,500M 单词)。对于维基百科,我们只提取文本段落,而忽略列表、表格和标题。为了提取长的连续序列,使用文档级别的语料库是至关重要的,而不是使用像 Billion Word Benchmark (Chelba et al., 2013)那样的打乱顺序的句子级别语料库。

为了生成每个训练输入序列,我们从语料库中采样两段文本,我们将其称为“句子”,尽管它们通常比单个句子长得多(但也可以短一些)。第一个句子添加 A 嵌入,第二个句子添加 B 嵌入。50% 的情况下 B 确实是 A 后面的实际下一句,50% 的情况下它是随机选取的一个的句子,这是为“下一句预测”任务所做的。两句话合起来的长度要小于等于 512 个标记。语言模型遮蔽过程是在使用 WordPiece 序列化句子后,以均匀的 15% 的概率遮蔽标记,不考虑部分词片的影响(那些含有被 WordPiece 拆分,以##为前缀的标记)。

我们使用 256 个序列(256 个序列 * 512 个标记= 128,000 个标记/批次)的批大小进行 1,000,000 步的训练,这大约是在 33 亿词的语料库中训练 40 个周期。我们用Adam 优化算法并设置其学习率为 1e41e-4

在 4 块 Cloud TPU(共含有 16 块 TPU)上训练 BERTBASEBERT_{BASE}

3.5 微调过程

对于序列级别的分类任务,BERT 微调非常简单。为了获得输入序列的固定维度的表示,我们取特殊标记([CLS])构造相关的嵌入对应的最终的隐藏状态(即,为 Transformer 的输出)的池化后输出。我们把这个向量表示为 CRHC in mathbb{R}^H

对于微调,除了批量大小、学习率和训练次数外,大多数模型超参数与预训练期间相同。Dropout 概率总是使用 0.1。最优超参数值是特定于任务的,但我们发现以下可能值的范围可以很好地在所有任务中工作:

  • Batch size: 16, 32
  • Learning rate (Adam): 5e-5, 3e-5, 2e-5
  • Number of epochs: 3, 4

我们还观察到大数据集(例如 100k+ 标记的训练集)对超参数选择的敏感性远远低于小数据集。微调通常非常快,因此只需对上述参数进行完全搜索,并选择在验证集上性能最好的模型即可。

3.6 BERT 和 OpenAI GPT 的比较

在现有预训练方法中,与 BERT 最相似的是 OpenAI GPT,它在一个大的文本语料库中训练从左到右的 Transformer 语言模型。事实上,BERT 中的许多设计决策都是有意选择尽可能接近 GPT 的,这样两种方法就可以更加直接地进行比较。我们工作的核心论点是,在 3.3 节中提出的两项新的预训练语言模型任务占了实验效果改进的大部分,但是我们注意到 BERT 和 GPT 在如何训练方面还有其他几个不同之处:

  • GPT 是在 BooksCorpus(800M 词)上训练出来的;BERT 是在 BooksCor-pus(800M 词)和 Wikipedia(2,500M 词)上训练出来的。
  • GPT 仅在微调时使用句子分隔符([SEP])和分类标记([CLS]);BERT 在预训练时使用 [SEP], [CLS] 和 A/B 句嵌入。
  • GPT 在每批次含 32,000 词上训练了 1M 步;BERT 在每批次含 128,000 词上训练了 1M 步。
  • GPT 在所有微调实验中学习速率均为 5e-5;BERT 选择特定于任务的在验证集中表现最好的微调学习率。

为了分清楚这些差异的带来的影响,我们在 5.1 节中的进行每一种差异的消融实验表明,大多数的实验效果的改善实际上来自新的预训练任务(遮蔽语言模型和下一句预测任务)
在这里插入图片描述

图 3:我们具体于特定任务的模型是通过给 BERT 加一个额外的输出层构成,所以仅需要从头学习最小数量的参数。其中(a)和(b)是序列级任务,(c)和(d)是标记级任务。图中 EE 表示嵌入的输入,TiTi 表示第 ii 个标记的上下文表示,[CLS] 是分类输出的特殊符号,[SEP] 是分离非连续标记(分离两个句子)序列的特殊符号。

4. 实验

在这一节,我们将展示 BERT 在 11 项自然语言处理任务中的微调结果。

4.1 GLUE 数据集

通用语言理解评价 (GLUE General Language Understanding Evaluation) 基准(Wang et al.(2018))是对多种自然语言理解任务的集合。大多数 GLUE 数据集已经存在多年,但 GLUE 的用途是(1)以分离的训练集、验证集和测试集的标准形式发布这些数据集;并且(2)建立一个评估服务器来缓解评估不一致和过度拟合测试集的问题。GLUE 不发布测试集的标签,用户必须将他们的预测上传到 GLUE 服务器进行评估,并对提交的数量进行限制。

GLUE 基准包括以下数据集,其描述最初在 Wang et al.(2018)中总结:

MNLI 多类型的自然语言推理(Multi-Genre Natural Language Inference)是一项大规模的、众包的蕴含分类任务(Williams et al., 2018)。给定一对句子,目的是预测第二个句子相对于第一个句子是暗含的、矛盾的还是中立的关系。

QQP Quora问题对(Quora Question Pairs)是一个二元分类任务,目的是确定两个问题在Quora上问的语义是否相等 (Chen et al., 2018)。

QNLI 问题自然语言推理(Question Natural Language Inference)是斯坦福问题回答数据集(Rajpurkar et al., 2016)已经转换为二进制分类任务的一个版本 Wang et al.(2018)。正类的例子是(问题,句子)对,句子中包含正确的答案,和负类的例子是来自同一段的(问题,句子)对,句子中不包含正确的答案。

SST-2 斯坦福情感语义树(Stanford Sentiment Treebank)数据集是一个二元单句分类任务,数据由电影评论中提取的句子组成,并对由人工对这些句子进行标注(Socher et al., 2013)。

CoLA 语言可接受性单句二元分类任务语料库(Corpus of Linguistic Acceptability),它的目的是预测一个英语句子在语言学上是否 “可接受”(Warstadt et al., 2018)。

STS-B 文本语义相似度基准(Semantic Textual Similarity Bench-mark )是从新闻标题中和其它来源里提取的句子对的集合(Cer et al., 2017)。他们用从 1 到 5 的分数标注,表示这两个句子在语义上是多么相似。

MRPC 微软研究释义语料库(Microsoft Research Paraphrase Corpus)从在线新闻中自动提取的句子对组成,并用人工注解来说明这两个句子在语义上是否相等(Dolan and Brockett, 2005.)。

RTE 识别文本蕴含(Recognizing Textual Entailment)是一个与 MNLI 相似的二元蕴含任务,只是 RTE 的训练数据更少 Bentivogli et al., 2009

WNLI 威诺格拉德自然语言推理(Winograd NLI)是一个来自(Levesque et al., 2011) )的小型自然语言推理数据集。GLUE网页提示到这个数据集的构造存在问题,每一个被提交给 GLUE 的经过训练的系统在预测多数类时都低于 65.1 这个基线准确度。因此,出于对 OpenAI GPT 的公平考虑,我们排除了这一数据集。对于我们的 GLUE 提交,我们总是预测多数类。

4.1.1 GLUE 结果

为了在 GLUE 上微调模型,我们按照本文第 3 节中描述的那样表示输入的句子或者句子对,并且使用最后一层的隐藏向量 CRHC in mathbb{R}^H

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_29695701/article/details/88932574
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

推荐文章

猜你喜欢