【深度学习】GPT-2:Language Models are Unsupervised Multitask Learners

Posted by ShawnD on June 4, 2021

Paper

Abstract

自然语言处理任务,如问答、机器翻译、阅读理解和摘要,通常是通过任务特定数据集的监督学习来完成的。我们展示了语言模型在没有任何明确监督的情况下开始学习这些任务, 在一个名为WebText的新数据集上。当以文档加问题为条件时,语言模型生成的答案在CoQA数据集上达到55 F1 - 在不使用127000+个训练样本情况下, 媲美或超过4个基线系统中的3个。语言模型的容量对于 zero-shot 任务迁移的成功是至关重要的,增加它可以在任务间以对数线性的方式提高性能。我们最大的模型,GPT-2,是一个1.5B参数的transformer,它在 zero-shot 设置下,在8个测试语言建模数据集中的7个上实现了最先进的结果,但对WebText仍然欠拟合。 从模型中采样反映了这些改进,包含连贯的文本段落。这些发现为构建语言处理系统提供了一条有前景的途径,该系统从自然发生的演示中学习执行任务。

Introduction

机器学习系统通过结合大量的数据集, 高容量的模型和监督学习训练可以表现地非常出色。但是这些系统对数据的分布非常敏感, 并且是基于特定任务的。现在的系统更像是一个单一方面的专家, 而不是一个有能力的通才。我们希望转向可以执行许多任务的更通用的系统——最终不需要为每个任务手动创建和标记训练数据集。

创建ML系统的主要方法是收集一个训练实例数据集,该数据集展示了所需任务的正确行为,训练系统模仿这些行为,然后在独立同分布(IID)实例上测试其性能。这有助于在单一方面上取得进步。 但是字幕模型、阅读理解系统和图像分类器在多种多样输入的可能性和多样性方面的不稳定表现突出了这种方法的一些缺点。

我们怀疑,单一领域数据集上单一任务训练是导致当前系统缺乏泛化性的主要原因。在当前体系结构下实现健壮系统的过程可能需要在广泛的领域和任务上进行训练和性能度量。最近,有人提出了一些基准,如GLUE和decaNLP来开始研究这个问题。

Multitask learning是提高通用性能的一个很有前景的框架。然而,NLP中的多任务训练还处于起步阶段。最近的工作报告显示,成绩略有提高,迄今为止最好的两项工作分别训练了10对和17对(dataset, objective)。从元学习的角度来看,每个(dataset, objective)对是从数据集和目标的分布中抽样的单个训练样本。目前的ML系统需要成百上千的样本来归纳出具有良好泛化能力的函数。这表明多任务训练需要同样多的有效训练对来实现其对当前方法的承诺。要继续将数据集扩大规模或者设计objective, 以当前的技术是非常困难的。这激发了探索执行多任务学习的额外设置。

当前在语言任务上表现最好的系统结合了预训练和监督微调。这种方法有很长的历史,并且有更灵活的迁移形式的趋势。首先,将词向量作为输入到特定任务的体系结构中,然后将循环网络的上下文表征进行迁移,最近的工作表明,不再需要特定于任务的结构,并且迁移许多自注意块就足够了。

这些方法执行任务仍然需要监督训练。 当只有很少或没有监督的数据可用时,另一种工作已经证明了语言模型可以执行特定任务,如常识推理和情感分析。

在本文中,我们将这两条工作线连接起来,并延续更通用的迁移方法的趋势。我们展示了语言模型可以在 zero-shot 设置中执行下游任务——无需任何参数或架构修改。我们通过突出语言模型在 zero-shot 环境下执行各种任务的能力来展示这种方法的潜力。我们这些任务上取得了有前景的、有竞争力的、最先进的成果。

Approach

我们方法的核心是语言建模。语言建模通常是从一组样本 $(x_1, x_2, …, x_n)$(每个样本由可变长度的符号序列 $(s_1, s_2, …, s_n)$ 组成)中进行无监督分布估计。 由于语言具有自然的序列顺序,通常将符号上的联合概率分解为条件概率的乘积:

\[p(x) = \prod_{i=1}^n p(s_n \mid s_1, ..., s_{n-1})\]

这种方法允许对 $p(x)$ 和 任意 $p(s_{n-k}, …, s_n \mid s_1, …, s_{n-k-1})$ 形式的条件概率 进行易处理的采样和估计。近年来,可以计算这些条件概率的模型的表征能力有了显着改进,例如像 Transformer 这样的自注意力架构。

