Language Models are Unsupervised Multitask Learners :语言模型是无监督的多任务学习者

摘要

自然语言处理任务,如问答、机器翻译、阅读理解和摘要,通常通过在特定任务的数据集上进行监督学习来解决。我们展示了语言模型在训练于一个包含数百万网页的新数据集——WebText——时,可以无需任何显式监督就开始学习这些任务。当模型以文档加问题为条件时,生成的答案在CoQA数据集上达到55的F1分数——这匹配甚至超过了4个基线系统中的3个表现,且没有使用超过127,000个训练样本。语言模型的容量对零样本任务迁移的成功至关重要,且随着容量增加,性能在多个任务上呈对数线性提升。我们最大的模型GPT-2拥有15亿参数的Transformer结构,在零样本设置下,在8个测试的语言建模数据集中有7个达到最先进水平,但仍未完全拟合WebText。模型生成的示例反映了这些改进,包含连贯的文本段落。这些发现表明,基于自然出现的示范,构建能自动学习执行任务的语言处理系统是一个有希望的发展方向。

1. 引言

机器学习系统现在通过结合大规模数据集、高容量模型和监督学习,能够在其训练的任务上表现卓越(Krizhevsky等,2012;Sutskever等,2014;Amodei等,2016)。然而,这些系统相对脆弱,对数据分布的细微变化(Recht等,2018)和任务规范的调整(Kirkpatrick等,2017)非常敏感。当前系统更像是狭隘的专家,而非具备广泛能力的通用智能。我们希望朝着能执行多种任务的更通用系统迈进——最终无需为每个任务手动创建和标注训练数据集。

构建机器学习系统的主流方法是收集一组演示期望行为的训练样本,训练系统模仿这些行为,然后在独立且同分布(IID)的保留样本上测试其性能。此方法对打造狭隘专家非常有效。但图像说明模型(Lake等,2017)、阅读理解系统(Jia & Liang,2017)以及图像分类器(Alcorn等,2018)在面对多样输入时的表现不稳定,凸显了此方法的局限。

我们怀疑单任务训练且仅用单一领域数据是当前系统泛化能力不足的主要原因。要取得更稳健的系统进展,可能需要在更广泛的领域和任务上训练并衡量性能。最近已有多个基准被提出,如GLUE(Wang等,2018)和decaNLP(McCann等,2018),以开始研究这一方向。

多任务学习(Caruana,1997)是提升整体性能的有前景的框架,但在自然语言处理领域的多任务训练仍处于初期阶段。近期工作报告了适度的性能提升(Yogatama等,2019),而迄今为止最雄心勃勃的两项工作仅在10和17组(数据集,目标)对上进行训练(McCann等,2018;Bowman等,2018)。从元学习角度看,每一对(数据集,目标)都是从数据集和目标的分布中采样的一个训练样本。当前机器学习系统需要数百甚至数千个样本来归纳出良好泛化的函数。这表明多任务训练也可能需要大量有效的训练对,才能发挥其潜力。用现有技术依靠暴力扩展数据集和目标设计显然困难重重。这促使我们探索更多适合多任务学习的方案。

当前在语言任务上表现最佳的系统,采用预训练加监督微调的组合。这一路径历史悠久,呈现出更灵活的迁移趋势。最初是学习词向量并将其作为任务专用架构的输入(Mikolov等,2013;Collobert等,2011),随后转向迁移循环网络的上下文表示(Dai & Le,2015;Peters等,2018),而近期工作表明任务专用架构已不再必需,仅转移多个自注意力层即可(Radford等,2018;Devlin等,2018)。

在这里插入图片描述

这些方法仍然需要通过监督训练来完成任务。当只有极少或没有监督数据时,另一类工作展示了语言模型在执行特定任务上的潜力,比如常识推理(Schwartz 等,2017)和情感分析(Radford 等,2017)。

在本文中,我们将这两条研究路线结合起来,继续推动更加通用的迁移方法的发展。我们证明了语言模型可以在零样本设置下执行下游任务——无需任何参数或架构的修改。我们通过展示语言模型在零样本设置下执行多种任务的能力,表明该方法具有潜力。根据具体任务,我们取得了有前景的、具竞争力的甚至最先进的结果。

2. 方法

