冻结Prompt微调LM: T5 PET (a)

T5

  • paper: 2019.10 Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer

  • Task: Everything

  • Prompt: 前缀式人工prompt

  • Model: Encoder-Decoder

  • Take Away: 加入前缀Prompt,所有NLP任务都可以转化为文本生成任务

img

T5论文的初衷如标题所言,是为了全面公平的对比不同预训练和迁移策略的贡献和效果,避免在A模型上效果不好的预训练目标在B上可能效果更优的情况,对比项包括

  • 预训练目标:语言模型,乱序还原,MLM(不同的掩码率),Span掩码, etc

  • 预训练数据:构建C4数据集,从C4抽取不同领域语料来训练

  • 模型架构: Encoder-Decoder,Decoder Only,Encoder Only

  • 迁移策略:逐步解冻,全量微调,局部微调

  • 其他:多任务预训练,模型大小

说句题外话,再看论文结果发现Encoder-Decoder的模型结果+SpanMLM损失函数效果最好。不知道这是否是谷歌押注T5,而没有像OpenAI一样选择Deocder结构的原因。

具体对比结果这里不细说,本文只关注T5为了公平对比以上差异,提出的Text2Text的通用建模框架:用相同的模型,相同的预训练,相同的损失函数和解码方式,把文本分类,摘要,翻译,QA都转化成了生成任务,而转化的方式就是通过加入前缀prompt。

针对不同的下游微调任务,我们看下T5提出的Text2Text是如何构建prompt模板的

  1. WMT英语到德语的翻译任务,输入是'translate English to German:'+input, 输出是翻译结果

  2. CNN Mail摘要任务: 文本摘要任务,输入是‘Summarize:'+input,输出是摘要

  3. MNLI任务:输入是'mnli hypothesis:'+假设+'premise:'+叙述,输出是contradiction, entailment,neutral

  4. STS文本相似任务:输入是'stsb sentence1:'+input1+‘sentence2:’+input2, 输出是1~5的打分(离散化)

  5. 问答SQuAD任务:输入是'question:'+提问+ 'context:'+上下文,输出是答案

不难发现在T5的时代,prompt模板的构建还比较粗糙,更多是单纯的任务名称+任务类型来区分不同的NLP任务,只是让模型在解码时多一层条件概率,既给定不同prompt前缀在解码时采用不同的条件概率(attention)。并没有太多从语义和上下文关联的角度去进行prompt模板的构建,我猜这是T5在论文中提到他们尝试了不同的prompt模板发现效果影响有限的原因(哈哈因为都不太好所以没啥差异),不不能否定T5在通用LM上做出的贡献~

PET-TC(a)

  • paper a: 2020.1 Exploiting Cloze Questions for Few Shot Text Classification and Natural

  • prompt: 单字完形填空式人工Prompt

  • Task: Text Classification

  • Model: Roberta-large, XLM-R

  • Take Away: 加入完形填空式Prompt把文本分类任务转化成单字MLM

img

和第一章的LAMA相似,PET-TC也是把输入映射成完形填空式的prompt模板,对掩码词进行预测作为分类标签。不过PET没有直接使用prompt,而是用了半监督的方案。用多个prompt模板微调模型后,对大规模无监督数据进行预测,然后在伪标签上进行常规的模型微调,哈哈绕了一个圈最后还是输出的常规微调的模型。我大胆猜测作者很看好prompt范式在微调时引入的前置语义信息,以及无额外参数的设定,但是对不同prompt和answer模板带来的不稳定性感到头疼,于是搞出这么个折中的方法~

prompt & Answer Engineer

PET针对每个数据集人工设计了prompt模板和Answer词对标签的映射。针对单双文本输入分别举两个例子,以下a,b为原始输入文本,'_'位置为MASK词

  • 单输入:Yelp评论1~5星打分,标签词分别为terrible, bad,okay,good,great

img

  • 双输入:AG's News新闻四分类问题, 标签词分别为分类名称Worlds,Sports, Business, Science/Tech,

img

可以看出作者构建prompt模板的思路是尽可能还原文本所在的上下文场景,Answer词的选取是一对一的构建模式,每个label只选取一个词来表示。

固定prompt微调LM

