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

news2024/12/25 9:03:18

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

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

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

相关文章

高级Java开发工程师岗位的基本职责(合集)

高级Java开发工程师岗位的基本职责1 职责: 1、负责区块链产品的研发,独立或与团队合作,按时保质完成软件开发项目; 2、参与产品系统设计、概要设计工作,核心功能的代码编写; 3、独立解决和指导其他同事处理开发中遇到的难点问题; …

GaussDB新体验,新零售选品升级注入新思路【华为云GaussDB:与数据库同行的日子】

选品思维:低频VS高频 一个的商超,假设有50个左右的品类,每个品类下有2到10个不等的商品。然而如此庞大的商品,并非所有都是高频消费品。 结合自身日常的消费习惯,对于高频和低频的区分并不难。一般大型家电、高端礼盒…

14.2 Java正则表达式(❤❤)

14.2 Java正则表达式 1. 正则表达式1.1 简介1.2 字符范围匹配1.3 元字符1.4 多次重复匹配1.5 定位匹配1.6 贪婪模式与非贪婪模式1.7 表达式分组1. 正则表达式 1.1 简介 开源 在线正则表达式测试 1.2 字符范

mapbox 高亮相同特征的要素数据

一、完整代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>Highlight features containing similar data</title> <meta name"viewport" content"initial-scale1,maximum-scale1,user-scal…

VUE3+TS使用OpenSeadragon学习之旅,实现多图片切换效果

1.官方网站&#xff1a;OpenSeadragon 2.使用npm下载插件&#xff1a;npm install openseadragon 3.在 index.html文件引入资源 <link rel"stylesheet" href"node_modules/openseadragon/build/openseadragon/openseadragon.css" /><script src…

正点原子--STM32定时器学习笔记(1)

这部分是笔者对基本定时器的理论知识进行学习与总结&#xff01;&#xff0c;主要记录自己在学习过程中遇到的重难点&#xff0c;其他一些基础点就一笔带过了&#xff01; 1. 定时器概述 1.1 软件定时原理 使用纯软件&#xff08;CPU死等&#xff09;的方式实现定时&#xf…

Python之运算符汇总

1.算数运算符 假设 a 10, b 20 2.比较运算符 3.赋值运算符 4.逻辑运算符 逻辑运算的顺序排列:从左往右开始执行 () > not > and > or and or 一真一假 都为真: 取后面的 取前面的 取假的…

sentinel的Context创建流程分析

sentinel入门 功能 限流&#xff1a;通过限制请求速率、并发数或者用户数量来控制系统的流量&#xff0c;防止系统因为流量过大而崩溃或无响应的情况发生。 熔断&#xff1a;在系统出现故障或异常时将故障节点从系统中断开&#xff0c;从而保证系统的可用性。 降级&#xf…

PyTorch 2.2 中文官方教程(十三)

在 C中注册一个分发的运算符 原文&#xff1a;pytorch.org/tutorials/advanced/dispatcher.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 分发器是 PyTorch 的一个内部组件&#xff0c;负责确定在调用诸如torch::add这样的函数时实际运行哪些代码。这可能并不简…

元数据驱动的思想

元数据驱动的思想 元数据驱动的思想应该不会陌生&#xff0c;但元数据驱动的实践应该会非常陌生。 因为元数据驱动架构是为了解决高频个性化的复杂业务而诞生的&#xff0c;而这种业务场景只存在2B领域。 有关元数据驱动的架构思想&#xff0c;在这里暂先简单抛几个点。&#…

【动态规划】【树形dp】【C++算法】968监控二叉树

作者推荐 【动态规划】【字符串】【表达式】2019. 解出数学表达式的学生分数 本文涉及知识点 动态规划汇总 LeetCode:968监控二叉树 给定一个二叉树&#xff0c;我们在树的节点上安装摄像头。 节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。 计算监控树的所…

机器学习:线性判别分析LDA(Python)

一、线性判别分析的定义 二、线性判别分析——二分类模型 lda2classify.py import numpy as npclass LDABinaryClassifier:"""线性判别分析二分类模型"""def __init__(self):self.mu None # 各类别均值向量self.Sw_i None # 各类内散度矩阵…

【电路笔记】-线圈的电感

线圈的电感 文章目录 线圈的电感1、概述2、线圈的电感3、电感示例14、电感示例2 电感是指抵抗流过其的电流变化的元件属性的名称&#xff0c;即使是直的电线也会有一些电感。 1、概述 线圈的电感是指感应线圈抵抗流过其的电流的任何变化所必须的电气特性。 因此&#xff0c;电…

Qt拖拽事件,实现控件内项的相互拖拽

文章目录 1拖拽演示2 步骤3 实现 这里主要以QTableview控件为例&#xff0c;实现表格内数据的相互拖拽。 1拖拽演示 2 步骤 自定以QTableView类&#xff0c;在自定义类中重写拖拽事件&#xff1a; void dropEvent(QDropEvent *event); void dragEnterEvent(QDragEnterEvent *…

装饰你的APP:使用Lottie-Android创建动画效果

装饰你的APP&#xff1a;使用Lottie-Android创建动画效果 1. Lottie-Android简介 Lottie-Android是一个强大的开源库&#xff0c;由Airbnb开发&#xff0c;旨在帮助开发者轻松地在Android应用中添加高质量的动画效果。它基于Adobe After Effects软件中的Bodymovin插件&#x…

一种缩短轮询时间的处理办法

我们平常处理轮询任务的时候&#xff0c;会用时间片的方式来分割开&#xff0c;每个时间片处理某一个任务。 有时候有些任务并不需要有动作&#xff0c;本轮轮询到它&#xff0c;它不需要干活&#xff0c;于是这个时间片就浪费了。但如果其他时间片里面的任务又急着呢&#xff…

微信小程序使用ucharts折线图,有负数显示0刻度线

当数据有负数和正数的时候默认不会显示0刻度线&#xff0c;不方便看出正负对比 实现思路&#xff1a;显示的刻度线是根据数据的最大值和最小值自动分配到刻度线上面&#xff0c;把最大值和最小值设置为一样&#xff0c;然后平均分配给五个刻度线中间的刻度线就会为0就实现了显…

深入理解Istio服务网格(一)数据平面Envoy

一、服务网格概述(service mesh) 在传统的微服务架构中&#xff0c;服务间的调用&#xff0c;业务代码需要考虑认证、熔断、服务发现等非业务能力&#xff0c;在某种程度上&#xff0c;表现出了一定的耦合性 服务网格追求高级别的服务流量治理能力&#xff0c;认证、熔断、服…

如何在Vue应用程序中使用Vue-Router来实现路由嵌套动画效果

Vue-Router是Vue.js官方的路由管理插件&#xff0c;可以帮助我们轻松管理应用程序的路由。除了基本的路由功能外&#xff0c;Vue-Router还允许我们在切换路由时添加动画效果&#xff0c;提升用户体验。本文将介绍如何使用Vue-Router来实现路由嵌套动画效果&#xff0c;并提供具…

跟着pink老师前端入门教程-day17

2、CSS3 动画 动画&#xff08;animation&#xff09;是CSS3中就要有颠覆性的特征之一&#xff0c;可通过设置多个节点来精确控制一个或一组动画&#xff0c;常用来实现复杂的动画效果 相比较过渡&#xff0c;动画可以实现更多变化&#xff0c;更多控制&#xff0c;连续自动播…