我们方法的核心是语言建模。语言建模通常被定义为对一组样本 (x₁, x₂, …, xₙ) 的无监督分布估计,每个样本由长度可变的符号序列 (s₁, s₂, …, sₙ) 组成。由于语言具有自然的顺序性,通常会将符号的联合概率分解为条件概率的乘积(Jelinek & Mercer, 1980)(Bengio 等,2003):
p ( x ) = ∏ i = 1 n p ( s n ∣ s 1 , . . . , s n − 1 ) ( 1 ) p ( x ) = \prod _ { i = 1 } ^ { n } p ( s _ { n } | s _ { 1 } , . . . , s _ { n - 1 } )\quad(1) p(x)=i=1np(sns1,...,sn1)(1)
这种方法不仅使得从分布 p(x) 中进行采样和估计成为可行,同时也可以估计形式为 p ( s n − k , . . . , s n ∣ s 1 , . . . , s n − k − 1 ) p ( s _ { n - k } , . . . , s _ { n } | s _ { 1 } , . . . , s _ { n - k - 1 } ) p(snk,...,sns1,...,snk1)的条件概率。近年来,能够计算这些条件概率的模型表达能力有了显著提升,例如自注意力架构——Transformer(Vaswani 等,2017)。

学习执行单个任务可以用概率框架表示为估计条件分布 p ( o u t p u t ∣ i n p u t ) p ( o u t p u t | i n p u t ) p(outputinput)。 由于一个通用系统应能执行多种不同任务,即使输入相同,它也应不仅基于输入,还基于需要执行的任务进行条件建模,也就是建模 p ( o u t p u t ∣ i n p u t , t a s k ) p ( o u t p u t | i n p u t , t a s k ) p(outputinput,task)。这在多任务学习和元学习框架中有多种形式的实现。任务条件通常在架构层面实现,如 Kaiser 等(2017)提出的任务特定编码器和解码器,或者在算法层面实现,如 MAML(Finn 等,2017)的内外循环优化框架。但正如 McCann 等(2018)所示,语言提供了一种灵活的方式,将任务、输入和输出都表示为符号序列。例如,一个翻译训练样本可以写成序列(translate to french, english text, french text);同样,一个阅读理解训练样本可以写成(answer the question, document, question, answer)。McCann 等(2018)展示了可以训练一个单一模型 MQAN,基于这类格式推断并执行多种不同任务。

从原则上讲,语言建模也能够学习 McCann 等(2018)中描述的任务,而无需明确监督哪些符号是需要预测的输出。因为监督目标和无监督目标相同,只是监督目标仅在序列的子集上评估,所以无监督目标的全局最小值同时也是监督目标的全局最小值。在这种略显“玩具化”的设置下,Sutskever 等(2015)中对密度估计作为训练目标的担忧得以规避。问题变成我们是否能够在实践中优化无监督目标直至收敛。初步实验确认,足够大的语言模型能够在这种玩具式多任务学习设置下进行学习,但学习速度远慢于明确监督的方法。

尽管从上述良构的设置到“真实语言环境”的复杂性有很大差距,Weston(2016)在对话场景中提出了直接从自然语言中学习的必要性,并展示了一个概念验证——通过预测教师输出实现无奖励信号的问答任务学习。虽然对话方法很有吸引力,我们担心它过于限制性。互联网包含大量被动可用的信息,无需交互通信。我们的推测是,拥有足够容量的语言模型会开始学习推断和执行自然语言序列中展示的任务,以更好地预测它们,无论这些信息的获取方式如何。如果语言模型能够做到这一点,它实际上就是在进行无监督的多任务学习。我们通过分析语言模型在零样本设置下对各种任务的表现来检验这一点。

2.1. 训练数据集

之前的大多数工作都在单一领域的文本上训练语言模型,比如新闻文章(Jozefowicz 等,2016)、维基百科(Merity 等,2016)或小说书籍(Kiros 等,2015)。我们的方法则激励构建尽可能大且多样化的数据集,以收集在尽可能多样化的领域和上下文中自然语言形式的任务演示。

一个有前景的多样且几乎无限制的文本来源是网络爬取的数据,如 Common Crawl。尽管这些数据量比现有语言模型训练集大几个数量级,但它们存在显著的数据质量问题。Trinh & Le(2018)在其常识推理工作中使用了 Common Crawl,但指出其中有大量“内容大部分难以理解”的文档。我们在最初用 Common Crawl 进行实验时也观察到了类似的问题。Trinh & Le(2018)取得的最佳结果是基于对 Common Crawl 的一个小规模子集,该子集仅包含与他们目标数据集——Winograd Schema Challenge 最相似的文档。虽然这是提高特定任务性能的务实做法,但我们希望避免事先对要执行的任务做出假设。
在这里插入图片描述