学习执行单个任务可以在概率框架中表示为估计条件分布 $p(\text{output}|\text{input})$。由于一个通用系统应该能够执行许多不同的任务,即使对于相同的输入,它不仅应该以输入为条件,还应以要执行的任务为条件。也就是说,它的模型应该是 $p(\text{output} \mid \text{input, task})$。在多任务和元学习环境中,这已经被各种形式化了。任务调节通常在体系结构层次上实现,比如特定于任务的编码器和解码器,或者在算法层次上实现,比如MAML的内环和外环优化框架。但是语言提供了一种灵活的方式来指定任务、输入和输出,所有这些都是一系列符号。比如, 一个翻译训练样本可以被写作序列 $(\text{translate to french, english text, french text})$。又比如, 一个阅读理解训练样本可以写作 $(\text{answer the question, document, question, answer})$。McCann等人(2018年)证明,可以训练一个单一的模型,即MQAN,在样本上以这种形式推断和执行许多不同任务。

原则上,语言建模也能够学习 McCann 等人(2018)的任务,而无需明确监督哪些符号是要预测的输出。由于监督目标与无监督目标相同,只是在序列的一个子集上进行评估,因此无监督目标的全局最小值也是监督目标的全局最小值。在这个稍微有点玩具化的环境中,在(Sutskever等人,2015年)中讨论的将密度估计作为原则性训练目标的问题是次要的。问题是我们是否能够在实践中优化无监督目标,使其收敛。初步实验证实,足够大的语言模型能够在这种设置下进行多任务学习,但学习速度比显式监督方法慢得多。

Weston(2016)认为,从上述良好的设置到 “language in the wild” 的混乱,这是一大步,因为需要开发能够直接从自然语言学习的系统,并证明了概念——通过使用教师输出的前向预测,在没有奖励信号的情况下学习QA任务。尽管对话是一种吸引人的方式,我们担心它还是太严格了。互联网包含了大量的信息,这些信息是被动的,不需要交互式的交流。我们认为,具有足够能力的语言模型将开始学习推断和执行自然语言序列中展示的任务,以便更好地预测它们,而不管它们的获取方法。如果语言模型能够做到这一点,它实际上就是在执行无监督的多任务学习。 我们通过分析语言模型在各种任务的 zero-shot 设置中的性能来测试是否是这种情况。

Training Dataset

大多数先前的工作在单个文本域上训练语言模型,例如新闻文章维基百科或小说书籍。我们的方法鼓励构建尽可能大和多样化的数据集,以便在尽可能多的领域和上下文中收集任务的自然语言演示。

多样化且几乎无限的文本的一个有前景的来源是网络抓取,例如 Common Crawl。虽然这些文件比当前的语言建模数据集大很多数量级,但它们存在重大的数据质量问题。Trinh & Le (2018) 在他们关于常识推理的工作中使用了爬虫,但指出大量文档 “其内容大部分是不可理解的”。Trinh & Le (2018) 的最佳结果是使用 Common Crawl 的一个小子样本获得的,该子样本仅包含与其目标数据集 Winograd Schema Challenge 最相似的文档。虽然这是提高特定任务性能的实用方法,但我们希望避免提前对要执行的任务做出假设。

进而, 我们创建了一个新的网页抓取,强调文档质量。为了做到这一点,我们只需要抓取已经由人类过滤的网页。手动过滤一个完整的网络搜索是非常昂贵的,因此我们从Reddit(一个社交媒体平台)搜索了所有的出站链接。这可以被认为是其他用户是否发现链接有趣、有教育意义或只是有趣的启发式指标。

生成的数据集 WebText 包含这 4500 万个链接的文本子集。为了从 HTML 响应中提取文本,我们结合使用了 Dragnet (Peters & Lecocq, 2013) 和 Newspaper 内容提取器。本文中呈现的所有结果均使用 WebText 的初步版本,其中不包括 2017 年 12 月之后创建的链接,并且在重复数据删除和一些基于启发式的清理之后包含略超过 800 万个文档,总共 40 GB 的文本。我们从 WebText 中删除了所有 Wikipedia 文档,因为它是其他数据集的通用数据源,并且由于训练数据与测试评估任务重叠而可能使分析复杂化。

