姓名 | 所在组织 | 联系方式 |
---|---|---|
Alec Radford | OpenAI | [email protected] |
Karthik Narasimhan | OpenAI | [email protected] |
Tim Salimans | OpenAI | [email protected] |
Ilya Sutskever | OpenAI | [email protected] |
这篇论文讲了什么事情呢,我们先来看摘要。
自然语言理解包括多种不同的任务,如文本蕴含、问答、语义相似度评估和文档分类。虽然大量无标签文本数据是丰富的,但用于学习这些特定任务的标注数据非常稀缺,这使得基于判别式训练的模型难以表现良好。
论文的主要观点是,在大量无标签文本数据上进行生成式预训练的语言模型,然后针对每个特定任务进行判别式微调,可以在这些任务上实现显著的性能提升。与先前的方法不同,作者在微调过程中使用了任务感知的输入转换,以实现有效的迁移,同时只需对模型架构进行最小的更改。
作者在一系列自然语言理解基准测试中证明了该方法的有效性。这个通用的、任务无关的模型超越了使用针对每个任务特别定制的架构的判别式训练模型,在研究的12个任务中有9个任务上显著提高了最先进的性能。例如,在常识推理(Stories Cloze Test)上的绝对改进为8.9%,在问答(RACE)上为5.7%,在文本蕴含(MultiNLI)上为1.5%。
这篇论文通过在无标签文本数据上进行生成式预训练,然后针对每个特定任务进行判别式微调,提出了一种改进自然语言理解任务性能的方法。这种方法在多个基准测试中实现了显著的性能提升,并在许多任务上超越了使用特定任务架构的判别式训练模型。
为什么要有这片研究成果呢?之前的方法有什么困难,在NLP领域的各个任务上有什么不足?
这段文字强调了从原始文本中有效地学习的能力对于减轻自然语言处理(NLP)中对监督学习依赖的重要性。大多数深度学习方法需要大量手动标注的数据,这限制了它们在许多因缺乏标注资源而受限的领域的适用性。在这些情况下,能够利用无标签数据中的语言信息的模型为收集更多标注提供了一种有价值的替代方案,因为收集标注可能既耗时又昂贵。此外,即使在监督较多的情况下,以无监督的方式学习良好的表示也可以显著提高性能。
**迄今为止,最令人信服的证据是预训练词嵌入在一系列NLP任务上的广泛应用,以提高性能。**然而,从无标签文本中获取超过词级别的信息具有挑战性,主要有两个原因。首先,目前尚不清楚哪种优化目标在学习对迁移有用的文本表示方面最有效。近期的研究考察了各种目标,如语言建模、机器翻译和话语连贯性,每种方法在不同任务上优于其他方法。其次,关于将这些学到的表示迁移到目标任务的最有效方法尚无共识。现有技术涉及将任务特定的更改应用于模型架构、使用复杂的学习方案和添加辅助学习目标的组合。
这些不确定性使得为语言处理开发有效的半监督学习方法变得困难。
万物皆可Embedding,从当年的word embedding发展到everything embedding.
在这篇论文中,作者探讨了一种结合无监督预训练和监督微调的半监督方法,用于语言理解任务。目标是学习一种通用表示,使其在广泛的任务中只需少量适应即可迁移。假设有大量无标签文本语料库和几个带有手动标注训练样本的数据集(目标任务)。该设置不要求目标任务与无标签语料库处于相同领域。采用两阶段训练过程。首先,在无标签数据上使用语言建模目标来学习神经网络模型的初始参数。然后,使用相应的监督目标将这些参数调整到目标任务。
**在模型架构方面,作者使用了Transformer,它已经在各种任务上表现出强大的性能,如机器翻译、文档生成和句法分析。**与循环网络等替代方案相比,这种模型选择为处理文本中的长期依赖关系提供了更结构化的内存,从而在不同任务上实现了强大的迁移性能。在迁移过程中,作者利用了来自遍历式方法的任务特定输入适应,这种方法将结构化文本输入作为一个连续的标记序列进行处理。正如实验中所展示的,这些适应使得在对预训练模型的架构进行最少更改的情况下进行有效的微调。
作者在四类语言理解任务上评估了这种方法:**自然语言推理、问答、语义相似度和文本分类。**这个通用的任务无关模型胜过了使用针对每个任务特别定制的架构的判别式训练模型,显著提高了9个任务中的12个任务的最先进水平。例如,作者在常识推理(Stories Cloze Test)上取得了8.9%的绝对提高,问答(RACE)上为5.7%,文本蕴含(MultiNLI)上为1.5%,以及最近引入的GLUE多任务基准上为5.5%。此外,作者还在四个不同设置中分析了预训练模型的零样本行为,并展示了该模型为下游任务获取了有用的语言知识。
这项工作大致属于自然语言处理(NLP)的半监督学习范畴。这一范式引起了极大的关注,并应用于诸如序列标注[24, 33, 57]或文本分类[41, 70]等任务。最早的方法使用无标签数据计算词级或短语级统计量,然后将其作为监督模型中的特征[33]。在过去的几年里,研究人员已经证明了使用无标签语料库训练的词嵌入[11, 39, 42]来提高各种任务性能的好处[8, 11, 26, 45]。然而,这些方法主要传输词级信息,而我们的目标是捕捉更高层次的语义。
最近的方法已经研究了如何从无标签数据中学习和利用超过词级别的语义。可以使用无标签语料库训练的短语级或句子级嵌入已经被用于将文本编码为适合各种目标任务的向量表示[28, 32, 1, 36, 22, 12, 56, 31]。这些方法关注于从无标签数据中学习和利用更丰富的语义信息,以便更好地应对不同的自然语言理解任务。
无监督预训练是半监督学习的一个特例,目标是找到一个良好的初始化点,而不是修改监督学习目标。早期的工作探讨了该技术在图像分类[20, 49, 63]和回归任务[3]中的应用。随后的研究[15]证明了预训练作为一种正则化方案,能够在深度神经网络中实现更好的泛化。在最近的工作中,该方法已被用于帮助训练各种任务的深度神经网络,如图像分类[69]、语音识别[68]、实体消歧[17]和机器翻译[48]。
与我们的工作最接近的一类方法涉及使用语言建模目标预训练神经网络,然后在目标任务上进行监督微调。Dai等人[13]和Howard和Ruder[21]遵循这种方法来改进文本分类。然而,尽管预训练阶段有助于捕捉一些语言信息,但他们使用的LSTM模型限制了其在短范围内的预测能力。相比之下,我们选择的Transformer网络使我们能够捕捉到更长范围的语言结构,正如我们的实验所示。此外,我们还证明了我们的模型在更广泛的任务范围内的有效性,包括自然语言推理、释义检测和故事完成。其他方法[43, 44, 38]在训练目标任务的监督模型时,使用预训练的语言或机器翻译模型的隐藏表示作为辅助特征。这涉及到每个独立目标任务大量的新参数,而在迁移过程中,我们对模型架构的更改最少。
添加辅助无监督训练目标是半监督学习的另一种形式。
Collobert和Weston [10]的早期工作使用了各种辅助NLP任务,如词性标注、组块、命名实体识别和语言建模,以改进语义角色标注。
更近期,Rei [50]在其目标任务目标中添加了一个辅助性的语言建模目标,并在序列标注任务上展示了性能提升。
我们的实验也使用了一个辅助目标,但正如我们展示的,无监督预训练已经学到了与目标任务相关的若干语言方面。
我们的训练过程包括两个阶段。第一阶段是在大量文本语料库上学习一个高容量的语言模型。接下来是微调阶段,我们使用标注数据将模型适应到判别任务。
给定一个无监督的语料库 U = u 1 , . . . , u n U = {u_1, . . . , u_n} U=u1,...,un,我们使用标准的语言建模目标来最大化以下似然:
L 1 ( U ) = Σ i l o g P ( u i ∣ u i − k , . . . , u i − 1 ; Θ ) ( 1 ) L_1(U) = Σ_i log P(u_i | u_{i-k}, . . . , u_{i-1}; Θ) (1) L1(U)=ΣilogP(ui∣ui−k,...,ui−1;Θ)(1)
其中k是上下文窗口的大小,条件概率P使用参数为Θ的神经网络建模。这些参数使用随机梯度下降[51]进行训练。
在我们的实验中,我们使用了多层Transformer解码器[34]作为语言模型,这是Transformer[62]的一种变体。该模型在输入上下文tokens上应用多头自注意力操作,然后通过逐位置前馈层产生目标tokens的输出分布:
h 0 = U W e + W p h l = t r a n s f o r m e r b l o c k ( h l − 1 ) ∀ i ∈ [ 1 , n ] P ( u ) = s o f t m a x ( h n W T e ) ( 2 ) h0 = UW_e + W_p \\ hl = transformer_block(h_{l-1})∀i ∈ [1, n] \\ P(u) = softmax(h_nW{^T}_e) (2) h0=UWe+Wphl=transformerblock(hl−1)∀i∈[1,n]P(u)=softmax(hnWTe)(2)
其中 U = ( u − k , . . . , u − 1 ) U = (u_{-k}, . . . , u_{-1}) U=(u−k,...,u−1)是tokens的上下文向量,n是层数, W e W_e We是token嵌入矩阵, W p W_p Wp是位置嵌入矩阵。
在使用等式1中的目标训练模型后,我们将参数适应到监督目标任务。
我们假设一个标记数据集C,其中每个实例包括一系列输入tokens, x 1 , . . . , x m x^1, . . . , x^m x1,...,xm,以及一个标签y。输入通过我们预训练的模型,获得最后一个Transformer block的激活 h l m h^m_l hlm,然后输入到一个添加的线性输出层中,参数为 W y W_y Wy以预测y:
P ( y ∣ x 1 , . . . , x m ) = s o f t m a x ( h l m W y ) . ( 3 ) P(y|x^1, . . . , x^m) = softmax(h^m_l W_y). (3) P(y∣x1,...,xm)=softmax(hlmWy).(3)
这给我们以下最大化的目标:
L 2 ( C ) = Σ ( x , y ) l o g P ( y ∣ x 1 , . . . , x m ) . ( 4 ) L_2(C) = Σ_{(x,y)} log P(y|x^1, . . . , x^m). (4) L2(C)=Σ(x,y)logP(y∣x1,...,xm).(4)
我们还发现,将语言建模作为微调的辅助目标有助于学习,因为它
(a)改善了监督模型的泛化能力,以及
(b)加速了收敛。
这与之前的工作[50, 43]一致,他们也观察到了这样一个辅助目标的性能提升。具体来说,我们优化以下目标(权重λ):
L 3 ( C ) = L 2 ( C ) + λ ∗ L 1 ( C ) ( 5 ) L_3(C) = L_2(C) + λ * L_1(C) (5) L3(C)=L2(C)+λ∗L1(C)(5)
总的来说,在微调过程中,我们需要的额外参数只有 W y W_y Wy和分隔符tokens的嵌入(在第3.3节中描述)。
图1:(左)本文中使用的Transformer架构和训练目标。 (右)对不同任务进行微调的输入转换。我们将所有结构化输入转换为token序列,以便由我们的预训练模型处理,然后接一个线性+softmax层。
这个描述说明了作者在实验中使用的Transformer架构和训练目标,以及对不同任务进行微调时的输入转换方法。为了便于预训练模型处理,作者将所有结构化输入(例如句子、段落或其他文本单元)转换为token序列。在预训练模型处理这些token序列后,输出会经过一个线性+softmax层来进行任务特定的预测。这样的设计允许模型在不同任务之间进行有效的迁移学习,并最小化对模型架构的更改。
对于某些任务,如文本分类,我们可以按照上述方法直接对模型进行微调。
然而,某些其他任务,如问题回答或文本蕴含,具有结构化输入,如有序句子对或由文档、问题和答案组成的三元组。由于我们的预训练模型是在连续的文本序列上训练的,我们需要对这些任务进行一些修改。
以前的工作提出了在传递表示之上学习特定任务的架构[44]。这种方法重新引入了大量任务特定的定制,并且没有为这些附加架构组件使用迁移学习。相反,我们使用遍历式方法[52],将结构化输入转换为预训练模型可以处理的有序序列。这些输入转换允许我们避免在任务之间对架构进行大量更改。以下是这些输入转换的简要说明,图1提供了一个直观的示例。所有转换都包括添加随机初始化的开始和结束标记 ( < s > , < e > ) (, (<s>,<e>)。
文本蕴含:对于蕴含任务,我们将前提p和假设h的token序列连接起来,并在中间加入一个分隔符token($)。
相似性:对于相似性任务,比较的两个句子之间没有固有的顺序。为了反映这一点,我们修改输入序列,使其包含两种可能的句子顺序(中间用分隔符隔开),并独立处理每个序列以产生两个序列表示 h l m h^m_l hlm,在输入线性输出层之前按元素相加。
问题回答和常识推理:对于这些任务,我们得到一个上下文文档 z z z、一个问题 q q q和一组可能的答案 a k {a_k} ak。我们将文档上下文、问题和每个可能的答案连接起来,中间加入一个分隔符token,得到$[z; q; $; a_k]$。我们的模型独立处理每个序列,然后通过softmax层进行归一化,生成可能答案的输出分布。
未完,待续。。。
Radford A, Narasimhan K, Salimans T, et al. Improving language understanding by generative pre-training[J]. 2018.