【论文精读】GPT2

摘要

       在单一领域数据集上训练单一任务的模型是当前系统普遍缺乏泛化能力的主要原因,要想使用当前的架构构建出稳健的系统,可能需要多任务学习。但多任务需要多数据集,而继续扩大数据集和目标设计的规模是个难以处理的问题,所以只能采取多任务学习的其他框架。

       目前在语言任务上表现最佳的多任务学习系统,利用了预训练和监督微调的结合,通用的预训练系统可以在微调后在多个任务上表现良好,但微调仍需要监督数据。故本文做出证明:

  • 大型语言模型可以在zero-shot设置中执行下游任务,而不需要任何参数或架构修改的微调
    image

       上图为不同尺寸的预训练GPT2在zero-shot设置下执行阅读理解、机器翻译、摘要、问答任务上取得的性能。

框架

方法

       本文核心方法是语言建模。 语言建模通常为一组例子 ( x 1 , x 2 , . . . , x n ) (x_1,x_2,...,x_n) (x1,x2,...,xn)的无监督分布估计,其中每个例子由可变长度的符号序列 ( s 1 , s 2 , . . . , s n ) (s_1,s_2,...,s_n) (s1,s2,...,sn)组成。 因为语言具有顺序性,因此通常将符号上的联合概率分解为条件概率的乘积:
p ( x ) = ∏ i = 1 n p ( s n ∣ s 1 , … , s n − 1 ) p(x)=\prod^n_{i=1}p(s_n|s_1,\dots,s_{n-1}) p(x)=i=1np(sns1,,sn1)

       这种方法允许对 p ( x ) p(x) 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)的条件分布进行可行的采样和估计。若目标为学习单一任务,可以用条件概率 p ( o u t p u t ∣ i n p u t ) p(output|input) p(outputinput)表示,但一个通用系统应该能够针对具体任务并根据输入来生成输出,即 p ( o u t p u t ∣ i n p u t , t a s k ) p(output|input, task) p(outputinput,task),故语言模型可以转换为用符号序列来指定任务,输入和输出表示。例如:

  • 翻译任务可以写成 (translate to French,English text,French text)
  • 阅读理解任务可以写成(answer the question,document,question,answer)

       MQAN(Memory-Question-Answer Network)能够根据这种格式的例子来推断和执行多种不同任务,语言建模也能在无监督的情况下采用MQAN的方式建模。

       因此问题变成了在上述配置下能否在实践中优化无监督目标直至收敛。本文实验通过分析语言模型在zero-shot设置下在各种任务上的性能证实,足够大的语言模型能够在这种配置中进行多任务学习,但学习速度比有监督的方法慢得多。

训练数据集

       本文没有采用传统的文本数据集,而是创建了一个强调文档质量的网络抓虫,但是人工筛选的数据质量更高但成本也高。所以爬虫抓取了Reddit(一个社交媒体平台)上大量的外部链接,因为Reddit上的外链通常是用户认为比较有趣、有价值的,类似于一种启发式指标,低成本的保证了数据的质量。

       基于此创建了数据集WebText,包含了4500万个链接的文本数据。为了从HTML响应中提取文本,使用了Dragnet和Newspaper的组合(本文中展示的所有结果使用的是初版WebText,它不包括2017年12月之后创建的链接),随后经过去重和数据清理后,获得了大约800万份文档,总计40GB的文本。

       WebText中删除了所有维基百科的文档,因为它是其他数据集的常见数据源,可能会由于训练数据与测试评估任务的重叠而使分析复杂化。
image
       上图为WebText训练集中发现的英语到法语和法语到英语翻译的例子。

输入表示

       通用的语言模型应该能够处理任何字符,但是现有的语言模型通过包含各种预处理操作:lower-casing、tokenization、预设词汇表等。这些操作都会限制语言模型能够处理的字符范围。

       综合考虑了OOV(out of vocabulary words)问题和基础词汇表过大(Unicode的全部符号)的问题后,使用经过调整的byte级的BPE算法。byte级的BPE算法有8位即256种不同字符组成的基础词汇表,为了避免诸如’dog’、‘dog?’、'dog!'这种一个词被构建出多个版本的情况,构建策略阻止了BPE除空格外跨字符类别进行任何字节序列的合并,提高了压缩效率。

       最终得到50257个词汇量的BPE,该方法可以表示任何Unicode字符组成的字符串,这使得可以在任何数据集上评估模型,无论预处理、标记化或词汇量的大小如何。

