IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> [论文翻译]BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding -> 正文阅读

[人工智能][论文翻译]BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

引言

今天带来BERT的论文翻译,包括相关附录,也是挺重要的。

摘要

我们引入一种新颖的叫BERT(Bidirectional Encoder Representations from Transformers )1语言表征模型,与近期的语言表征模型不同,BERT被设计为从无标签文本中通过在所有层中联合单词左右两边上下文来预训练深度双向表征。因此,预训练的BERT模型可以接上一个额外的输出层进行微调(精调,fine-tune)来得到很多处理诸如问答和推理等自然语言处理任务的最好(SOTA,state-of-the-art)模型,而且不需要为特定任务做很大的模型上的改动。

BERT是一个理论上简单而实际上强大的模型。它在11个自然语言处理任务上获得了新的最佳结果,其中包括提高GLUE到80.5%(7.7%的提升)、提高MultiNLI准确率到86.7%(4.6%的提升)、提高SQuAD v1.1问答F1值到93.2(1.5的提升)和SQuAd v2.0F1值到83.1(5.1的提升)。

1 简介

语言模型的预训练已被证明能有效地提升许多自然语言处理任务表现,包括句子级(sentence-level)任务如自然语言推理(nature language inference)和释义(paraphrasing,指是用其他单词来描述一个文本或段落的意思),通过全面地分析句子来预测句子之间的关系;和单词级(token-level)任务如命名实体识别和问答,其中模型需要在单词级别上生成细粒度的输出。

有两种策略来应用预训练语言表征到下游任务:基于特征(feature-based)和微调。基于特征的方法,比如ELMo2,使用包含预训练的表征作为额外的特征的特定任务架构。微调的方法,比如GPT3,只需要引入最少的特定任务参数,然后在下游任务上简单微调所有预训练的参数来进行训练。这两种方法在预训练时共用同样的目标函数,即使用单向语言模型学习通用的语言表征。

我们认为当前的技术限制了预训练表征的能力,尤其对于微调方法来说。主要的限制在于标准语言模型是单向的,这制约了能用在预训练上的模型架构选择。举例来说,在OpenAI GPT中,作者使用了从左到右的架构,在Transformer的自注意层中每个单词只能注意到其所有左边的单词。这种局限对于句子级任务而言是次优选择,对于应用基于微调的方法到单词级任务则可能是毁灭性的。比如问答任务需要包含两个方向的上下文是至关重要的。

本文中,我们通过提出BERT提升了基于微调方法的表现。BERT通过使用一个屏蔽语言模型(masked language model,MLM)预训练目标来减轻上文提到的单向限制。MLM随机屏蔽输入中的某些单词,然后目标是仅基于这些单词的上下文来预测它们原来的词典id。与从左到右的语言模型预训练不同,MLM目标使表征能够融合左右上下文,这使我们能够预训练一个深层双向Transformer。 除了MLM,我们还使用“下一句预测(next sentence prediction)”任务,该任务联合预训练文本对表征。 我们论文的贡献如下:

  • 我们论证了语言表征的双向预训练的重要性。与 Radford 等人使用单向语言模型进行预训练不同,BERT 使用屏蔽语言模型来实现预训练的深层双向表示。这也与 Peters 等人的做法相反,他们使用了一个由左到右和由右到左独立训练的语言模型的浅层连接。

  • 我们表明了预训练的表征减少了对许多精心设计(heavily-engineered)的特定任务架构的需求。BERT是第一个基于微调的表示模型,它在大量句子级和单词级任务上达到最高水平,优于许多特定任务的架构。

  • BERT推进了11项NLP任务的最高水平。代码和预训练的模型在https://github.com/google-research/bert。

2 相关工作

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

2.1 无监督基于特征的方法

几十年来,学习广泛适用的词语表示一直是一个活跃的研究领域,包括非神经网络(Brown 等人; Ando 和 Zhang; Blitzer 等人)和神经网络(Mikolov 等人; Pennington 等人)方法。预训练的单词嵌入是现代 NLP 系统不可或缺的一部分,提供了比从零开始学习的嵌入向量更大的改进。为了预训练单词嵌入向量,使用了从左到右的语言建模目标(Mnih 和 Hinton) ,以及区分左右上下文中正确和错误词语的目标(Mikolov 等人)。