Input Representation

通常, 一个语言模型 (LM) 应该能够计算(并生成)任何字符串的概率。当前的大规模 LM 包括预处理步骤,例如 lower-casing, tokenization 和 out-of-vocabulary,这些标记限制了可建模字符串的空间。如Gillick等人(2015)的工作所示,虽然将Unicode字符串作为UTF-8字节序列进行处理可以很好地满足这一要求,但在10亿字基准测试等大规模数据集上,当前 byte-level LMs 与 word-level LMs没有竞争力((Al-Rfou等人,2018)。

Byte Pair Encoding(BPE)(Sennrich et al.,2015)是 character 和 word level 语言建模之间的一个实际中间地带,它有效地在频繁符号序列的 character level 输入和不频繁符号序列的 symbol level 输入之间进行插值。尽管它的名字是这样,相关BPE实现通常在Unicode code points上操作,而不是字节序列。这些实现需要包含Unicode符号的全部空间,以便对所有Unicode字符串进行建模。这将导致在添加任何 multi-symbo tokens 之前,基础词汇表超过130000。与BPE中经常使用的 32000 到 64000 个 tokens 词汇表相比,这是非常大的。相比之下,BPE 的 byte-level 版本只需要大小为 256 的基本词汇表。然而,由于 BPE 使用基于贪婪频率的启发式来构建 tokens 词汇表,直接将 BPE 应用于 byte 序列会导致次优合并。我们观察到 BPE 包括许多版本的常见词,例如 dog,因为它们出现在许多变体中,例如 dog. dog! dog? 。这导致有限词汇槽和模型容量的次优分配。为了避免这种情况,我们阻止BPE为任何 byte 序列 跨 character 类别进行合并。我们为空格添加了一个例外,这显着提高了压缩效率,同时在 multiple vocab tokens 中只添加了最少的单词碎片。

这种输入表征允许我们将 word-level LMs 的经验优势与 byte-level 方法的通用性结合起来。由于我们的方法可以为任何 Unicode 字符串分配概率,这允许我们在任何数据集上评估我们的 LM,而不管pre-processing、tokenization 或 vocab size。

Model

我们为 LM 使用基于 Transformer(Vaswani 等,2017)的架构。 该模型在很大程度上遵循 OpenAI GPT 模型(Radford 等人,2018 年)的细节,并进行了一些修改。Layer normalization(Ba et al., 2016)被移到每个子块的输入,类似于pre-activation residual network(He et al., 2016),并在最终的 self-attention block 之后添加了一个额外的 layer normalization。使用了一种改进的初始化方法,该方法考虑了随模型深度的变化 residual path 上的累积。我们在初始化时将residual layers 的权重缩放 $1 / \sqrt{N}$,其中 $N$ 是 residual layers 的数量。词汇量扩大到50257。我们还将上下文大小从512增加到1024个tokens,并使用更大的batchsize 512。

Experiments

我们训练并测试了四个具有近似对数大小的LMs。结构的总结如表2所示。 最小模型相当于原始GPT,第二小模型相当于BERT的最大模型(Devlin et al.,2018)。我们最大的模型,我们称之为GPT-2,其参数比GPT多一个数量级。每个模型的学习率都是手动调整的,以在 5% 的 WebText 保留样本上获得最佳的表现。所有模型仍然没有完全拟合 Web-Text,并且在提供更多训练时间的情况下,表现仍然有所提高。

Language Modeling

作为 zero-shot 任务迁移的第一步,我们感兴趣的是了解WebText LM如何在 zero-shot 域迁移时执行他们训练的主要任务-语言建模。由于我们的模型在 byte level 上运行,不需要lossy pre-processing 或者 tokenization,因此我们可以在任何语言模型基准上对其进行评估。语言建模数据集的结果通常以每个规范预测单元的平均负对数概率的缩放或指数形式报告,通常是一个字符、一个字节或一个字。我们通过根据 WebText LM 计算数据集的对数概率并除以规范单元的数量来评估相同的数量。对于许多这样的数据集, WebText LMs 测试明显超出分布,不得不预测standardized text, tokenization artifacts比如disconnected punctuation and contractions, shuffled sentences, 甚至 string <UNK> , 这些很少在WebText数据集中出现, 在400亿字节中仅出现26次。我们在表3中报告了我们的主要结果, 使用了invertible de-tokenizers, 它尽可能多地移除了这些 tokenization / pre-processing artifact。由于这些 de-tokenizers 是可逆的,我们仍然可以计算数据集的对数概率,并且可以将它们看作域自适应的一种简单形式。 我们观察到使用这些 de-tokenizers 对 GPT-2 的表现从 2.5 提高到了 5。

WebText LM 在域和数据集之间迁移良好,在 zero-shot 设置中 8 个数据集中的 7 个改进了最新技术。在 Penn Treebank 和 WikiText-2 等只有 1 到 200 万个训练 tokens 的小型数据集上有很大的改进。在LAMBADA (Paperno et al., 2016) 和 Children’s Book Test (Hill et al., 2015) 数据集上也有很大提升, 它们是为了测量长程关系建立的数据集。我们的模型仍然比之前在One Billion Word Benchmark (Chelba et al., 2013)上的工作差很多。这可能是由于它既是最大的数据集又具有一些最具破坏性的预处理—— 1BW’s sentence level shuffling 删除了所有的长程结构。

Children’s Book Test

Children’s Book Test (CBT) (Hill et al., 2015) 旨在检查 LM 在不同类别的单词上的表现:命名实体、名词、动词和介词。CBT 不是将 perplexity 报告为评估指标,而是在自动构建的完形填空测试中报告准确性,该测试的任务是预测省略单词的 10 种可能选择中的哪一种是正确的。按照本文介绍的LM方法,我们根据LM计算出每个选择的概率和及以该选择为条件的句子的其余部分,并预测出概率最大的一个。如图 2 所示,随着模型大小的增加,性能稳步提高,并在此测试中缩小了与人类表现的大部分差距。数据重叠分析显示,其中一本 CBT 测试集书籍, Rudyard Kipling 的 The Jungle Book 位于 WebText 中,因此我们报告了没有显着重叠的验证集的结果。GPT-2 在普通名词上达到了 93.3%,在命名实体上达到了 89.1%。一个 de-tokenizer 用于从CBT中移除PTB风格的 tokenization artifacts。

图2 在 Children’s Book Test 上模型容量的性能。 人类表现来自于 Bajgar et al(2016), 而不是原始论文中低得多的估计。

Generalization vs Memorization

最近在计算机视觉方面的工作表明,常见的图像数据集包含大量近乎重复的图像。例如,CIFAR-10 在训练图像和测试图像之间有 3.3% 的重叠(Barz & Denzler,2019)。这导致过度报告机器学习系统的泛化性能。随着数据集大小的增加,这个问题变得越来越可能,这表明 WebText 可能会发生类似的现象。因此,重要的是分析训练数据中还出现了多少测试数据。

为了研究这一点, 我们创建了一个叫做 Bloom 过滤器, 它包含 WebText 训练集 tokens 的 8-grams。为了提高召回率,字符串被标准化为仅包含小写字母数字单词,并以单个空格作为分隔符。Bloom过滤器的构造使得FP(False Positive)上限为 $\frac{1}{10^8}$。 我们通过生成 1M 字符串进一步验证了低误报率,过滤器发现其中零。

这项工作的很大一部分是测量在较大数据集上训练的较大语言模型的性能。 这类似于 Jozefowicz 等人 (2016) 的工作,后者在 1 Billion Word Benchmark 上扩展了基于 RNN 的语言模型。Bajgar等人(2016年)也通过在Gutenberg项目中创建更大的训练数据集来补充标准训练数据集,从而改进了 Children’s Book Test 的结果。Hestness等人(2017)对各种深度学习模型的性能如何随着模型容量和数据集大小的函数而变化进行了深入分析。我们的实验表明,虽然任务间的噪音要大得多,但对于目标的子任务来说,类似的趋势仍然存在,并持续到1B+参数区域。

之前已经记录了生成模型中有趣的学习功能,例如 RNN 语言模型中的单元格执行 line-width tracking 和 quote/comment detection Karpathy 等人(2015)。对我们的工作更有启发的是,Liu等人(2018年)观察到,一个被训练生成维基百科文章的模型也学会了在不同语言之间翻译名字。

之前的工作探索了过滤和构建大型网页文本语料库的替代方法,如iWeb语料库(Davies,2018)。

在语言任务的预训练方法方面已经有大量工作。除了 introduction, 中提到的那些之外,GloVe(Pennington 等人,2014 年)将词向量表示学习扩展到所有 Common Crawl。关于文本深度表示学习的一项有影响力的早期工作是 Skip-thought Vectors(Kiros 等人,2015 年)。McCann等人(2017)探讨了使用机器翻译模型中的表征,Howard&Ruder(2018)改进了基于RNN的微调方法(Dai&Le,2015)。(Conneau et al.,2017a)研究了通过自然语言推理模型学习的表征的迁移性能,并(Subramanian et al.,2018)探索了大规模多任务训练。

(Ramachandran 等人,2016 年)证明 seq2seq 模型受益于使用预训练语言模型作为编码器和解码器进行初始化。最近的工作表明,LM 预训练在针对诸如聊天对话和基于对话的问答系统等困难的生成任务进行微调时很有帮助(Wolf 等人,2019)(Dinan 等人,2018 年)。

Discussion

许多研究致力于学习(Hill 等人,2016 年)、理解(Levy 和 Goldberg,2014 年)和批判性评估(Wieting 和 Kiela,2019 年)监督和无监督预训练方法的表征。我们的研究结果表明,无监督任务学习是另一个有希望探索的研究领域。这些发现可能有助于解释针对下游NLP任务的预训练技术的广泛成功,因为我们表明,在极限情况下,这些预训练技术中的一种开始学习直接执行任务,而不需要有监督的适应或修改。

在阅读理解方面,GPT-2的表现在 zero-shot 条件下与有监督的基线具有竞争性。然而,在总结等其他任务上,虽然它在定性地执行任务,但根据定量指标,其性能仍然只是初级的。从实际应用的角度来看,GPT-2的 zero-shot 性能虽然具有一定的启发性,但还远远不能满足实际应用的需要。

我们已经研究了WebText LMs在许多标准NLP任务上的 zero-shot 性能,但是还有许多额外的任务可以评估。毫无疑问,GPT-2在许多实际任务中的性能仍然不比随机的好。即使是在我们评估的常见任务上,例如问答和翻译,语言模型只有在有足够的容量时才开始优于普通的基线。

虽然 zero-shot 性能为GPT-2在许多任务上的潜在性能建立了一个基线,但还不清楚微调的上限在哪里。在某些任务上,GPT-2 的s fully abstractive output 与基于extractive pointer network (Vinyals et al., 2015) 的输出显着不同,后者在许多问答和阅读理解数据集上是目前最先进的。鉴于GPT的微调已经取得了成功,我们计划对decaNLP和GLUE等基准进行微调研究,特别是因为目前还不清楚GPT-2的额外训练数据和容量是否足以克服BERT证明的单向表征的低效性。

Blog(OpenAI)

我们已经训练了一个大规模的无监督语言模型,该模型可以生成连贯的文本段落,在许多语言建模基准上实现了最先进的性能,并在没有 task-specific 训练的情况下执行基本的阅读理解、机器翻译、问答和摘要。

我们的模型被称为GPT-2 (GPT的继承者),它通过简单地预测40GB互联网文本中的下一个单词来训练。由于我们担心该技术的恶意应用程序,我们不会发布训练过的模型。作为一个负责任的信息披露的实验,我们将发布一个小得多的模型供研究人员进行实验,以及一篇技术论文。

GPT-2是一种基于 transformer 的大型语言模型,具有15亿个参数,在800万个网页的数据集上进行了训练。GPT-2的训练目标很简单:在给定某个文本中之前的所有单词的情况下,预测下一个单词。数据集的多样性使得这个简单的目标跨不同领域的许多任务。GPT-2是GPT的直接扩展,具有超过10倍的参数和超过10倍的数据量。

GPT-2显示了一系列广泛的功能,包括生成质量空前的条件生成文本的能力,我们用一个输入来初始化模型,并让它生成一个长的延续。此外,GPT-2在不需要使用这些特定领域的训练数据集的情况下,比在特定领域(如Wikipedia、新闻或书籍)上训练的其他语言模型性能更好。对于像回答问题、阅读理解、总结和翻译这样的语言任务,GPT-2开始从原始文本中学习这些任务,不使用特定任务的训练数据。虽然这些下游任务的得分不是最先进的,但它们表明,如果有足够的(未标记的)数据和计算,这些任务可以从无监督的技术中受益。

Reference

  1. Better Language Models and Their Implications