相反,我们创建了一个新的网络爬取数据集,重点强调文档质量。为此,我们只爬取经过人工筛选/过滤的网页。对整个网络进行人工过滤代价极高,因此作为起点,我们爬取了社交媒体平台 Reddit 上所有获得至少 3 点 karma 的外链。这可以看作是一个启发式指标,用以判断其他用户是否觉得该链接有趣、有教育意义或仅仅是好笑。

得到的数据集名为 WebText,包含了这 4500 万链接中的文本部分。为了从 HTML 响应中提取文本,我们结合使用了 Dragnet(Peters & Lecocq, 2013)和 Newspaper 1 内容提取器。本文中所有的结果均基于 WebText 的初步版本,该版本不包含 2017 年 12 月之后创建的链接,经过去重和一些基于启发式的清理后,包含略超过 800 万篇文档,总计约 40 GB 文本。我们从 WebText 中移除了所有维基百科文档,因为维基百科是其他数据集的常见数据源,可能导致训练数据与测试评估任务存在重叠,进而使分析变得复杂。

2.2 输入表示

通用语言模型(LM)应该能够计算(并生成)任意字符串的概率。当前的大规模语言模型包括预处理步骤,如小写化、分词以及处理未登录词,这些步骤限制了模型可处理字符串的空间。虽然将 Unicode 字符串作为 UTF-8 字节序列处理能够优雅地满足这一需求(如 Gillick 等人(2015)的工作所示),但目前基于字节的语言模型在大型数据集(例如 One Billion Word Benchmark,Al-Rfou 等,2018)上的表现不如基于单词的模型。我们在尝试在 WebText 上训练标准字节级语言模型时也观察到了类似的性能差距。

字节对编码(Byte Pair Encoding,BPE)(Sennrich 等,2015)是一种介于字符级和单词级语言模型之间的实用折中方案,它有效地在高频符号序列使用单词级输入,低频符号序列使用字符级输入。尽管名字叫“字节对编码”,但现有参考实现通常是在 Unicode 码点上操作,而非字节序列。这些实现要求包含全部 Unicode 符号空间才能建模所有 Unicode 字符串,导致基础词汇表超过 13 万个符号,再加上多符号词元,这个词汇表规模过大,远超通常使用的 32,000 到 64,000 的 BPE 词汇表大小。相比之下,字节级的 BPE 仅需要基础词汇大小为 256。

然而,直接将 BPE 应用于字节序列会因为 BPE 使用贪心的基于频率的启发式方法构建词汇而导致子最优的合并结果。我们观察到 BPE 会生成许多单词的不同版本,比如“dog”,会出现“dog”、“dog!”、“dog?” 等多种变体,导致有限的词汇槽和模型容量分配不理想。为避免这种情况,我们阻止 BPE 在不同字符类别之间合并任何字节序列,对空格除外,这显著提升了压缩效率,同时只带来极少的词汇切分碎片化。

这种输入表示方式允许我们结合单词级语言模型的经验优势和字节级方法的通用性。由于我们的方法可以为任何 Unicode 字符串分配概率,这使得我们能够在任何数据集上评估语言模型,无论其预处理、分词或词汇大小如何。

2.3 模型

我们使用基于 Transformer(Vaswani 等,2017)的架构来构建语言模型。该模型大体遵循 OpenAI GPT 模型(Radford 等,2018)的设计细节,但做了一些修改。层归一化(Layer Normalization)(Ba 等,2016)被移到了每个子模块的输入端,类似于预激活残差网络(He 等,2016);此外,在最后一个自注意力(self-attention)模块之后还增加了一个额外的层归一化。初始化方式也做了调整,以考虑随着模型深度增长残差路径上的累积效应。具体来说,我们在初始化时,将残差层的权重按 1 / N 1 / \sqrt { N } 1/N 的比例缩放,其中N是残差层的数量。词汇表扩展到了50,257个词元。我们还将上下文长度从512个词元增加到了1024个,同时使用了更大的批量大小512。

在这里插入图片描述

3. 实验

我们训练并基准测试了四个大致以对数均匀间隔划分大小的语言模型。架构概要见表2。最小的模型相当于原始的GPT,第二小的模型则相当于BERT(Devlin 等,2018)中最大的模型。我们最大的模型,称为GPT-2,其参数数量比GPT多了一个数量级以上。每个模型的学习率都是针对WebText中5%的保留样本手动调优以达到最佳困惑度(perplexity)。所有模型对WebText仍然存在欠拟合,且增加训练时间尚未显著改善保留样本上的困惑度。