这些方法已经被推广到更粗的粒度,比如句子嵌入(Kiros等人; Logeswaran和Lee)或段落嵌入(Le和Mikolov)。为了训练句子表示,先前的工作已经使用目标对下一句候选句子进行排序(Jernite 等人; Logeswaran 和 Lee) ,给出前一句子的表示,从左到右的生成下一个句子单词(Kiros 等人) ,或者去噪自动编码器派生目标(Hill 等人)。

ELMo 及其前身(Peters)从不同的维度概括了传统的单词嵌入研究。它们从从左到右和从右到左的语言模型中提取上下文敏感(context-sensitive)的特征。每个单词的上下文表示是左到右和右到左表示的串联。当把上下文相关词嵌入与现有特定任务架构相结合时,ELMo 为几个主要的 NLP 基准测试(Peters)推进了最好结果,包括问答(Rajpurkar 等人)、情绪分析(Socher 等人)和命名实体识别(Tjong Kim Sang 和 De Meulder)。Melamud 等人提出通过使用 LSTM从左右两向上下文中预测单个单词的任务来学习上下文表征。与 ELMo 类似,他们的模型是基于特征的,而不是深层双向。Fedus 等人表明完形填空任务可以用来提高文本生成模型的健壮性。

2.2 无监督基于微调的方法

与基于特征的方法一样,在这个方向上第一种方法是仅从未标记文本中预训练单词嵌入参数。

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

2.3 从监督数据迁移学习

还有一些研究表明,从大量数据集的监督学习任务可以有效地迁移到,如自然语言推理和机器翻译任务。计算机视觉研究也证明了从大规模预训练模型迁移学习的重要性,一种有效的做法是微调通过ImageNet预训练过的模型。

3 BERT

本节中我们介绍BERT和它的实现细节。在我们的框架中有两步:预训练和微调。预训练时,模型在不同预训练任务上的未标记数据上进行训练。微调时,BERT首先通过预训练的参数进行初始化,然后所有的参数使用下游任务的有标记数据进行微调。每个下游任务都有单独的微调模型,尽管它们使用同样的预训练参数初始化。在图1中的问答示例可以作为本节的一个例子。

图1:BERT的完整预训练和微调过程

图1:BERT完整的预训练和微调过程。除了输出层之外,预训练和微调都用的同样的架构。同样的预训练模型参数来初始化不同下游任务的模型。微调过程中会调整所有的参数(BERT的参数与下游任务输出层的参数)。[CLS]是加到每个输入样本前面的特殊符,而[SEP]是用于分隔的特殊符(比如分隔问题/答案)。

BERT的一个显著特点是其跨越不同任务的统一架构。预训练架构和最终下游架构之间的区别很小。

模型架构 BERT的模型架构是基于Vaswani等人4描述的原始实现的多层双向Transformer编码器。因为Transformer的使用已经很普遍了,我们的实现几乎与原始的Transformer相同,我们将省略模型架构的详尽背景描述,并建议读者参考Vaswani等人4的论文和**The Annotated Transformer**。

本文中,我们记层(Transformer block)数为 L L L,隐藏大小为 H H H,多自注意的头数为 A A A(我们设置前向网络大小为 4 H 4H 4H)。我们主要报告了两种模型大小的结果: BERT BASE \text{BERT}_{\text{BASE}} BERTBASE?( L = 12 L=12 L=12, H = 768 H=768 H=768, A = 12 A=12 A=12,总参数量为110M(million,百万,即1.1亿))和 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE?( L = 24 L=24 L=24, H = 1024 H=1024 H=1024,$A=16,总参数量为340M)。

为了便于对比, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE?的大小和OpenAI GPT一样,然而,BERT的Transformer使用双向的自注意力,而GPT的Transformer使用受限的自注意力其中每个单词只能注意到其左边的上下文。

输入/输出表征 为了让BERT能处理各种各样的下游任务,我们输入表征能在一个单词序列中清晰的表示单句子和句子对(比如 ? Question , Answer ? \langle \text{Question},\text{Answer} \rangle ?Question,Answer?)。在整个工作中,“句子”可以是连续文本的任意跨度,而不是实际语言的句子。“序列”代表BERT的输入单词序列,可以是单句子也可以是组合在一起的句子对。

