1 摘要
自然语理解包括文本蕴含、问题回答、语义相似性评估和文档分类等一系列多样化的任务。尽管大量未标注的文本语料库很丰富,但用于学习这些特定任务的标注数据却很稀缺,这使得基于区分性训练的模型难以充分发挥作用。我们展示了通过在多样化的未标注文本语料库上对语言模型进行生成式预训练,随后对每个特定任务进行区分性微调,可以实现这些任务的大幅度改进。与以往的方法不同,我们在微调过程中使用了任务感知的输入转换,以实现有效的迁移,同时几乎不需要改变模型架构。我们在自然语言理解的广泛基准测试上证明了我们方法的有效性。我们的通用任务不可知模型在为每个任务特别设计的区分性训练模型上表现出了优越性,显著提高了在所研究的12个任务中9个任务的最新水平。例如,我们在常识推理(故事闭环测试)上实现了8.9%的绝对改进,在问题回答(RACE)上实现了5.7%的改进,在文本蕴含(MultiNLI)上实现了1.5%的改进。
我的理解
简单来说,自然语言领域存在大量的未标注文本,如网上的新闻,歌词等,由于缺乏标注,一些有监督模型无用武之地。本文提出先设计一种精妙的预训练方法,在自然语言领域语料库上进行预训练,然后再针对下游任务进行有监督微调,在许多自然语言处理任务上都取得重大改进。
引言
从原始文本中有效学习的能力对于减轻自然语言处理(NLP)中对监督学习依赖至关重要。大多数深度学习方法需要大量手工标注的数据,这限制了它们在许多缺乏注释资源的领域中的应用性。在这些情况下,能够利用未标注数据中的语言信息的模型提供了一种宝贵的替代方案,即收集更多的信息,这可能既耗时又昂贵。此外,即使在可获得大量监督的情况下,以无监督的方式学习良好的表示也可以提供显著的性能提升。到目前为止,最有力的证据是预训练词嵌入的广泛使用,以改善在一系列NLP任务上的性能。
我的理解
大多数深度学习方法需要手工标注的数据,而很多领域是缺乏标注数据的。因此如果能利用无标签文本中固有的语义信息和结构信息,就能充分利用这些领域闲置的无标签语料。此外,及时打过标签的数据是可用的,预训练词嵌入技术也证明预训练能够有效改善nlp任务的性能,因此在有监督数据比较充沛的情况下,仍然有必要进行预训练。
利用未标记文本中超过单词级别的信息是具有挑战性的,原因主要有两个。首先,目前尚不清楚哪种优化目标在学习对转移有用的文本表示方面最为有效。近期的研究探讨了各种目标,如语言建模[44]、机器翻译[38]和话语连贯性[22],每种方法在不同任务上都有超越其他方法的表现。第二,关于如何将这些学到的表示有效转移到目标任务上,目前还没有共识。现有技术涉及结合对模型架构进行特定于任务的改变[43, 44]、使用复杂的学习方案[21]以及添加辅助学习目标[50]。这些不确定性使得开发有效的半监督学习方法用于语言处理变得困难。
我的理解
因为第一,现在学界对于使用哪种优化目标能够更好地学习到一种有利于迁移的文本表示,尚未达成共识,各种迁移方法在各自的领域都取得较好的性能。第二,倘若学习一种有效的表示,怎么迁移到目标任务上,也未达成共识,已知就有该模型架构,使用复杂的学习方案,以及添加额外的学习目标三种。种种不确定性让开发有效的半监督学习方法变得困难。
在这篇论文中,我们探索了一种半监督语言理解任务的方法,该方法结合了无监督预训练和有监督微调。我们的目标是学习一种通用表示,这种表示能够以很小的适应性转移到广泛的任务上。我们假设可以访问大量的未标记文本和几个包含手工标注训练样例的数据集(目标任务)。我们的设置不要求这些目标任务与未标记语料库在同一领域内。我们采用了两阶段训练过程。首先,我们使用语言建模目标在未标记数据上学习神经网络模型的初始参数。随后,我们使用相应的有监督目标将这些参数适应到目标任务上。
我的理解
本文的目标是在存在大量未标注语料的A领域数据集上进行预训练,学习到网络的初始参数,然后使用有监督目标将参数适应到目标任务。存在两个主要矛盾,第一个矛盾是A领域和B领域语料数量的对比矛盾,A上的无标注语料是海量的,而B上的有标注语料可能就寥寥几个,但是B语料都是人类标注的高质量语料(目标任务);第二个主要矛盾是A和B的领域反差。A的语料库虽然是海量的,但是领域是狭窄的。在一个狭窄领域的语料上进行预训练,然后迁移到广泛存在的各种领域下游任务,进行迁移学习,体现了generative pre-training的强大泛化性。
在我们的模型架构中,我们使用了变压器(Transformer)[62],该模型在各种任务上表现出了强大的性能,如机器翻译[62]、文档生成[34]和句法解析[29]。与循环网络等替代方案相比,这种模型选择为我们提供了更结构化的记忆,以处理文本中的长期依赖关系,从而在不同任务中实现了强大的转移性能。在转移过程中,我们利用了从遍历式方法[52]派生的特定于任务的输入适应,这些方法将结构化文本输入作为一个连续的令牌序列来处理。正如我们在实验中所展示的,这些适应使我们能够以最小的对预训练模型架构的改动有效地进行微调。
我们在四种语言理解任务上评估了我们的方法------自然语言推断、问答、语义相似性和文本分类。我们的通用任务不可知模型超越了采用为每项任务特别定制的架构的判别式训练模型,在所研究的12项任务中的9项上显著改进了现有的最佳性能。例如,我们在常识推理(故事闭合测试)[40]上实现了8.9%的绝对改进,在问答(RACE)[30]上实现了5.7%的改进,在文本蕴含(MultiNLI)[66]上实现了1.5%的改进,在最近引入的GLUE多任务基准测试[64]上实现了5.5%的改进。我们还分析了预训练模型在四种不同设置下的零样本行为,并证明它获得了对下游任务有用的语言知识。
2 相关工作
2.1 NLP的半监督学习
我们的工作广泛地属于自然语言的半监督学习范畴。这一范式引起了显著的兴趣,应用于任务如序列标注[24, 33, 57]或文本分类[41, 70]。最早的方法使用未标记数据计算词级或短语级统计信息,然后将其用作有监督模型中的特征[33]。在过去几年中,研究者已经展示了使用在未标记语料库上训练的词嵌入[11, 39, 42]来改善多种任务性能的好处[8, 11, 26, 45]。然而,这些方法主要转移词级信息,而我们旨在捕获更高层次的语义。最近的方法已经探索了从未标记数据学习和利用超过词级语义的方法。可以使用未标记语料库训练的短语级或句子级嵌入,已被用于将文本编码为适合各种目标任务的向量表示[28, 32, 1, 36, 22, 12, 56, 31]。
之前学界利用未标注数据,主要是从次级别进行的。最近的一些研究探索捕获更高层次的语义,即从短语级别或者句子级别李对文本进行编码。
2.2 无监督预训练
无监督预训练是半监督学习的一个特例,其目标是找到一个好的初始化点,而不是修改有监督学习目标。早期工作探索了在图像分类[20, 49, 63]和回归任务[3]中使用这种技术。随后的研究[15]表明,预训练作为一种正则化方案,使得深度神经网络能够实现更好的泛化。在最近的工作中,这种方法被用于帮助在各种任务上训练深度神经网络,如图像分类[69]、语音识别[68]、实体消歧[17]和机器翻译[48]。与我们工作最接近的研究线是使用语言建模目标进行神经网络的预训练,然后在有监督的目标任务上进行微调。Dai等人[13]和Howard及Ruder[21]遵循这种方法以改善文本分类。然而,尽管预训练阶段有助于捕获一些语言信息,他们使用LSTM模型的做法限制了它们的预测能力在短范围内。相比之下,我们选择的变压器网络使我们能够捕获更长范围的语言结构,正如我们在实验中所展示的。此外,我们还展示了我们的模型在包括自然语言推断、释义检测和故事完成等更广泛任务范围上的有效性。其他方法[43, 44, 38]在目标任务上训练有监督模型时,使用来自预训练的语言或机器翻译模型的隐藏表示作为辅助特征。这涉及到为每个单独的目标任务引入大量的新参数,而我们在转移过程中对模型架构的改变最小。
2.3 辅助训练目标
添加辅助无监督训练目标是半监督学习的另一种形式。Collobert和Weston[10]的早期工作使用了各种辅助NLP任务,如词性标注、分块、命名实体识别和语言建模,以改善语义角色标注。最近,Rei[50]在他们的目标任务目标中添加了一个辅助语言建模目标,并在序列标注任务上展示了性能增益。我们的实验也使用了一个辅助目标,但正如我们所展示的,无监督预训练已经学习了几个与目标任务相关的语言方面。
3 框架
我们的训练程序包含两个阶段。第一个阶段是在大量文本语料库上学习一个高容量的语言模型。接着是一个微调阶段,在这个阶段我们使用标注数据将模型适应到一个判别性任务上。
3.1 无监督预训练
可以看到,GPT的第一个预训练任务还是成语接龙,即根据历史k个词,去预测下一个词,其中k为上下文窗口。利用该预训练任务去使用SGD优化模型的参数。
首先,为了获取初始嵌入作为transformer的输入,首先对上文的token向量,做一个查表操作,获取每个token的embedding。为了考虑token之间的位置关系,还在token表示基础上,加了一个位置表示矩阵,获取位置感知的token表示。
然后将位置感知的token表示送入n层transformer块中,获取上下文感知的token表示。最后做了一个逆查表操作,判断词典中哪个token的概率值最大,将其作为最终目标token的输出表示。
3.2 supervised fine-tuning
有监督微调。使用公式1中的目标函数,即下面这个成语接龙式的公式完成预训练后,应该将参数适配到有监督的目标任务上。
假设数据集是长这个样子的,每一个实例子或者说每一行是输入token的序列x1到xn,以及一个标签y,依然采用成语接龙的方式,将标签作为下一个词进行预测,可以得到损失L2。可以看出L2和L1基本类似。微调阶段和预训练阶段唯一的差别就是,多了一个做线性映射的Wy和对分隔符的嵌入表示。
以这种方式,就可以将所有的自然语言处理任务转化为序列到序列问题。将所有任务的输入转化为token序列,对输出进行分类。
如上图所示,所有的自然语言处理任务都可以转化为序列生成任务,如上图所示。
在特定任务中,如文本分类,我们可以直接按上述方法微调模型。然而,对于像问答或文本蕴含这样具有结构化输入的任务(例如,有序的句子对或文档、问题和答案的三元组),由于我们的预训练模型是在连续的文本序列上训练的,我们需要对其进行一些修改以适应这些任务。以前的工作提出了在转移的表示上学习特定任务的架构,但这种方法重新引入了大量任务特定的定制,且没有利用转移学习对这些额外的架构组件。相反,我们采用了一种遍历式方法,将结构化输入转换成预训练模型可以处理的有序序列。这些输入转换使我们避免了跨任务进行广泛的架构更改。
- 文本蕴含:对于蕴含任务,我们将前提p和假设h的令牌序列与一个分隔符($)连接起来。
- 相似性:对于相似性任务,由于比较的两个句子没有固有的顺序,我们修改输入序列包含两个可能的句子排序(之间有分隔符),并独立处理每个序列以产生两个序列表示,这两个表示在送入线性输出层之前进行元素级加和。
- 问答与常识推理:对于这些任务,给定一个上下文文档z、一个问题q和一组可能的答案{ak}。我们将文档上下文和问题与每个可能的答案连接起来,在它们之间添加一个分隔符得到[z; q; $; ak]。每个序列都独立地使用我们的模型处理,然后通过softmax层归一化,以产生可能答案的输出分布。
所有转换都包括添加随机初始化的开始和结束标记(〈s〉, 〈e〉)。此外,文章中还提供了这些输入转换的视觉说明(图1)。