完形填空式的prompt模板在微调时的优势,我认为主要有以下三点

  • 没有额外参数的引入,常规微调需要引入hidden_size * label_size的额外参数(classify head)作为每个标签对应的空间表征,这部分需要针对下游任务重头学习。而完形填空的token是在原始vocab中的,于是只需要调整标签词的预训练表征让它在label上线性可分即可

  • 前置语义信息的引入,因为标签词的选取本身符合label的原始语义,例如以上YELP评论打分中的5个形容词本身就是隐含了评论质量信息的,所以会引入部分前置信息,避免重头学习,这一点和MRC有些相似

  • 预训练和微调的一致性高,都是解决完形填空问题,学习目标一致

微调的损失函数是交叉熵,作者没有引入额外参数,而是把MASK位置上模型的预估logits在label上归一化来得到分类预测。例如上面的AG新闻分类任务,先得到MASK位置worlds,sports,business,science这四个词的预测logits,然后归一化得到预估概率,再和分类标签计算交叉熵。

为了避免灾难遗忘作者在下游任务微调时加入了预训练的MLM任务,于是微调的损失函数如下

半监督+蒸馏

这部分的设计可以和prompt的部分分开来看,是一个半监督方案。以上每个任务对应的多个prompt模板,分别固定prompt微调LM得到一版模型,然后在大量的未标注样本上进行预测,再对多个模型的预测值进行加权得到伪标签。

最终在为标签上使用常规的微调方案(加classifier head),训练模型作为输出,这一步类比知识蒸馏。所以PET最后输出的还是常规的监督微调模型,Prompt只是被当做了一种半监督方案。效果上在小样本的设定上比直接使用监督微调都有一定的效果提升。

img

作者还做了iPET对以上过程通过迭代逐步扩大数据集,提高伪标签准确率的方案,不过这么麻烦的实现一点都不适合我这种懒人,哈哈就不细说了~

针对PET有几点疑问

  • 完形填空类的prompt,在微调过程中可能的灾难遗忘,是否因为对label词的微调偏离了词在原始文本中语义表征,以及和其他词的相对位置

  • prompt模板差异带来的效果差异尚未解决,人工构建的prompt模板不一定是最优的

  • Answer词单token,以及和label一一对应的设定,限制性较强。这部分在后面的续作里作者做了改良

后面介绍的几个模型,大多是基于PET上述问题的改良~

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

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

相关文章

力扣刷MySQL-第四弹(详细讲解)

🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克🍹 ✨博客主页:小小恶斯法克的博客 🎈该系列文章专栏:力扣刷题讲解-MySQL 🍹文章作者技术和水平很有限,如果文中出…

GPT应用程序的上线流程

将GPT应用程序上线涉及多个步骤,包括开发、测试、部署和发布。以下是一般的上线流程,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 开发和测试: 在开发阶段,确保您…

Spring MVC的原理