我们使用词典大小为3000的WordPiece嵌入5。每个序列的第一个单词通常是一个特殊分类符([CLS])。该单词对应的最终隐藏状态看成是整个序列的压缩表示,可用于分类任务。语句对被组合成一个序列。我们以两种方式来区分这两个语句。一,我们用特殊符([SEP])分隔它们;二,我们添加一个学习的嵌入到每个单词来显示它属于语句 A A A还是 B B B。如图1所示,我们记输入嵌入为 E E E,特殊符[CLS]的最终隐藏向量为 C ∈ R H C \in \Bbb{R}^H CRH,第 i i i个输入单词的最终向量为 T i ∈ R H T_i \in \Bbb{R}^H Ti?RH

对于一个给定单词,它的输入表示由相应的单词嵌入,片段嵌入和位置编码嵌入求和而成。如图2所示。

图2:BERT的输入表示

图2:BERT的输入表示。输入嵌入是单词嵌入,片段嵌入和位置编码的累加。

3.1 预训练BERT

不像Peters等人和Radforad等人,我们没有使用传统的从左到右或从右到左的语言模型来预训练BERT。反之,我们使用两个本节描述的无监督任务来预训练BERT。这一步体现在图1的左半部。

任务#1: 屏蔽语言模型(Masked LM) 直觉上,有理由相信一个深层双向模型与从左到右或从左到右和从右到左的浅层连接模型相比来说更强大。不幸的是,标准的条件语言模型只能被单独地从左到右或从右到左进行训练,因为双向条件模型会让每个单词间接地看到自己,而且这种模型可以在多层上下文中轻松地预测目标单词。

为了训练一个深层双向表示,我们简单地随机屏蔽(mask)某些输入单词,然后预测这些被屏蔽的单词。我们称为这个过程为一个屏蔽的语言模型(masked LM,MLM),尽管它在文献中经常被称为完形填空任务(Cloze task)。这样,屏蔽单词对应的最终隐藏状态喂给一个基于整个词典的softmax输出层,和标准的语言模型一样。在我们的实验中,我们在每个序列中随机地屏蔽15%的WordPiece单词。与去噪自编码器不同,我们仅预测被屏蔽的单词而不是重构整个输入。

尽管这足以让我们能得到一个双向的预训练模型,一个缺点是我们在预训练和微调之间造成了不匹配,因为在微调之间不会出现[MASK]单词。为了解决这个问题,我们不总是用真正的[MASK]单词替换被屏蔽的单词。训练数据生成器随机选择15%的单词位置进行预测。如果第 i i i个单词被选中,我们替换第 i i i个单词通过(1)80%的概率使用[MASK]单词(2)10%的概率使用随机单词(3)10%的概率使用原单词(即不替换)。然后使用 T i T_i Ti?来预测原单词,并计算交叉熵损失。我们在附录C.2中比较了这里描述的不同方法。

任务#2:下一句预测(NSP) 许多重要的下游任务像问答(QA)和自然语言推理(NLI)都是基于对两个句子之间关系的理解,这种理解没有直接被语言模型学到。为了训练一个能理解句子关系的模型,我们对二分类的下一句预测任务进行了预训练,该任务数据可以从任何单语语料库中轻松生成。具体来说,在为每个训练样本选择语句 A A A B B B时, B B B有50%的可能真的是 A A A的下一句(标记为IsNext),也有50%的可能是从语料库中随机的句子(标记为NotNext)。如图1所示, C C C就可以用于NSP。尽管很简单,我们在5.1节中表明对该任务的预训练非常有益于QA和NLI任务(注意,向量 C C C在没有微调的情况下不是有意义的句子表示,因为它是用NSP训练的)。

NSP任务非常接近于Jernite等人与Logeswaran和Lee使用的表征学习目标。然后,在他们的模型中,只有句子嵌入被迁移到下游任务,而BERT迁移所有的参数来实例化下游任务模型参数。

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

3.2 微调BERT