3.1 语言建模

作为零样本任务迁移的初步步骤,我们关注WebText训练的语言模型在其主任务——语言建模上的零样本领域迁移表现。由于我们的模型在字节级别操作,不依赖任何有损的预处理或分词方法,因此可以在任意语言模型基准上进行评估。语言建模数据集的结果通常以一个量化指标报告,该指标是对每个规范预测单位(通常是字符、字节或单词)负对数概率的平均值做指数变换得到的困惑度。我们通过计算WebText语言模型对数据集的对数概率并除以规范单位数来评估同一指标。对于许多数据集,WebText语言模型会面临较大分布外(out-of-distribution)的挑战,因为它们需要预测经过高度标准化的文本、分词伪影(如断开的标点符号和缩写形式)、打乱的句子,甚至字符串 <UNK>,这在WebText中极为罕见——40亿字节中仅出现26次。我们在表3中报告了主要结果,使用了可逆的去分词器(de-tokenizers),以尽可能去除这些分词或预处理的伪影。由于这些去分词器是可逆的,我们仍然能够计算数据集的对数概率,同时它们也可以被看作是一种简单的领域自适应方法。使用这些去分词器,GPT-2的困惑度提升了2.5到5个百分点。

在这里插入图片描述

温馨提示:
阅读全文请访问"AI深语解构" Language Models are Unsupervised Multitask Learners :语言模型是无监督的多任务学习者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87191.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL语句全攻略:从基础到进阶的编程之旅

目录 一、引言二、SQL 基础语法2.1 SQL 语句写法顺序2.2 关联查询2.3 数据处理常用函数和运算符 三、数据库和表的基本操作3.1 创建数据库3.2 使用数据库3.3 创建表 四、基础增删改查操作4.1 插入数据&#xff08;增&#xff09;4.2 查询数据&#xff08;查&#xff09;4.3 更新…

Kafka的下载安装

目录 一、前期准备 1、查看网卡&#xff1a; 2、配置静态IP 3、设置主机名 4、配置IP与主机名映射 5、关闭防火墙 6、配置免密登录 二、JDK的安装 三、Zookeeper的安装 四、Kafka的安装 1、Kafka的下载安装 2、修改配置文件 4、分发文件 5、修改其他节点broker.i…

opencv入门(6) TrackBar调整图片和键盘响应

文章目录 1 创建trackbar2 使用userdata传入函数3 键盘响应 1 创建trackbar 1.trackbar名称 2.创建在哪个窗口上 3.拖动trackbar改变的值 4.trackBar的最大值 5.trackbar改变时的回调函数 6. 带入回调函数的数据&#xff0c;可以不用带,是一个void指针 createTrackbar(“Value …

QT<33> 修改窗口标题栏背景颜色

前言&#xff1a; 在做项目或者开发QT软件时&#xff0c;如果想要修改窗口标题栏背景颜色&#xff0c;发现没有代码可以直接设置&#xff0c;目前有两种方法可以设置。 第一种&#xff0c;自定义一个界面类&#xff0c;用QLabelQWidget实现&#xff0c;QLabel当作标题栏。 第…

JavaEE-博客系统项目

项目介绍 准备工作 创建数据表 创建项目 添加依赖 创建对应目录 除了基本的数据层mapper&#xff0c;业务层service&#xff0c;交互层controller&#xff0c;还创建了公共类的层common&#xff0c;枚举类层enums&#xff0c;异常类层&#xff0c;和实体类层pojo。 配置项目配…

Java项目:基于SSM框架实现的软件工程项目管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本项目管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&am…

[按键手机安卓/IOS脚本插件开发] 按键插件调试与判断循环结构辅助工具

实现按键插件的核心原理 通过一个table类型的QMPlugin变量实现按键精灵调用Lua函数&#xff0c;例如 -- Lua代码 -- 实现两数相加求和 function QMPlugin.Add(a, b) return a b end 将以上代码保存成.lua文件&#xff0c;例如test.lua后&#xff0c;放入按键精灵手机助手的p…

提示词框架(9)--CARE

提示词框架不止是AI的框架&#xff0c;也可以是我们的思考框架&#xff0c;拆解问题的方法&#xff01;&#xff01;&#xff01; CARE框架是一种用于优化提示词设计的方法&#xff0c;它帮助用户更有效地与AI进行交互&#xff0c;特别是在需要获取特定信息或实现某些任务时。…