模型配置

       GPT2使用了Transformer架构,在GPT1模型的基础上做了一些小改动:

  • 调整Transformer的decoder,将Layer normalization移动到每个decoder子块的输入位置,并在最后一个decoder子块的自注意层后添加一个额外的Layer normalization
  • 初始化时残差层的权重乘以 1 / N 1/\sqrt N 1/N N N N是残差层的数量
  • BPE词汇量扩大到50257个,batch size大小设为512
    image
  • 如上图,本文采用12、24、36、48四种不同层数Transformer Decoder,对应tokens序列长度分别为768、1024、1280、1600,对应参数量为117M、345M、762M、1542M的模型测试。最小的模型等同于原始GPT,第二小的模型相当于BERT的最大模型,最大的模型称之为GPT2,比GPT的参数多一个数量级。

实验

Language Modeling

image
       上图为在WebText上预训练的不同尺寸GPT在zero-shot的设置下在其他数据集上的测试结果。观察到,GPT2在8个数据集中的7个实现了最佳水平。在小型数据集上也产生了很大的改进,例如Penn Treebank和WikiText-2。在LAMBADA和Children’s Book Test等长距离依赖性的数据集中,也有了很大的改进。但是在One Billion Word Benchmark上的结果较差,这可能是因为这个数据集较大且有最破坏性的预处理(1BW把句子随机打乱,去掉了所有长距离的结构)。

Children’s Book Test

image
       儿童图书测试(CBT)是用来检验语言模型在不同类别的词上的表现,比如命名实体、名词、动词和介词。评估指标是在完形填空测试中准确地预测被省略的词的可能选项中的正确答案。例:

  • 原始文本: I can swim, said Frog. I can swim as well as anything. So can I, said Toad. Don’t you want to race me across the river? Certainly not, said Frog. I don’t want to race you across the river. Suit yourself, said Toad. And he dived into the river and began to swim.
  • 完形填空测试: Frog said he could swim as well as __________. A. anything B. anyone C. Toad D. the river
  • 正确答案:C. Toad

       上图显示了随着模型大小增加,性能稳步提高,并且在这个测试上接近人类水平。GPT2在常见名词上达到了93.3%的新水平,在命名实体上达到了89.1%。

LAMBADA

       LAMBADA数据集测试系统对文本中长距离依赖关系的建模能力。任务是预测句子的最后一个单词,这需要至少50个上下文token才能成功预测。GPT-2将以往最优水平从99.8提高到了8.6的困惑度,并将预测准确性从19%提高到了52.66%。添加一个stop-word过滤器作为近似值,将准确性进一步提高到63.24%,使该任务总体上比最以往最优水平提高了4%。

Winograd Schema Challenge

image
       Winograd Schema挑战旨在通过测量系统解决文本中的歧义的能力来衡量其进行常识推理的能力。一个Winograd模式是一对只相差一两个单词且包含歧义的句子,这些歧义在两个句子中以不同方式处理,需要常识才能正确理解 。例:

  • 句子1:The trophy would not fit in the brown suitcase because it was too big.
  • 句子2:The trophy would not fit in the brown suitcase because it was too small.
  • 在这两个句子中,代词“it”指代的对象不同。在第一句中,“it”指的是奖杯,而在第二句中,“it”指的是手提箱。正确解决这种歧义需要使用常识知识。

       如上图,GPT2将最先进的系统(SOTA)的准确率提高到70.70%。

Reading Comprehension

       CoQA数据集由7个不同领域的文档和关于文档的自然语言对话组成,测试阅读理解能力和模型回答依赖于模型理解对话问题的能力。CoQA数据集包含来自8000个对话的127000对问题和答案,这些对话涉及7个不同领域,每组对话的平均长度为15轮,每一轮对话都由问题和回答组成。 例,针对《哈利·波特》的对话:

  • Q:书中第一句是什么? A:Mr. and Mrs. Dursley, of number four, Privet Drive, were proud to say that they were perfectly normal, thank you very much.
  • Q:他们有孩子吗? A:They had a son called Dudley.
  • Q:Dudley有多大? A:He was about to turn eleven years old.

       当以文档、相关对话的历史和最终token A为条件时,GPT2使用贪婪解码生成的序列在开发集上达到了55 F1,这个结果近似或超过4个baseline系统中的3个,而且GPT2没有使用其余baseline系统训练中使用的127000多个手工收集的问题答案对。

Summarization