微调很简单,因为Transformer中的自注意机制允许BERT为很多下游任务建模——无论是单个句子还是句子对——通过替换适当的输入和输出。对于涉及到文本对的应用,一个常用的模式是在应用双向交叉注意前独立地编码文本对,比如Parikh等人和Seo等人的做法。相反,BERT采用自注意机制将这两个阶段统一起来,用自注意将拼接的文本对编码,有效地包含了两个句子之间的双向交叉注意。

对于每个任务,我们只需将任务特定的输入和输出简单地插入到BERT中,并对所有参数进行端到端的微调。在输入端,预训练阶段的句子 A A A和句子 B B B类似于 ( 1 ) (1) (1)释义(paraphrasing)中的语句对 ( 2 ) (2) (2)蕴含中的假设-前提对 ( 3 ) (3) (3)问答中的问题-段落对 ( 4 ) (4) (4)文本分类或序列标记中的文本- ? \emptyset ?对。在输出端,对于单词级任务来说,把单词表征(每个输入单词对应的向量)喂给输出层,比如序列标记或问答;对于分类任务来说,把[CLS]表征(该特殊符对应的向量)喂给输出层,比如蕴含或情感分析任务。

与预训练相比,微调基本就没有什么花费。基于同样的预训练模型,本文中的所有的结果经过一个Cloud TPU训练1消失或一个GPU上训练几小时重现。我们会在第4小节中介绍相关的任务细节。更多的细节可以参照附录A.5。

4 实验

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

4.1 GLUE

