GPT原始论文:Improving Language Understanding by Generative Pre-Training论文翻译

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)。

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

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

相关文章

Java split 分割字符串避坑

使用split进行字符串分割时需要注意2点 1、特殊字符作为分隔符时需要使用\\进行转义(如\\ -> \\\\; | -> \\| ) 特殊字符 .$|()[{^?*\\ 例如对"|"分隔 未转义 String str "01|02|03"; String[] strArr str.split("|");System.out.…

前端登陆加密解决方案

项目背景 环食药烟草的数据下载模块中,需要判断用户在进行数据下载时是进行了登录操作,如果没有登录要跳转登陆页面,输入账号和密码进行登录。 使用场景 项目中需要前端书写登录页面,用户输入账号密码,前端获取到用…

leetcode 3.无重复字符的最长字串(滑动窗口) (C++)DAY2

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示…

ChatGPT Plus如何升级?信用卡付款失败怎么办?如何使用信用卡升级 ChatGPT Plus?

ChatGPT Plus是OpenAI提供的一种高级服务,它相较于标准版本,提供了更快的响应速度、更强大的功能,并且用户可以优先体验到新推出的功能。 尽管许多用户愿意支付 20 美元的月费来订阅 GPT-4,但在实际支付过程中,特别是…

mac如何实现升级node版本、切换node版本

一、 查看node所有版本(前提:安装了nodejs) npm view node versions二、安装指定node版本 sudo n 版本号三、检查目前安装了哪些版本的node,会出现已安装的node版本 n四、切换已安装的node版本 sudo n 版本号其他命令 1、sudo npm cache…

154基于matlab的二维元胞自动机模拟森林火灾(生命游戏 )和模拟收费站交通流

基于matlab的二维元胞自动机模拟森林火灾(生命游戏 )和模拟收费站交通流。全国大学生美国建模竞赛,程序已调通,可直接运行。 154 元细胞自动机 森林起火 收费站交通 (xiaohongshu.com)

基于微信小程序的医保行政执法案件管理系统

本系统设计的是一个医保行政执法的网站,此网站使用户实现了不需出门就可以在手机或电脑前进行网上查询需求信息等。 用户在注册登陆后,在客户端可以实现;案件信息、结案归档、我的等。然而管理员则可以在服务端直接管理;个人中心、…

Linux校准时间 Centos

Linux校准时间 Centos 首先,确保系统中已经安装了tzdata包。如果没有安装,可以使用以下命令安装: sudo yum install tzdata设置系统时区为上海: sudo timedatectl set-timezone Asia/Shanghai验证时区设置是否生效:…

Android studio打开md无法显示md渲染问题

Where is Android Studio Markdown support plugin preview preference? - Stack Overflow android studio开发无法选择markdown渲染功能的问题 原因是java runtime出了问题 搜索下面功能 Choose Boot Java Runtime for the IDE 选择带JCEF的 可以选最新的java版本 重启之…

【计算机网络基础篇】学习笔记系列之一《TCP/IP 网络模型》

文章目录 1、问题提出2,网络协议是分层的3,应用层4,传输层5,网络层6,网络接口层7,总结 1、问题提出 为什么要有 TCP/IP 网络模型? 不同设备上的进程间通信需要通过一套通用的网络协议进行网络通…

【lesson37】自己设计用户级缓冲区

文章目录 自己设计用户级缓冲区简易MyFILE_的结构fopen_的实现fputs_的实现fclose_的实现fflush_的实现 完整版代码 自己设计用户级缓冲区 因为用户缓冲区在FILE中,所以我们直接模仿C语言提供的文件操作接口,顺便实现缓冲区。 使用文件系统的框架&#…

git rebase # |REBASE 1/1 #rebase in progress; onto

git 代码解决冲突之后会提示rebase in progress; onto 1 执行git rebase --abort 回到没有pull代码之前 2 git pull 3 解决冲突 4 git add . (不需要git commit) 5 git rebase --continue 6 git push

Java实现康复中心管理系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 普通用户模块2.2 护工模块2.3 管理员模块 三、系统展示四、核心代码4.1 查询康复护理4.2 新增康复训练4.3 查询房间4.4 查询来访4.5 新增用药 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的康复中…

【代码随想录-哈希表】两个数组的交集

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

Matplotlib热力图的创意绘制指南【第54篇—python:Matplotlib热力图】

文章目录 Matplotlib热力图的创意绘制指南1. 简介2. 基本热力图3. 自定义颜色映射4. 添加注释5. 不同形状的热力图6. 分块热力图7. 多子图热力图8. 3D热力图9. 高级颜色映射与颜色栏设置10. 热力图的动态展示11. 热力图的交互性12. 标准化数据范围13. 导出热力图 总结&#xff…

【爬虫实战】全过程详细讲解如何使用python获取抖音评论,包括二级评论

简介: 前两天,TaoTao发布了一篇关于“获取抖音评论”的文章。但是之前的那一篇包涵的代码呢仅仅只能获取一级评论。虽然说抖音的一级评论挺精彩的了,但是其实二级评论更加有意思,同时二级评论的数量是很多。所以二级评论是非常值…

适合大型企业的云计算服务器有哪些?

随着云计算技术的不断发展,越来越多的企业开始采用云计算服务来降低成本、提高效率。对于大型企业而言,选择适合的云计算服务器非常重要,因为它将直接影响企业的业务运营和数据安全。本文将介绍适合大型企业的云计算服务器类型,以…

DolphinScheduler实现隔几天调度

1.场景分析 dolphinscheduler(海豚)定时器模块-定时调度时每3秒|每3分钟|每3天这种定时,不能够跨分钟,跨小时,跨月,每次跨月等都会从每个月的第1天(第几天开始可以设定)开始重新计时…

java设计模式:观察者模式

在平常的开发工作中,经常会使用到设计模式。合理的使用设计模式,可以提高开发效率、提高代码质量、提高代码的可拓展性和维护性。今天来聊聊观察者模式。 观察者模式是一种行为型设计模式,用于对象之间一对多的依赖关系,当被观察对…

【学习笔记】树上差分总结(点差分/边差分)

一.树上差分的基本概念 1.树上差分的定义 树上差分,顾名思义,意思就是在树上做差分。 至于什么是差分呢?如果不会的同学,可以先看看我的这篇博客:一维,二维差分の详解(简单易懂)_一维差分-CSDN博客 2.树…