image
       本实验测试GPT2在CNN和每日邮报数据集上提取摘要的能力。为了诱导摘要行为,文章最后面添加TL;DR:文本,并使用k = 2的Top-k随机采样生成100个token,这鼓励了比贪婪解码更抽象的摘要,并使用生成的100个token中前3个句子作为摘要。

       如上图,在常用的ROUGE1、2、L指标上,生成的摘要只接近经典神经网络baseline的性能,并且仅略微优于随机从文章中选择3个句子做摘要。当删除任务提示TL;DR:时,GPT2的性能下降了6.4分,这证明了可以用自然语言在语言模型中调用特定任务行为。

Translation

       本实验测试GPT2翻译能力。输入设置为示例对的上下文,格式为english sentence = french sentence,然后在最后一个提示english sentence =之后,使用贪心解码从模型中采样,并使用第一个生成的句子作为翻译。

       在 WMT-14英-法测试集上,GPT2得到了5BLEU,这比之前在无监督词汇的研究中推断出的双语词汇逐字替换还要差一些。

       在 WMT-14法-英测试集上,GPT2获得了11.5BLEU。这超过了一些无监督机器翻译baseline,但仍然远远不及当前最佳无监督机器翻译方法的33.5BLEU。这项任务的表现令人感到惊讶,因为作者故意从WebText中删除了大量的非英语网页,只使用了10MB的法语数据,比先前无监督机器翻译研究使用的法语语料库小500倍。

Question Answering

image
       本实验验证使用语言模型来回答事实性问题的能力。使用自然问题数据集(Natural Questions dataset)作为测试数据集,输入类似于翻译实验。

       GPT2对所有问题的回答准确率为4.1%,而最小模型的准确率小于1.0%。这表明模型容量对这类任务的性能影响较大。GPT2对其生成答案的概率校准良好,在其最有信心的1%的问题中,准确率为63.1%。但GPT2的性能仍然远远低于30%至50%一些开放域问答系统。

       上图为GPT2对开发集问题产生的30个最自信的答案。

Samples

       下列图为GPT2在WebText的测试案例。

Text generation

image
image
image
image
image
image
image

Summarization

image

Translation

image

Question Answering

image
image

reference

Alec, R. , Jeffrey, W. , Rewon, C. , David, L. , Dario, A. , & Ilya, S. . (2019). Language Models are Unsupervised Multitask Learners.

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】:DQL查询

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. DQL1.1 基本语法1.2 基础查询1.3 条件查询1.3 聚合函数 🌤️ 全篇…

【AI绘画】硬核解读Stable Diffusion(完整版) 小白必收藏!!!

手把手教你入门绘图超强的AI绘画,用户只需要输入一段图片的文字描述,即可生成精美的绘画。给大家带来了全新保姆级教程资料包 (文末可获取) 2022年可谓是AIGC(AI Generated Content)元年,上半年…

【Linux网络编程五】Tcp套接字编程(四个版本服务器编写)

【Linux网络编程五】Tcp套接字编程(四个版本服务器编写) [Tcp套接字编程]一.服务器端进程:1.创建套接字2.绑定网络信息3.设置监听状态4.获取新连接5.根据新连接进行通信 二.客户端进程:1.创建套接字2.连接服务器套接字3.连接成功后进行通信 三…

JavaScript中的变量监听:实时捕捉变化的利器

JavaScript中的变量监听:实时捕捉变化的利器 在JavaScript开发中,经常需要监听变量的改变,并在变量值发生变化时执行相应的操作。这种实时捕捉变化的功能对于构建交互性强的应用程序至关重要。本文将介绍如何在JavaScript中监听变量的改变&am…

模型 4C(消费者、成本、编译、沟通)理论

系列文章 分享 模型,了解更多👉 模型_总纲目录。重在提升认知。以消费者为中心。 1 4C(消费者、成本、编译、沟通)理论的应用 1.1 4C理论在电子商务中的应用 亚马逊是4C营销战略的成功案例。以下是对亚马逊应用4C理论的详细解读: 消费者&a…

【JavaEE Spring 项目】博客系统

博客系统 前⾔项⽬介绍1. 准备⼯作1.1 数据准备1.2 创建项⽬1.3 准备前端⻚⾯1.4 配置配置⽂件1.5 测试 2. 项⽬公共模块2.1 实体类的编写2.2 公共层 3. 业务代码3.1 持久层3.2 实现博客列表3.3 实现博客详情3.4 实现登陆令牌技术JWT令牌介绍JWT令牌⽣成和校验 3.5 实现强制要求…

Python入门知识点分享——(二十一)多继承和运算符重载

在介绍新的知识之前,我们先对之前的内容做一点补充,在面向对象编程的过程中,一个对象常常被要求具备多方面的功能,从而和多个类产生联系,而这一步的实现就用到了“多继承”。多继承是指一个子类可以继承自多个父类&…

