Pre-trained Models for Natural Language Processing: A Survey
综述:自然语言处理的预训练模型
目录
摘要
最近,预训练模型(PTMs)的出现将自然语言处理(NLP)带入了一个新时代。在此调查中,我们提供了针对NLP的PTMs的全面概述。我们首先简要介绍语言表示学习及其研究进展。然后,我们基于分类从四个角度对现有PTMs进行系统分类。接下来,我们描述如何使PTMs的知识适应下游任务。最后,我们概述了PTMs未来研究的一些潜在方向。该调查旨在作为实践指南,帮助您理解,使用和开发适用于各种NLP任务的PTMs。
关键词
深度学习,神经网络,自然语言处理,预训练模型,分布式表示,词嵌入,自监督学习,语言建模
1引言
随着深度学习的发展,各种神经网络已广泛用于解决自然语言处理(NLP)任务,例如卷积神经网络(CNNs)[79、85、48],递归神经网络(RNNs)[167、106] ],基于图的神经网络(GNN)[153、168、118]和注意力机制[7、178]。这些神经模型的优点之一是它们减轻特征工程问题的能力。非神经NLP方法通常严重依赖离散的手工特征,而神经方法通常使用低维和密集向量(又称为分布式表示)来隐式表示语言的句法或语义特征。这些表示是在特定的NLP任务中学习的。因此,神经方法使人们易于开发各种NLP系统。
尽管用于NLP任务的神经模型取得了成功,但与“计算机视觉”(CV)领域相比,性能改进的重要性可能较低。主要原因是大多数受监督的NLP任务的当前数据集很小(机器翻译除外)。深度神经网络通常具有大量参数,这使它们过度适合于这些小的训练数据,并且在实践中不能很好地推广。因此,许多NLP任务的早期神经模型相对较浅,通常仅包含1-3个神经层。
最近,大量的工作表明,大型语料库上的预训练模型(PTMs)可以学习通用语言表示形式,这对下游NLP任务很有帮助,并且可以避免从头开始训练新模型。随着计算能力的发展,深层模型(即Transformer [178])的出现以及培训技能的不断增强,PTMs的体系结构已从浅层发展到深层。第一代PTMs旨在学习良好的单词嵌入。由于下游任务不再需要这些模型本身,因此对于计算效率而言它们通常很浅,例如Skip-Gram [123]和GloV e [127]。尽管这些经过预训练的嵌入可以捕获单词的语义,但它们不受上下文限制,无法捕获上下文中的高级概念,例如多义歧义消除,句法结构,语义角色,回指。第二代PTMs专注于学习上下文词嵌入,例如CoV e [120],ELMo [129],OpenAI GPT [136]和BERT [35]。仍然需要这些学习的编码器来表示下游任务在上下文中的单词。此外,还提出了各种预训练任务来学习PTMs,以用于不同的目的。
这项调查的贡献可归纳如下:
1.全面审查。我们对NLP的PTMs进行了全面的回顾,包括背景知识,模型架构,预训练任务,各种扩展,改编方法和应用。
2.新的分类法。我们提出了用于NLP的PTMs分类法,该分类法从四个不同的角度对现有PTMs进行了分类:1)表示类型,2)模型体系结构; 3)预训练任务的类型; 4)特定类型场景的扩展。
3.丰富的资源。我们收集有关PTMs的大量资源,包括PTMs的开源实现,可视化工具,语料库和论文清单。
4.未来方向。我们讨论并分析现有PTMs的局限性。另外,我们建议可能的未来研究方向。
其余的调查安排如下。第2节概述了PTMs的背景概念和常用符号。第3节简要概述了PTMs,并阐明了PTMs的分类。第4节提供了PTMs的扩展。第5节讨论如何将PTMs的知识转移到下游任务。第6节提供了有关PTMs的相关资源。第7节介绍了跨各种NLP任务的应用程序集合。第8节讨论了当前的挑战并提出了未来的方向。第9节总结了论文。
2 背景
2.1语言表示学习
如Bengio等人所建议。 [13],一个好的表示应该表达不是特定任务的通用先验,但是对于学习机器解决AI任务可能很有用。在语言方面,一个好的表示法应该捕获隐藏在文本数据中的隐含语言规则和常识知识,例如词汇含义,句法结构,语义角色,甚至是语用学。
分布式表示的核心思想是通过低维实值向量来描述一段文本的含义。向量的每个维度都没有相应的意义,而整体代表了一个具体的概念。图1说明了NLP的通用神经体系结构。词嵌入有两种:非上下文嵌入和上下文嵌入。它们之间的区别在于,单词的嵌入是否根据出现的上下文而动态变化。
非上下文嵌入表示语言的第一步是将离散的语言符号映射到分布式嵌入空间中。形式上,对于词汇表V中的每个单词(或子单词)x,我们将其映射到具有查找表E∈RDe×| V |的向量ex∈RDe,其中Deis是指示令牌嵌入维数的超参数。这些嵌入和其他模型参数一起在任务数据上训练。
这种嵌入有两个主要限制。第一个问题是嵌入是静态的。单词的嵌入与上下文无关,始终是相同的。因此,这些非上下文嵌入无法建模多义词。第二个问题是语外问题。为了解决这个问题,字符级单词表示或子单词表示被广泛用于许多NLP任务中,例如CharCNNs [86],FastText [14]和Byte-Pair Encoding(BPE)[148]。
上下文嵌入为了解决多义性和单词的上下文相关性质的问题,我们需要区分不同上下文中单词的语义。给定一个文本x1,x2,···,xT,其中每个标记xt∈V是一个单词或子单词,则xt的上下文表示取决于整个文本。
其中fenc(·)是神经编码器(在2.2节中进行了介绍),由于其中包含的上下文信息,因此称为令牌的上下文嵌入或动态嵌入。
2.2神经上下文编码器
大多数神经上下文编码器可分为三类:卷积模型,顺序模型和基于图的模型。图2说明了这些模型的体系结构。
(1)卷积模型。卷积模型将单词嵌入到输入句子中,并通过卷积运算汇总来自邻居的局部信息来捕获单词的含义[85]。卷积模型通常易于训练,并且可以捕获本地上下文信息。
(2)顺序模型 顺序模型通常按顺序捕获单词的上下文表示,例如LSTM [63]和GRU [23]。实际上,双向LSTM或GRU用于从单词的两侧收集信息,但是其性能通常受长期依赖问题的影响。
(3)基于图的模型 与上述模型不同,基于图的模型将单词作为节点,并通过单词之间的预定义语言结构(例如语法结构[153、168]或语义关系)学习上下文表示。 [118]。
尽管语言感知图结构可以提供有用的归纳偏差,但是如何构建良好的图结构也是一个具有挑战性的问题。此外,该结构在很大程度上取决于专家知识或外部NLP工具,例如依赖项解析器。
实际上,一种更直接的方法是使用完全连接的图对每两个单词的关系进行建模,然后让模型自己学习结构。通常,连接权重是通过自我关注机制动态计算的,该机制会隐式指示单词之间的联系。
这种想法的成功实现是Transformer [178],它采用了完全连接的自我关注架构以及其他有用的设计,例如位置嵌入,层归一化和残差连接。
分析 卷积模型和顺序模型都学习具有局部偏差的单词的上下文表示,并且很难捕获单词之间的远程交互。相反,Transformer可以直接对序列中每两个单词之间的依赖关系进行建模,这更强大并且更适合于对语言进行建模。
但是,由于其笨重的结构和较少的模型偏差,因此Transformer通常需要较大的训练语料,并且容易在小型或中等规模的数据集上过拟合[136,52]。
2.3为什么要进行预训练?
随着深度学习的发展,模型参数的数量迅速增加。需要更大的数据集来完全训练模型参数并防止过度拟合。但是,由于注释成本极其昂贵,因此对于大多数NLP任务而言,构建大规模的标记数据集是一项巨大的挑战,尤其是对于语法和语义相关的任务。
相反,大规模的未标记语料库相对容易构建。为了利用巨大的未标记文本数据,我们可以首先从它们中学习良好的表示形式,然后将这些表示形式用于其他任务。最近的研究表明,借助从大型无注释语料库中的PTMs提取的表示形式,可以在许多NLP任务上显着提高性能。
预训练的优势可以归纳如下:
1.在庞大的文本语料库上进行预训练可以学习通用的语言表示形式并帮助完成下游任务。
2.预训练提供了更好的模型初始化,通常可以带来更好的泛化性能并加快目标任务的收敛速度。
3.可以将预训练视为一种正则化,以避免对小数据过度拟合[42]。
2.4用于NLP的PTMs的简要历史
预训练一直是学习深度神经网络参数的有效策略,然后对下游任务进行微调。早在2006年,深度学习的突破就出现了贪婪的逐层无监督预训练,然后是有监督的微调[61]。在简历中实际上,我们已经在庞大的ImageNet语料库上对模型进行了预训练,然后针对不同的任务在较小的数据上进一步进行微调。这比随机初始化要好得多,因为该模型可以学习一般的图像特征,然后可以将其用于各种视觉任务。
在NLP中,从浅层词嵌入到深层神经模型,大型语料库上的PTMs也被证明对下游NLP任务有益。
2.4.1第一代PTMs:经过预训练的词嵌入
将单词表示为密集的向量已有很长的历史[59]。在神经网络语言模型(NNLM)的开创性工作中引入了“现代”词嵌入[12]。 Collobert等。 [26]表明,将预训练的词嵌入到未标记的数据上可以显着改善许多NLP任务。为了解决计算复杂性,他们使用成对排名任务而不是语言建模来学习单词嵌入。他们的工作是从未标记的数据中获得对其他任务有用的通用词嵌入的首次尝试。 Mikolov等。 [123]表明没有必要使用深度神经网络来构建良好的单词嵌入。他们提出了两种浅层架构:连续词袋(CBOW)和Skip-Gram(SG)模型。尽管它们很简单,但是他们仍然可以学习高质量的词嵌入,以捕获词之间潜在的句法和语义相似性。 Word2vec是这些模型最流行的实现之一,它使NLP中的不同任务可以访问经过预训练的单词嵌入。此外,GloV e [127]也是一种广泛使用的模型,用于获取预训练词嵌入,该词嵌入是通过从大型语料库中进行的全局词-词共现统计来计算的。
尽管已显示出预训练的单词嵌入在NLP任务中有效,但它们与上下文无关,并且大多由浅层模型训练。当用于下游任务时,整个模型的其余部分仍需要从头开始学习。
在同一时期,许多研究人员还尝试学习段落,句子或文档的嵌入,例如段落向量[94],跳过思想向量[87],Context2V ec [121]。这些句子嵌入模型与其现代的继承者不同,它们尝试将输入的句子编码为固定维的矢量表示形式,而不是每个标记的上下文表示形式。
2.4.2第二代PTMs:预训练的上下文编码器
由于大多数NLP任务都超出单词级别,因此很自然地将神经编码器预训练为句子级别或更高级别。神经编码器的输出向量也称为上下文词嵌入,因为它们根据其上下文表示单词语义。
McCann等。 [120]从带有机器翻译(MT)的注意序列到序列模型中预先训练了一个深LSTM编码器。预训练编码器输出的上下文向量(CoV e)可以提高各种常见NLP任务的性能。彼得斯等。 [129]具有双向语言模型(BiLM)的预训练2层LSTM编码器,由前向LM和后向LM组成。预训练的BiLM ELMo(语言模型的嵌入)输出的上下文表示显示出对各种NLP任务都带来了很大的改进。 Akbik等。 [1]通过字符级LM预训练的上下文字符串嵌入来捕获单词含义。
但是,这些PTMs通常用作特征提取器来生成上下文词嵌入,这些词嵌入到主模型中以用于下游任务。它们的参数是固定的,并且仍从头开始训练主要模型的其余参数。
Ramachandran等。 [140]发现Seq2Seq模型可以通过无监督的预训练得到显着改善。编码器和解码器的权重都使用两种语言模型的预训练权重进行初始化,然后使用标记的数据进行微调。 ULMFiT(通用语言模型微调)[66]尝试微调用于文本分类(TC)的预训练LM,并在六个广泛使用的TC数据集上取得了最新技术成果。 ULMFiT包括三个阶段:1)对通用域数据进行LM预训练; 2)对目标数据进行LM微调; 3)对目标任务进行微调。 ULMFiT还研究了一些有效的微调策略,包括判别式微调,倾斜的三角形学习率和逐渐解冻。自ULMFiT以来,微调已成为使PTMs适应下游任务的主流方法。
最近,非常深入的PTMs在学习通用语言表示中表现出了强大的能力:例如,OpenAI GPT(生成式预训练)[136]和BERT(来自变压器的双向编码器表示)[35]。除了LM外,还提出了越来越多的自我监督任务(请参阅第3.1节),以使PTMs从大型文本语料库中获取更多知识。
3 PTMs概述
PTMs之间的主要区别是上下文编码器的用法,预训练任务和目的。我们在第2.2节中简要介绍了上下文编码器的体系结构。在本节中,我们重点介绍预训练任务,并给出PTMs的分类法。
3.1预训练任务
预训练任务对于学习语言的通用表示形式至关重要。通常,这些预训练任务应具有挑战性,并具有大量的培训数据。在本节中,我们将培训前的任务概括为三类:监督学习,无监督学习和自我监督学习。
1.监督学习(SL)是要学习一种功能,该功能基于包含输入输出对的训练数据将输入映射到输出。
2.无监督学习(UL)是从未标记的数据中找到一些固有知识,例如聚类,密度,潜在表示。
3.自我监督学习(SSL)是监督学习和非监督学习的结合1)。 SSL的学习范例与监督学习完全相同,但是训练数据的标签是自动生成的。 SSL的关键思想是以某种形式预测来自其他部分的输入的任何部分。例如,屏蔽语言模型(MLM)是一种自我监督的任务,它试图在给定其余单词的情况下预测句