Spring MVC中的MVC即模型-视图-控制器,该框架围绕一个DispatcherServlet设计而成,DispatcherServlet会把请求分发给各个处理器,并支持可配置的处理器映射和视图渲染等功能。Spring MVC的具体工作流程如下: (1&#xff…

深度解析 Compose 的 Modifier 原理 -- Modifier.layout()、LayoutModifier

" Jetpack Compose - - Modifier 原理系列文章 " 📑 《 深入解析 Compose 的 Modifier 原理 - - Modifier、CombinedModifier 》 📑 《 深度解析 Compose 的 Modifier 原理 - - Modifier.composed()、ComposedModifier 》 📑 《 深…

redis安装-Linux为例

可以下载一个Shell或者MobaXterm工具,便于操作 在redis官网下载压缩包 开始安装 安装依赖 yum install -y gcc tcl切换目录 切换目录后直接把redis安装包拖到/user/local/src/下 cd /user/local/src/解压然后安装 #解压 tar -zxvf redis-7.2.4.tar.gz #安装 …

C语言——小细节和小知识12

一、倒置句子 将句子中的单词位置倒置,标点不用倒置,例如i love you.倒置结果是:you. love i。 1、两步翻转法 采用两步翻转法来实现单词位置的倒置。首先,它整体翻转整个字符串,然后再逐个翻转每个单词内的字符。 …

环形链表问题

环形链表 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

如何录制屏幕视频?让视频制作更简单!

随着数字化时代的来临,录制屏幕视频成为一种常见的传播和教学方式。无论是制作演示文稿、教学视频,还是记录游戏操作,屏幕录制为用户提供了强大而灵活的工具。可是您知道如何录制屏幕视频吗?本文将深入介绍两种常见的屏幕录制方法…

vue el-select自定义搜索选择案例

开发中常见的有选择框并且输入关键词可以快速检索功能,刚好这次项目需求,就开始吧 需求:1、生成1000到100000的数可选择,递增1000 2、这些数必须三位数用逗号隔开,比如1,000.00这样的形式显示 3、输入关键词比如10&am…

zabbix监控平台(agent端)

引言:明人不说暗话,上一篇文章我们讲了zabbix的serrver端部署和配置,今天详细讲解一下agent端服务器(客户端)的配置和关联 1.进入官网 Zabbix:企业级开源监控解决方案 2.进入下载页面选择需要下载的版本信…

【JVM】JVM概述

JVM概述 基本介绍 JVM:全称 Java Virtual Machine,即 Java 虚拟机,一种规范,本身是一个虚拟计算机,直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作特…

【网络安全】2024年一个漏洞4w+,网安副业挖SRC漏洞,躺着把钱挣了!

一个漏洞奖励2w,这是真实的嘛! 作为资深白帽,入行网安这些年也一直在接私活,副业赚的钱几乎是我工资的三倍!看到最近副业挖漏洞的内容非常火爆,我便决定将自己的经验分享出来,带我的粉丝们一起…

Vue3在点击菜单切换路由时,将ElementPlus UI库中el-main组件的内容滚动恢复到顶部

功能:Vue3在点击菜单切换路由时,将页面el-main的内容滚动到顶部,布局如下,使用UI组件库为ElementPlus 在网上搜很多都是在route.js中的router.beforeEach中使用window.scrollTop(0,0) 或 window.scrollTo(0,0) 滚动,但…

深入Docker5:安装nginx部署完整项目

目录 准备 为什么要使用nginx mysql容器构建 1.删除容器 2.创建文件夹 3.上传配置文件 4.命令构建mysql容器 5.进入mysql容器,授予root所有权限 6.在mysql中用命令运行sql文件 7.创建指定数据库shop 8.执行指定的sql文件 nginx安装与部署 1.拉取镜像 2…

c语言:用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。

题目 用一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。 如:01,是1,交换完是10,是2. 思路 1.分别取出奇数位上的数字和偶数位上的数字 举个例子:1001 0110 1001 0110 奇…

4. 示例:更改监听端口

默认Spring Boot启动是监听在8080上的。 如果8080被使用,就会报以下错误。 这个时候可以更换一个新的端口。 server: port: 8180 然后再启动,启动成功并且绑定到端口8180。

【计算机硬件】2、指令系统、存储系统和缓存

文章目录 指令系统计算机指令的组成计算机指令执行过程指令的寻址方式(怎么样找到操作数?)1、顺序寻址2、跳跃寻址 指令操作数的寻址方式(怎么样找到操作数?)1、立即寻址方式2、直接寻址方式3、间接寻址方式…

JRT和springboot比较测试

想要战胜他,必先理解他。这两天系统的学习Maven和跑springboot工程,从以前只是看着复杂到亲手体验一下,亲自实践的才是更可靠的了解。 第一就是首先Maven侵入代码结构,代码一般要按约定搞src/main/java。如果是能严格执行测试的项…

Windows系统还原打印机系统教程

同时按下键盘WinR键,在运行窗口输入services.msc后点击确定或者回车。 找到Print Spooler,选中右键,点击停止。 复制地址:C:\Windows\System32\spool\drivers 打开我的电脑,复制到地址栏后回车,分别删除文件…

Tomcat10.X部署老版本axis2 webservice项目不生效

目录 一、使用场景 二、问题描述 三、原因排查 四、解决方案 一、使用场景 原来项目是OpenJDK8tomcat9构建,现在需要升级到OpenJDK17tomcat10的组合。原来的webservice项目打包成aar格式,通过axis2部署在tomcat上。 二、问题描述 在配置好jdk和to…
最新文章