【Linux】Linux编译器-gcc/g++ Linux项目自动化构建工具-make/Makefile

目录 Linux编译器-gcc/g使用 1.背景知识 Linux中头文件的目录在 Linux 库 条件编译的典型应用 2.gcc如何完成 动态库 vs 静态库 debug && release Linux项目自动化构建工具-make/Makefile 背景 用法 特殊符号 Linux编译器-gcc/g使用 1.背景知识 预处理&am…

LabVIEW高效电磁阀性能测试

LabVIEW高效电磁阀性能测试 在核电站的安全运营中,电磁阀作为关键组件,其性能的可靠性至关重要。设计一套基于LabVIEW的电磁阀测试平台,既能精准测试电磁阀的多项性能指标,又能提高检修效率与准确性,进而保障核电站的…

Mock.js

在开发后端的应用中,我们使用postman来测试接口,观察和验证前后端之间的数据传递是否正常。 在开发前端的应用中,我们使用Mock.js来模拟后端服务,以便进行前端业务逻辑的开发和测试。 一般情况下,个人开发或者小团队开…

Codeforces Round 919 (Div. 2)题解(A-E)

https://codeforces.com/contest/1920 A Satisfying Constraints 链接&#xff1a;A - Satisfying Constraints 代码 #include <bits/stdc.h> using namespace std; int main() {int T;cin >> T;while(T--){int n;scanf("%d", &n);vector<int&…

算法沉淀——BFS 解决 FloodFill 算法(leetcode真题剖析)

算法沉淀——BFS 解决 FloodFill 算法 01.图像渲染02.岛屿数量03.岛屿的最大面积04.被围绕的区域 BFS&#xff08;广度优先搜索&#xff09;解决 Flood Fill 算法的基本思想是通过从起始点开始&#xff0c;逐层向外扩展&#xff0c;访问所有与起始点相连且具有相同特性&#xf…

docker (三)-开箱即用常用命令

一 docker架构 拉取镜像仓库中的镜像到本地&#xff0c;镜像运行产生一个容器 registry 镜像仓库 registry可以理解为镜像仓库&#xff0c;用于保存docker image。 Docker Hub 是docker官方的镜像仓库&#xff0c;docker命令默认从docker hub中拉取镜像。我们也可以搭建自己…

【Windows】删除 VHD 虚拟磁盘时提示“文件已在 System 中打开”的解决方法

一、原因 正如显示的那样&#xff0c;虚拟磁盘仍在被系统占用。因此我们需要断开磁盘与系统的连接。 二、解决方法 1. 在“开始”菜单中搜索“磁盘管理”&#xff0c;选择“创建并格式化硬盘分区”。 2. 右键点击需要删除的虚拟磁盘&#xff0c;选择“分离 VHD”。 3. 点击“…

laravel_stub type-hints的简单介绍

开发者介绍 存根文件的类型提示的功能是由Nuno Maduro&#xff08;右边的人&#xff09;提供的。 stub type-hints 指的是在 stub 文件中使用的类型提示&#xff08;type hints&#xff09;。 类型提示是 PHP 7 引入的一个特性&#xff0c;允许你在函数、方法和类的上下文中指…

day14笔记(多态)

多态 自己写多态演示遇见两个问题 1.在类里写show方法时犹豫要不要写参数,其实不用写参数也可以获取到类的信息 public void show(){//括号里面写参数吗System.out.println(getName()", "getAge());} 2.在测试类里面写方法时,写了一个show方法带参数,其实这里应该是…

Spring Boot 笔记 017 创建接口_新增文章

1.1实体类增加校验注释 1.1.1 自定义校验 1.1.1.1 自定义注解 package com.geji.anno;import com.geji.validation.StateValidation; import jakarta.validation.Constraint; import jakarta.validation.Payload; import jakarta.validation.constraints.NotEmpty;import jav…

【Redis快速入门】Redis三种集群搭建配置(主从集群、哨兵集群、分片集群)

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

Apache POI | Java操作Excel文件

目录 1、介绍 2、代码示例 2.1、将数据写入Excel文件 2.2、读取Excel文件中的数据 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&#xff0c;初步…

武器级工具包 Immunity Canvas 7.26安装使用体验

介绍&#xff1a; Immunity Canvas工具包有集成化、自动化、简单化的特点&#xff0c;大幅降低了攻击门槛。该工具是Immunity公司的一款商业级漏洞利用和渗透测试工具&#xff0c;包含了480多个以上的漏洞利用&#xff0c;该工具工具本来并不开源&#xff0c;但是在2021年Immu…