通用语言理解评估基准(GLUE,General Language Understanding Evaluation)基准(Wang et al., 2018a是一个各种自然语言理解任务的集合。GLUE数据集的细节描述包含在附录B.1中。

为了在GLUE上微调,我们像第3小节中描述的那样表示输入序列(单个句子或句子对),同时使用第一个输入单词[CLS]对应的最终的隐藏向量 C ∈ R H C \in \Bbb{R}^H CRH作为句子的压缩表示。在微调期间引入的新参数只是分类层的权重 W ∈ R K × H W \in \Bbb{R}^{K \times H} WRK×H,其中 K K K是标签的数量。我们用 C C C W W W计算标准的分类损失,比如 log ? ( softmax ( C W T ) ) \log(\text{softmax}(CW^T)) log(softmax(CWT))

我们在所有GLUE任务的数据上使用的批大小为32并微调了3个epoch。对于每一个任务,我们选择了在Dev集上表现最好的一个微调学习率(在5e-5、4e-5、3e-5和2e-5之间)。此外,对于 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE?,我们发现 在小数据集上微调有时不稳定,所以我们随机重跑(重启)了几次,并在 Dev 集上选择了最佳模型。对于随机重启,我们使用相同的预先训练的checkpoint,但执行不同的微调数据打乱(shuffling)和不同的分类器层初始化。

表1:GLUE测试结果

表1:GLUE测试结果,由评估服务器(https://gluebenchmark.com/leaderboard)打分。每个任务下面的数字表示训练样本数量。“Average”列与官方的GLUE得分有一点不同,因为我们移除了有问题的WNLI数据集。BERT和OpenAI GPT都是单模型,单任务。计算了QQP和MRPC的F1评分,STS-B的Spearman相关性,其他任务的准确性评分。我们排除了使用BERT作为其组件之一的选项。

结果如表1所示。 BERT BASE \text{BERT}_{\text{BASE}} BERTBASE? BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE? 在所有任务上的表现都大大优于所有系统,与现有技术相比,平均准确度分别提高了 4.5% 和 7.0%。 注意到,除了注意屏蔽(attention masking)之外, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE? 和 OpenAI GPT 在模型架构方面几乎相同。 对于最大和最广泛报道的 GLUE 任务 MNLI,BERT 获得了 4.6% 的绝对准确度提升。 在官方 GLUE 排行榜 上, BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE? 获得了 80.5 分,而 OpenAI GPT 在撰写本文时获得了 72.8 分。

我们发现 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE? 在所有任务都明显优于 BERT BASE \text{BERT}_{\text{BASE}} BERTBASE?,尤其是那些训练数据量很少的任务。模型规模的影响在第5.2节中进行了更为深入的探讨。

4.2 SQuAD v1.1

斯坦福问答数据集(Stanford Question Answering Dataset,SQuAD v1.1)是一个10万个问答对的集合(Rajpurkar et al. ,2016)。给出一个问题和一篇来自维基百科包含答案的文章,任务是预测文章中的答案文本片段(span)。

预测文章中的答案文本片段。如图1所示,在问答任务中,我们将输入的问题和文章表示为一个单独的打包序列,问题使用嵌入 A A A,文章使用嵌入 B B B。在微调过程中,我们只引入了一个起始向量 S ∈ R H S \in \Bbb{R}^H SRH 和一个结束向量 E ∈ R H E \in \Bbb{R}^H ERH。单词 i i i作为答案片段起始位置的概率计算为 T i T_i Ti? S S S之间的点积,计算文章中所有单词的softmax值: P i = e S ? T i ∑ j e S ? T j P_i = \frac{e^{S \cdot T_i}}{\sum_j e^{S \cdot T_j}} Pi?=j?eS?Tj?eS?Ti??。类似的公式用于计算答案片段的结束位置。从位置 i i i到位置 j j j的候选片段的得分定义为 S ? T i + E ? T j S \cdot T_i + E \cdot T_j S?Ti?+E?Tj?,然后最大得分的片段作为预测结果,其中 j ≥ i j \geq i ji。训练目标函数是正确的开始和结果位置的对数似然之和。我们以 5e-5 的学习率和 32 的批量大小运行3个epoch进行微调。

表2: SQAD1.1结果

表2:SQuAD1.1结果。BERT 集成模型是 7x 系统,它使用不同的预训练checkpoint和微调种子。

表2显示了顶级排行榜的模型以及顶级发布的系统的结果(Seo 等人,2017; Clark and Gardner,2018; Peters 等人,2018a; Hu 等人,2018)。排行榜上的最高结果没有最新的公共系统说明,并允许在训练其系统时使用任何公共数据。因此,在对 SQuAD 进行微调之前,我们首先对 TriviaQA数据集 (Joshi 等人,2017)进行微调来进行数据增强。

我们表现最好的系统优于最高排行榜系统1.5F1得分(集成系统)和1.3 F1得分(单一系统)。实际上,我们的单个BERT 模型在 F1得分上优于顶级的集成系统。如果没有 TriviaQA 的微调数据,我们只会减少0.1-0.4 F1得分,仍然远远超过所有现有系统。

4.3 SQuAD v2.0

SQuAD 2.0 任务扩展了 SQuAD 1.1 问题定义,允许提供的文章中具有不存在答案的可能性,从而使问题更加现实。

我们使用一种简单的方法来扩展在SQuAD v1.1上训练的BERT模型来完成这项任务。 我们将没有答案的问题视为以[CLS] 标记开始和结束的答案片段。 开始和结束答案片段位置的概率空间扩展为包括 [CLS] 标记的位置。 对于预测,我们将无答案范围的分数: 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 = max ? j ≥ i S ? T i + E ? T j s_{\hat{i},j}=\max_{j \geq i S\cdot T_i + E \cdot T_j} si^,j?=maxjiS?Ti?+E?Tj??的分数进行比较。 当 s i ^ , j > s n u l l + τ s_{\hat{i},j} > s_{null} + τ si^,j?>snull?+τ 时,我们预测答案非空,其中阈值 τ τ τ是在dev集中选择的以最大化F1得分。 我们没有为此模型使用 TriviaQA 数据。 我们以 5e-5 的学习率和 48 的批量大小运行2个epoch进行微调。

与之前的排行榜和最热门的发表(Sun 等人,2018 年;Wang 等人,2018b)相比的结果如表 3 所示,不包括使用 BERT 作为其组件之一的系统。 我们观察到比之前最好的系统有5.1 F1得分的改进。

表3:SQuAD2.0结果

表3:SQuAD2.0结果。我们排除了使用BERT作为组件之一的模型。

4.4 SWAG

The Situations With Adversarial Generations (SWAG) 数据集包含113k 个句子对样本,用于评估基础的常识推理(Zellers 等人,2018 年)。 给定一个句子,任务是在四个选项中选择最合理的下文。

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

我们以 2e-5 的学习率和16的批大小对模型进行了 3 个epoch的微调。结果如表 4 所示。 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE? 的性能优于作者的基准 ESIM+ELMo 系统 27.1% 和 OpenAI GPT 8.3 %。

表4:SWAG 开发和测试准确率

表4:SWAG开发和测试准确率。人类的表现通过100个样本衡量。

5 消融实验(Ablation Studies)

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

消融实验:就是去掉模型中的部分模块,然后看模型的性能会有怎样的影响。

5.1 预训练任务的影响

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

无NSP: 一个使用MLM训练的双向模型,但没有NSP任务。

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

我们首先检查 NSP 任务带来的影响。 在表 5 中,我们表明移除 NSP 会显着影响 QNLI、MNLI 和 SQuAD 1.1 的性能。 接下来,我们通过比较“无NSP”和“左到右&无NSP”来评估训练双向表征的影响。 LTR 模型在所有任务上的表现都比 MLM 模型差,在 MRPC 和 SQuAD 上大幅下降。

表5:使用BERT BASE架构的预训练任务的消融

表5:使用BERT BASE架构的预训练任务的消融。“No NSP”没有通过NSP任务训练。“LTR&No NSP”作为左到右语言模型训练,并没有NSP预测任务,和OpenAI GPT一样。“+BiLSTM”预训练期间在模型顶部增加一个随机初始化的BiLSTM(双向LSTM)

对于 SQuAD,很明显 LTR 模型在单词预测方面表现不佳,因为单词级隐藏状态没有右侧上下文。 为了尝试加强 LTR 系统,我们在顶部添加了一个随机初始化的 BiLSTM。 这确实显着改善了 SQuAD 的结果,但结果仍然比预训练的双向模型差得多。 BiLSTM 会影响 GLUE 任务的性能。

我们发现,也可以训练单独的 LTR(左到右) 和 RTL(右到左) 模型,并将每个单词表示为两个模型表示的拼接,就像 ELMo 所做的那样。 但是:(a) 花费是单个双向模型的两倍; (b) 这对于像 QA 这样的任务来说是不直观的,因为 RTL 模型将无法根据问题确定答案; ? 这严格来说不如深度双向模型强大,因为它可以在每一层使用左右上下文。

5.2 模型大小的影响

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

表6:BERT模型大小上的消融

BERT模型大小上的消融。#L层数;#H隐藏大小;#A注意力头数;‘LM(ppl)’是保留训练数据的MLM困惑度

所选 GLUE 任务的结果如表 6 所示。在此表中,我们报告了 5 次随机重新启动微调的平均开发集准确度。 我们可以看到,更大的模型在所有四个数据集上都带来了严格的准确率提升,即使对于只有 3,600 个标记训练样本的 MRPC 也是如此,并且与预训练任务有很大不同。 也许令人惊讶的是,我们能够在相对于现有文献已经相当大的模型之上实现如此显着的改进。 例如,Vaswani 等人提出的largetst Transformer (L=6, H=1024, A=16) 编码器参数为 100M。我们在文献中发现的largest Transformer 是 (L=64, H=512, A=2) 与 235M 参数(Al-Rfou 等人,2018 年)。 相比之下, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE? 包含 110M 参数, BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE? 包含 340M 参数。

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

5.3 基于特征的BERT方法

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

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

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

结果如表 7 所示。 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE? 与SOTA方法相比具有竞争力。 性能最好的方法拼接预训练 Transformer 的最上面四个隐藏层的单词表示,这在对整个模型进行微调之后仅落后有微调整个模型0.3 F1得分。这表明 BERT 对于微调和基于特征的方法都是有效的。

6 结论

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

A BERT的额外细节

A.1 预训练任务描述

我们提供的预训练任务例子如下。

屏蔽的语言模型和屏蔽过程 假设无标签句子为my dog is hairy,在随机屏蔽过程中我们选择第4个单词(也就是hairy),我们的屏蔽过程进一步的阐述为

  • 80%的概率:通过[MASK]标记(单词)替换,即,my dog is hairy → \rightarrow my dog is [MASK]
  • 10%的概率:通过随机单词替换,即,my dog is hairy → \rightarrow my dog is apple
  • 10%的概率:不变,即,my dog is hairy → \rightarrow my dog is hairy

这个过程的优势是 Transformer 编码器不知道它将被要求预测哪些词或哪些词已被随机词替换,因此它被迫保留每个输入单词的分布式上下文表示。 此外,因为随机替换只发生在所有单词的 1.5%(即 15% 的 10%),这似乎不会损害模型的语言理解能力。 在 C.2 节中,我们评估了此过程的影响。

与标准语言模型训练相比,屏蔽的语言模型(MLM)仅对每批中15% 的单词进行预测,这表明模型可能需要更多的预训练步骤才能收敛。 在第 C.1 节中,我们证明了 MLM 确实比从左到右模型(预测每个单词)的收敛速度稍慢,但是 MLM 模型的改进远远超过了增加的训练成本。

下一句预测 下一句预测任务阐述如下。

Input = [CLS] the man went to [MASK] store [SEP]
        he bought a gallon [MASK] milk [SEP]
Label = IsNext

Input = [CLS] the man [MASK] to the store [SEP]
        penguin [MASK] are flight ##less birds [SEP]
Label = NotNext

A.2 预训练过程

为了生成每个训练输入序列,我们从语料库中采样了两个文本片段,我们将其称为“句子”,尽管它们通常比单个句子长得多(但也可以更短)。 第一个句子接收 A 嵌入,第二个句子接收 B 嵌入。 50% 的概率 B 是 A 之后的实际下一个句子,50% 的概率它是一个随机句子,这是为“下一句预测”任务准备的。 对它们进行采样,使得组合的长度小于等于512 个单词。 LM 屏蔽是在 WordPiece 分词后应用的,统一 屏蔽率为 15%。

我们以 256 个序列的批大小(256 个序列 * 512 个单词 = 128,000 个单词/批次)训练 1,000,000 步,在 33 亿个单词语料库中大约 40 个epoch。 我们使用 Adam,学习率为 1e-4, β 1 \beta_1 β1? = 0.9, β 2 \beta_2 β2? = 0.999,L2 权重衰减为0.01,前 10,000 步的学习率预热,学习率线性衰减。 我们在所有层上使用 0.1 的 dropout 概率。 在 OpenAI GPT 之后,我们使用了 gelu 激活(Hendrycks 和 Gimpel,2016)而不是标准的 relu。 训练损失是平均屏蔽 LM 似然和平均下一句预测似然之和。

BERT BASE \text{BERT}_{\text{BASE}} BERTBASE? 的训练在 Pod 配置中的 4 个 Cloud TPU 上进行(总共 16 个 TPU 芯片)。 BERT LARGE \text{BERT}_{\text{LARGE}} BERTLARGE?的训练在 16 个 Cloud TPU 上进行(总共 64 个 TPU 芯片)。 每个预训练需要 4 天才能完成。

更长的序列成本过高,因为注意力是序列长度的二次方。 为了在我们的实验中加速预训练,我们对模型的 90% 的步骤进行了序列长度为 128 的预训练。 然后,我们训练 512 序列的其余 10% 的步骤来学习位置嵌入(position embedding)。

A.3 微调过程

对于微调,大多数模型超参数与预训练中的相同,但批次大小、学习率和训练epoch数不同。 Dropout概率始终保持在 0.1。 最佳超参数值是特定于任务的,但我们发现以下可能值范围适用于所有任务:

  • 批大小:16,32
  • 学习率(Adam):5e-5,3e-5,2e-5
  • epoch数:2,3,4

我们还观察到,与小数据集相比,大型数据集(例如 10 万多个带标签的训练样本)对超参数选择的敏感度要低得多。 微调通常非常快,因此只需对上述参数进行彻底搜索并选择在开发集上表现最佳的模型是合理的。

A.4 BERT,ELMo和OpenAI GPT的比较

在这里,我们研究了最近流行的表示学习模型(包括 ELMo、OpenAI GPT 和 BERT)的差异。 模型架构之间的比较如图 3 所示。请注意,除了架构差异之外,BERT 和 OpenAI GPT 是微调方法,而 ELMo 是基于特征的方法。

图3:预训练模型架构的区别

图3:预训练模型架构的区别。BERT使用一个双向的Transformer。OpenAI GPT使用一个左到右的Transformer。ELMo使用拼接的独立训练的左到右和右到左LSTM为下游任务生成特征。在这三者之间,只有BERT表示是在所有层中同时基于左到右和右到左上下文的。除了架构的不同,BERT和OpenAI GPT都是微调方法,而ELMo是基于特征的方法。

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

  • GPT只在微调时引入句子分隔符([SEP])和分类标记([CLS]);BERT在预训练时学习[SEP][CLS]和句子A/B嵌入表示。
  • GPT在32,000个单词批大小上训练了1M(1百万)步;BERT在128,000个单词批大小上训练了1M步。
  • GPT对于所有的微调实验使用了同样的学习率5e-5;BERT选择一个在开发集上表现最好的特定于任务的微调学习率。

为了隔离这些差异的影响,我们在第 5.1 节中进行了消融实验,这表明大部分改进实际上来自两个预训练任务及其实现的双向性。

A.5 在不同任务上微调的图示

在不同任务上微调 BERT 的图示可以在图 4 中看到。我们的特定任务模型是通过将 BERT 与一个额外的输出层相结合而形成的,因此需要从头开始学习最少的参数。 在这些任务中(a)和(b)是句子级任务,而?和(d)是单词级任务。 图中, E E E表示输入嵌入, T i T_i Ti?表示单词 i i i的上下文表示,[CLS]是分类输出的特殊符号,[SEP]是分隔非连续单词序列的特殊符号。

图4:BERT在不同任务上微调图示

图4:BERT在不同任务上微调图示

B 实验设立细节

C 附加的消融实验

C.1 训练步数的影响

图 5 显示了从经过 k k k 步预训练的检查点(checkpoint)进行微调后的 MNLI开发准确度。 这使我们能够回答以下问题:

  1. 问:BERT 真的需要如此大量的预训练(128,000 个单词/批次 * 1,000,000 步)才能达到高的微调精度吗?

    答:是的,与 500k 步相比, BERT BASE \text{BERT}_{\text{BASE}} BERTBASE? 在 1M 步上训练时在 MNLI 上的准确度提高了近 1.0%。

  2. 问:MLM 预训练的收敛速度是否比 LTR(左到右) 预训练慢,因为每个批次中只有 15% 的单词被预测,而不是每个单词?

    答:MLM 模型的收敛速度确实比 LTR 模型稍慢。 然而,就绝对精度而言,MLM 模型快速优于 LTR 模型。

图5:训练步数消融实验。

图5: 训练步数消融实验。微调后的MNLI准确率(纵轴),从模型参数经过k步预训练后。横轴是k的值。

C.2 不同屏蔽过程的消融实验

在 3.1 节中,我们提到在使用屏蔽语言模型 (MLM) 目标进行预训练时,BERT 使用混合策略来屏蔽目标单词。 以下是评估不同屏蔽策略效果的消融研究。

注意,屏蔽策略的目的是减少预训练和微调之间的不匹配,因为 [MASK] 符号在微调阶段从未出现。 我们报告了 MNLI 和 NER 的开发结果。 对于 NER,我们报告了微调和基于特征的方法,因为我们预计基于特征的方法的不匹配会被放大,因为模型将没有机会调整表示。

结果如表 8 所示。在表中,MASK 代表我们将目标单词替换为 MLM 的 [MASK] 标记; SAME 代表我们保持目标单词不变; RND 代表我们用另一个随机单词替换目标单词。

表8:不同屏蔽策略的消融实验

表8:不同屏蔽策略的消融实验

表格左侧的数字表示MLM预训练期间使用的具体策略的概率(BERT使用了80%、10%、10%)。 右侧部分表示开发集结果。 对于基于特征的方法,我们将 BERT 的最后 4 层连接起来作为特征,这在 5.3 节中被证明是最好的方法。

从表中可以看出,微调对不同的屏蔽策略具有惊人的鲁棒性。 然而,正如预期的那样,在将基于特征的方法应用于 NER 时,仅使用 MASK 策略是有问题的。 有趣的是,仅使用 RND 策略的性能也比我们的策略差得多。


  1. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding ??

  2. Deep contextualized word representations ??

  3. Improving Language Understanding by Generative Pre-Training ??

  4. Attention Is All You Need ?? ??

  5. Google’s Neural Machine Translation System: Bridging the Gap between Human and Machine Translation ??

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:48:58  更:2021-09-07 10:49:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 15:46:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码