uniapp+vue2 input不显示明文密码,点击小眼睛显示或隐藏密码

<u-input placeholder"请输入密码" prefixIcon"lock" :password"showPassword" v-model"formData.password"prefixIconStyle"font-size: 25px;color: #3C9CFF" border"none"><template slot"suffix…

时间序列的类增量学习:基准与评估

论文地址&#xff1a;https://dl.acm.org/doi/abs/10.1145/3637528.3671581 论文源码&#xff1a;https://github.com/zqiao11/TSCIL 会议&#xff1a;SIGKDD 2024&#xff08;CCF-A&#xff09; 现实环境本质上是非平稳的&#xff0c;随着时间推移常会引入新类别。这在时间序…

智能攻击原理和架构

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 智能攻击系统基于**人工智能&#xff08;AI&#xff09;与大语言模型&#xff08;LLM&#xff09;技术**&#xff0c;通过**环境感知→自主决策→动态执行→对抗进化**的闭环架构实现高效网络入侵。以下…

Beamer-LaTeX学习(教程批注版)【4】

众所周知&#xff0c;随着显示器普及宽屏化&#xff0c;PPT排版需要多列化来充分利用页面的横向空间。 这节课我们来学习如何创建列&#xff0c;即在beamer中增加列内容&#xff0c;以及如何对齐列。 1 使用不同的宽度来创建列 在beamer中我们通过在页面上使用columns环境来创…

通俗理解JVM细节-面试篇

文章目录 前言JVM概述JVM是什么&#xff1f;解决了什么问题&#xff1f;JVM运行流程JVM 与 JRE&#xff0c;JDK的关系 JVM内存结构JVM区域划分程序计数器栈堆方法区 类加载机制五个阶段加载验证准备解析初始化总结双亲委派模型 垃圾回收内存管理什么是GC&#xff1f;如何判定谁…

意识边疆保卫战:22:47深圳AI-BioFab人机融合危机全息实录

前言 前些天发现了一个巨牛的人工智能免费学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 &#x1f9e0;《意识边疆保卫战&#xff1a;22&#xff1a;47深圳AI-BioFab人机融合危机全息实录》 副标题&#xff1a;机械义…

langchain从入门到精通(三十四)——RAG优化策略(十)父文档检索器实现拆分和存储平衡

1. 拆分文档与检索的冲突 在 RAG 应用开发中&#xff0c;文档拆分 和 文档检索 通常存在相互冲突的愿望&#xff0c;例如&#xff1a; 我们可能希望拥有小型文档&#xff0c;以便它们的嵌入可以最准确地反映它们的含义&#xff0c;如果太长&#xff0c;嵌入/向量没法记录太多…

Javaweb - 7 xml

XML 是EXtensible Markup Language 的缩写&#xff0c;翻译过来就是可扩展标记语言。即&#xff0c;XML 和 HTML 一样&#xff0c;都是标记语言&#xff0c;也就是说&#xff0c;它们的基本语法都是标签。 特点&#xff1a; 1. 可扩展&#xff1a;即 XML 是允许自定义格式的。但…

qml实现 裁剪进度条

我们需要实现一个垂直进度条效果&#xff0c;但使用图片裁剪的方式。具体需求&#xff1a; 1. 图片位置固定&#xff0c;容器对齐其左边和下边&#xff0c;宽度和图片相同。 2. 容器背景透明&#xff0c;调整裁剪容器的高度&#xff0c;使其有高度进度条的感觉&#xff08;从下…

Dify 工作流全栈解析:从零构建你的 AI 应用流程引擎

AI工作流的导言&#xff1a; 工作流系统&#xff08;Workflow System&#xff09;是 Dify 的核心组成部分&#xff0c;它通过可视化编程界面支持创建复杂的 AI 应用程序。用户可以将不同的功能块连接起来&#xff0c;从而设计出用于处理数据、与 AI 模型交互、管理条件以及执行…

上下位机通讯规则

0&#xff1a;事由 最近开发&#xff0c;上位机Qt与下位机通讯的时候发现通讯规则有些不一样&#xff0c;这里简单记录一下 。所有代码基于元宝生成&#xff0c;属于伪代码不保证真实可用&#xff0c;啊但是逻辑是这么个逻辑。 1&#xff1a;底层通讯规则 以STM32向上位机通讯…

创建平衡二叉树C++

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 平衡二叉树&#xff1a;每个节点的左右子树高度差不超过1 class Solution { public:TreeNode* dfs(vector<int>& nums, int left, int right){if(l…