【大语言模型-论文精读】谷歌-BERT:用于语言理解的预训练深度双向Transformers
目录
文章目录
0. 引言
@article{devlin2018bert,
title={Bert: Pre-training of deep bidirectional transformers for language understanding},
author={Devlin, Jacob},
journal={arXiv preprint arXiv:1810.04805},
year={2018}
}
BERT(Bidirectional Encoder Representations from Transformers)是由Google在2018年首次提出的一种预训练深度双向Transformers模型,具有较强的自然语言理解能力。这篇论文发表后,Bert模型迅速从自然语言理解(NLP)领域扩展应用到计算机视觉、多媒体、图形学图像等诸多领域,取得令人瞩目的效果。这篇经典的论文发表至今,已经被引用113695次!可以肯定地说:这是一篇几乎所有从事自然语言处理(Natural Lanugage Processing, NLP),深度学习(Deep Learning, DL)和大语言模型(Large language model, LLM)相关方向的研究者,必看且必了然于胸的一篇佳作。
1. 简介
语言模型预训练已经被证明可以有效地改善许多自然语言处理任务。这些任务包括:句子级任务和词符级任务。句子级任务,比如自然语言推理和释义,目的是通过对句子进行整体分析来预测句子之间的关系;词符级人物,比如命名实体识别和问题回答,要求模型在词符级产生细粒度的输出。
自然语言处理与理解(Natural Language Process & Understanding)
现有的两种策略可以将预训练好的语言表征(表示)应用于下游任务中:基于特征和微调(fine-tuning, FT)。
- 基于特征的方法,比如ELMo,使用特定于任务的架构,将预先训练好的表征作为额外的特征。
- 微调方法,比如生成式预训练Transformer(OpenAI GPT),引入最少得任务相关的参数,在下游任务中通过简单的微调所有预训练的模型参数。
这两种方法在预训练期间具有相同的目标函数,它们都使用单向语言模型来学习通用语言表征(表示)形式。
在谷歌的这篇论文中,作者认为:当前的技术限制了预训练表示的能力,特别是对于微调的方法。 最主要的限制是:标准语言模型是单向的,并且这限制了可以在预训练期间使用的模型结构的选择。 举个例子,在 OpenAI GPT 中,作者使用从左到右的结构,每个词符只能在 Transformer 的自关注层中关注之前的词符(Vaswani 等人,2017 )。 这种限制对于句子级的任务来说不是最优的,而且在应用基于微调的方法来处理词符级任务如问题回答时可能是非常有害的,因为在这种情况下从两个方向结合上下文至关重要。
在本这篇论文中,通过提出 BERT 对基于微调的方法进行改进:Bidirectional Encoder Representations from Transformers。 BERT 受 Cloze任务(Taylor,1953)的启发,通过使用 “屏蔽语言模型”(masked language model,MLM)预训练目标,缓解了前面提到的单向性约束。 屏蔽语言模型从输入中随机屏蔽部分词符,目标是仅根据上下文预测屏蔽掉的单词的原始词汇 ID。 与从左到右的语言模型预训练不同,MLM 目标使表示形式能够融合左右上下文,让我们可以预训练深层双向 Transformer。 除了屏蔽语言模型,我们还使用“预测下一个句子”任务来联合预训练文本对的表示。
因此,作者认为在这篇论文中,有如下三个主要贡献:
-
演示了双向预训练对于语言表示的重要性。 不同于 Radford 等人 (2018),它使用单向语言模型进行预训练,BERT 使用屏蔽语言模型来实现预训练的深度双向表示。 这也不同于 Peters 等人 (2018a),它使用经过独立训练的从左到右和从右到左 LM 的浅层连接。
-
论文研究表明:经过预训练的表示可以减少许多精心设计特定于任务的结构的需求。 BERT 是第一个在大量句子级以及 词符级任务上实现最先进性能的基于微调的表示模型,优于许多特定于任务的结构。
-
BERT 推进提升了 11 项 NLP 任务的最先进结果。 可以在https://github.com/google-research/bert上找到代码和经过预先训练的模型。
2 相关工作
预先训练通用语言表示形式已有很长的历史,本节中简要回顾使用最广泛的方法。
2.1 基于特征的无监督方法
几十年来,学习可广泛应用的单词表示方法一直是一个活跃的研究领域,包括非神经网络方法(Brown 等人,1992;Ando 和 Zhang,2005;Blitzer 等人,2006)和神经网络方法(Mikolov 等人,2013; Pennington 等人,2014)。 预训练的词嵌入是现代 NLP 系统不可或缺的一部分,与从零开始学习的嵌入相比有显着改进(Turian 等人,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等人,2017,2018a)沿不同维度推广了传统单词嵌入的研究。 他们结合从左到右和从右到左的语言模型提取上下文相关 特征。 每个词符的上下文表示是从左至右和从右至左表示的首尾相连。 当将上下文词嵌入与现有的特定于任务的体系结构集成时,ELMo 改进了几种主要的 NLP 基准的最先进结果(Peters 等人,2018a),包括问题回答(Rajpurkar 等人,2016)、情感分析(Socher 等人,2013)和命名实体识别(Tjong Kim Sang 和 De Meulder,2003)。 Melamud 等人 (2016)提出通利用 LSTM 从左右上下文中预测单个单词的任务学习上下文表征。 与 ELMo 相似,它们的模型是基于特征的并且不是深度双向的。 Fedus 等人 (2018)表明,cloze 任务可用于提高文本生成模型的鲁棒性。
2.2 无监督微调方法
与基于特征的方法一样,在这个方向上的早期工作只是在未标记的文本上预训练单词的嵌入参数(Collobert 和 Weston,2008)。
最近,产生上下文词符表示的句子或文档编码器已经从未标记的文本中预训练,并针对有监督的下游任务进行微调(Dai 和 Le,2015;Howard 和 Ruder,2018;Radford 等人,2018)。 这些方法的优点是几乎不需要从头学习参数。 至少部分由于此优势,OpenAI GPT(Radford 等人,2018)在 GLUE 基准测试中许多句子级任务上获得了以前的最先进结果(Wang 等人,2018a)。 从左到右的语言建模和自动编码器目标已被用于预训练此类模型(Howard 和 Ruder,2018;Radford 等人,2018;Dai 和 Le,2015)。
2.3 从监督数据迁移学习
也有工作显示了从大数据集监督任务的有效转移,如自然语言推理(Conneau 等人,2017)和机器翻译(McCann 等人,2017)。 计算机视觉研究还证明了从大型预训练模型进行迁移学习的重要性,其中一个有效的方法是微调用 ImageNet 预训练的模型(Deng 等人,2009; Yosinski 等人,2014)。
3 BERT
BERT 框架有两个步骤:预训练 和微调。
- 在预训练期间,通过不同的预训练任务在未标记的数据上进行模型训练。
- 对于微调,首先使用预训练的参数初始化 BERT 模型,然后使用下游任务中的标记数据对所有参数进行微调。 每个下游任务都有单独的微调模型,即使它们使用相同的预训练参数进行了初始化。 图1 中的问答示例将作为本节的运行示例。
BERT 的一个独有的特征是其跨不同任务的统一结构。 预训练的结构和最终的下游结构之间的差异很小。
模型结构 BERT 的模型结构是一种多层 Transformer 编码器,它基于的原始实现的描述位于 Vaswani 等人 (2017)并发布在 tensor2tensor 库中。因为Transformer 的使用已经很普遍以及我们的实现与原始版本几乎相同,我们将省略模型结构的详尽背景说明并请读者参考 Vaswani 等人 (2017)以及优秀的指南如“The Annotated Transformer”。
在这项工作中,我们将网络层(即 Transformer 的网络模块)的数量表示为 L,将隐藏层大小表示为 H,并将自注意头的数量表示为 A。我们主要报告两种模型大小的结果:BERTBASE (L=12, H=768, A=12, Total Parameters=110M) 和BERTLARGE (L=24, H=1024, A=16, Total Parameters=340M) 。
为了进行比较,选择BERT BASE具有与OpenAI GPT相同的模型大小。 但是,至关重要的是,BERT Transformer 使用双向自关注,而 GPT Transformer 使用受限的自我关注,其中每个词符只能关注其左侧的上下文。
输入/输出表示 为了使 BERT 处理各种下游任务,我们的输入可以用一个词符序列明确地表示单个句子和一对句子(例如⟨Question, Answer ⟩)。 在整个工作中,“句子”可以是连续文本的任意范围,而不是实际的语言句子。 “序列”是指 BERT 的输入词符序列,它可以是一个句子或两个句子封装在一起。
我们使用 WordPiece 嵌入(Wu 等人,2016),具有 30,000 个词符的词汇表。 每个序列的第一个标记始终是特殊分类标记([CLS])。 与此标记对应的最终隐藏状态用作分类任务的聚合序列表示。 句子对封装在一起形成单个序列。 我们通过两种方式区分句子。 首先,我们使用特殊词符([SEP])将它们分开。 其次,我们向每个词符添加一个学习型嵌入,表明它是属于句子 A 还是句子 B。 如图 1所示