大模型笔记:Prompt tuning

news2025/5/30 13:52:56

1  NLP模型的几个阶段

1.1 第一阶段(在深度学习出现之前)

  • 通常聚焦于特征工程(feature engineering)
  • 利用领域知识从数据中提取好的特征

1.2 第二阶段(在深度学习出现之后)

  • 特征可以从数据中习得——>研究转向了结构工程(architecture engineering)
  • 通过设计一个合适的网络结构,学习好的特征

1.3 第三阶段(预训练 + 微调)

  • 用一个固定的结构预训练一个语言模型(language model, LM)
    • 预训练的方式就是让模型补全上下文(比如完形填空)
    • 预训练不需要专家知识,因此可以在网络上搜集的大规模文本上直接进行训练
  • 这一阶段的一个研究方向是目标工程(objective engineering)
    • 为预训练任务和微调任务设计更好的目标函数
    • 让下游任务的目标与预训练的目标对齐是有利的
    • 几种经典预训练任务
      • Masked Language Modeling(MLM)
        • 随机选取一个固定长度的词袋区间,然后挖掉中心部分的词,让模型预测该位置的词
      • Next Sentence Prediction(NSP)
        • 给定两个句子,来判断他们之间的关系
        • 存在三种关系
          • entailment(isNext)
            • 紧相邻的两个句子
          • contradiction(isNotNext)
            • 这两个句子不存在前后关系,例如两个句子来自于不同的文章
          • Neutral
            • 中性关系,当前的两个句子可能来自于同一篇文章,但是不属于isNext关系的

1.4 第四阶段(预训练 + Prompt Tuning)

  • 通过添加模板的方法来避免引入额外的参数,从而让语言模型可以在小样本(Few-shot)或零样本(Zero-shot)场景下达到理想的效果

2 prompt tuning

  • Prompt的目的是将Fine-tuning的下游任务目标转换为Pre-training的任务

2.1 举例说明

给定一个句子

[CLS] I like the Disney films very much. [SEP]

  • 传统的Fine-tuning方法
    • 通过BERT的Transformer获得 [CLS]表征
    • 之后再喂入新增加的MLP分类器进行二分类,预测该句子是积极的(positive)还是消极的(negative)
    • 需要一定量的训练数据来训练
  • Prompt-Tuning
    • 构建模板(Template Construction)
      • 通过人工定义、自动搜索、文本生成等方法,生成与给定句子相关的一个含有[MASK]标记的模板
      • 拼接到原始的文本中,获得Prompt-Tuning的输入
        • [CLS] I like the Disney films very much. [SEP] It was [MASK]. [SEP]
      • 将其喂入BERT模型中,并复用预训练好的MLM分类器,即可直接得到[MASK]预测的各个token的概率分布
    • 标签词映射(Label Word Verbalizer)
      • ​​​​​​​因为[MASK]部分我们只对部分词感兴趣【比如 positive/negative】
      • ——>需要建立一个映射关系
        • 如果[MASK]预测的词是“great”,则认为是positive类
        • 如果是“terrible”,则认为是negative类
    • 训练
      • ​​​​​​​​​​​​​​只对预训练好的MLM head进行微调

3 PET(Pattern-Exploiting Training)

《Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference》(EACL2021)

3.1 pattern 和verbalizer

3.1.1 Pattern(Template) 

  • 记作T  ,即上文提到的模板,为额外添加的带有[mask]标记的短文本
  • 通常一个样本只有一个Pattern(因为我们希望只有1个让模型预测的[mask]标记)
  • 不同的任务、不同的样本可能会有其更加合适的pattern
    • ——> 如何构建合适的pattern是Prompt-Tuning的研究点之一 

3.1.2 Verbalizer

  • 记作V  ,即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word)。
  • 例如情感分析中,期望Verbalizer可能是
    • V(positive)=great; V(negative)=terrible  
    • (positive和negative是类标签)
  •  如何构建Verbalizer是另一个研究挑战 

上述两个组件被称为Pattern-Verbalizer-Pair(PVP),一般记作P=(T,V) 

3.2 Patterns Ensembling 

  • 一般情况下,一个句子只能有一个PVP
  • 这可能并不是最优的,是否可以为一个句子设计多个不同的PVP呢?
  • ——>Prompt-Tuning的集成
    • Patterns Ensembling :同一个句子设计多个不同的pattern

3.3 Verbalizers Ensembling

  • 在给定的某个Pattern下,并非只有1个词可以作为label word。
    • 例如positive类,则可以选择“great”、“nice”、“wonderful”。当模型预测出这三个词时,均可以判定为positive类。
  • 在训练和推理时,可以对所有label word的预测概率进行加权或投票处理,并最后获得概率最大的类

3.4 PVPs Ensembling(Prompt Ensembling)

  • Pattern和Verbalizer均进行集成,此时同一个句子有多个Pattern,每个Pattern又对应多个label word

3.5  选择不同的Pattern和Verbalizer会产生差异很大的结果

4 挑选合适的pattern

  • 从3.5可以看出,不同的pattern对结果影响很大,所以如何挑选合适的pattern,是近几年学术界的一个热点
    • 离散的模板构建(Hard Prompt)
      • ​​​​​​​直接与原始文本拼接显式离散的字符,且在训练中这些离散字符的词向量(Word Embedding) 始终保持不变
      • ——>很难寻找到最佳的模板
      • ——>效果不稳定
    •  连续的模板构建(Soft Prompt)
      • 让模型在训练过程中根据具体的上下文语义和任务目标对模板参数进行连续可调
离散的模板构建

Hard Prompt
启发式法(Heuristic-based Template)通过规则、启发式搜索等方法构建合适的模板
生成(Generation)根据给定的任务训练数据(通常是小样本场景),生成出合适的模板
连续的模板构建

​​​​​​​Soft Template
词向量微调(Word Embedding)
  • 显式地定义离散字符的模板,但在训练时这些模板字符的词向量参与梯度下降
  • 初始定义的离散字符用于作为向量的初始化
伪标记(Pseudo Token)不显式地定义离散的模板,而是将模板作为可训练的参数

4.1 soft prompt

The Power of Scale for Parameter-Efficient Prompt Tuning, EMNLP 2021

  • 记Y是LLM的输出,X是输入token,θ是Transformer的权重参数
    • NLP中的文本生成任务可以表示为P_\theta(Y|X)
  • 之前的hard Prompting在生成 Y 时向模型添加额外信息以作为条件:
    • 这一过程可以表示为P_\theta(Y|[P;X])
    • 也就是将prompt的语句和输入token 连接在一起,输入给pre-train 模型,在pre-train 模型中,用它的参数生成 embedding,经过一系列的流程得到对应的输出
  • soft prompt/prompt tuning 使用一组特殊Token作为prompt
    • 给定一系列 n 个Token,\{x_1,x_2,\cdots,x_n\}
      • 第一步是将这些Token向量化,形成一个矩阵X_e \in R^{n \times e} 
        • 【使用pre-train 模型的参数】
        • (e是向量空间的维度)
      • soft prompt以参数P_e\in R^{p\times e}的形式表示
        • (p是prompt的长度)
      • 将prompt与向量化后的输入连接起来,形成一个整体矩阵[P_e;X_e] \in R^{(p+n) \times e}
      • 该矩阵接着正常地通过编码器-解码器流动
      • 模型旨在最大化 P_{\theta,\theta_P}(Y|[P_e;X_e])的概率,但仅更新prompt参数θP

参考内容:一文详解Prompt学习和微调(Prompt Learning & Prompt Tuning)

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

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

相关文章

K8s下部署grafana

1. 系统要求 最小化的软硬件要求 最小化硬件要求 磁盘空间: 1 GB内存: 750 MiB (approx 750 MB)CPU: 250m (approx 2.5 cores) 2. k8s部署grafana步骤 1) 创建名字空间 kubectl create namespace my-grafana 2) 创建yaml vim grafana.yaml yaml包含如下三个资源对象 Ob…

C++11 数据结构2 线性表的链式存储,实现,测试

线性表的链式存储 --单链表 前面我们写的线性表的顺序存储(动态数组)的案例,最大的缺点是插入和删除时需要移动大量元素,这显然需要耗费时间,能不能想办法解决呢?链表。 链表为了表示每个数据元素与其直接后继元素之间的逻辑关系…

Chatgpt掘金之旅—有爱AI商业实战篇|SEO 咨询业务|(十七)

演示站点: https://ai.uaai.cn 对话模块 官方论坛: www.jingyuai.com 京娱AI 一、AI技术创业在SEO 咨询业务有哪些机会? 人工智能(AI)技术作为当今科技创新的前沿领域,为创业者提供了广阔的机会和挑战。随…

JVM垃圾回收(GC)

目录 目录 1.GC 简介 1.1. 引言 1.2. 何为 GC 1.2.1. 手动 GC 1.2.2. 自动 GC 引用计数法 标记清除 2.GC入门分析 2.1.碎片整理 1)对象创建时,执行写入操作越来越耗时 2)内存分配错误 2.2. 分代设想 2.3. 对象分配 对象内存分配过程 2.4. …

创建SAP替代增强的过程

发现公司的凭证增强程序里没有前人写过完全替代的增强。没有完全替代增强想要实现一些复杂一点的替代就很难实现。所以我来创建一个完全替代,并且把过程记录下来,方便以后回头查看。 因为我公司已经实施过增强了,下面这个从零开始实施增强的大…

编曲知识17:音高修正 节奏修正 压缩器应用 压缩数值算法

34届音高修正 节奏修正 压缩器应用 压缩数值算法独立音乐人训练营基地,七年在线教育编曲系统授课,培养了几千名独立音乐人https://app8epdhy0u9502.pc.xiaoe-tech.com/detail/l_660be2e3e4b023c02af7abbc/4?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 修音 准备工作 …

软件测试过程和测试生命周期

众所周知,软件生命周期包括,需求阶段、设计阶段、设计构建阶段、测试周期阶段、最后测试、实施阶段、最后运维和维护验收。每个阶段都需要在软件开发的生命周期中从前一阶段交付。需求转化为设计,设计转化为开发和开发成测试,经过…

AD7982BRMZRL7 二进制 500kSPS 模数转换芯片 ADI

AD7982BRMZRL7是一款由Analog Devices(亚德诺)公司生产的18位逐次逼近型模数转换器(ADC)。它主要用于将模拟信号转换为数字信号,适用于数据采集系统、嵌入式系统、工业控制和医疗设备等领域。 AD7982BRMZRL7的主要功能…

【Unity+Python】如何通过Socket进行通信

1、Unity端创建名为UnityClient.cs脚本代码(客户端): 注意:unity的规则中类,名和脚本文件名需要相同。 using System.Net.Sockets; using System.Text; using UnityEngine;public class UnityClient : MonoBehaviour {TcpClient client;Netw…

校园卡和流量卡哪个好

校园卡和流量卡哪个好 由于在某运营商工作过,很多人都会问我,校园卡和纯流量卡(也就是物联网卡)到底坑不坑!! 今天给大家解答一下,纯流量卡,也就是你打任何一家运营商客服专线都查不…

JavaScript:事件循环机制(同步、异步)(单、多线程)

事件循环机制: 多进程和多线程 1. 进程:程序的一次执行, 它占有一片独有的内存空间 2. 线程: CPU的基本调度单位, 是程序执行的一个完整流程 3. 进程与线程 * 一个进程中一般至少有一个运行的线程: 主线程 * 一个进程中也可以同时运行多个线程, 我们…

[大模型] BlueLM-7B-Chat WebDemo 部署

BlueLM-7B-Chat WebDemo 部署 模型介绍 BlueLM-7B 是由 vivo AI 全球研究院自主研发的大规模预训练语言模型,参数规模为 70 亿。BlueLM-7B 在 C-Eval 和 CMMLU 上均取得领先结果,对比同尺寸开源模型中具有较强的竞争力(截止11月1号)。本次发布共包含 7…

Golang | Leetcode Golang题解之第25题K个一组翻转链表

题目&#xff1a; 题解&#xff1a; func reverseKGroup(head *ListNode, k int) *ListNode {hair : &ListNode{Next: head}pre : hairfor head ! nil {tail : prefor i : 0; i < k; i {tail tail.Nextif tail nil {return hair.Next}}nex : tail.Nexthead, tail my…

微信小程序兼容iphone适配安全区域

背景&#xff1a; 小程序页面底部在ios中会有小黑条遮挡 上代码&#xff1a; padding-bottom: constant(safe-area-inset-bottom); /* 兼容 iOS < 11.2 */ padding-bottom: env(safe-area-inset-bottom); /* 兼容 iOS > 11.2 */ 项目描述&#xff1a; 微信小程序是通过…

DonkeyDocker-v1-0渗透思路

MY_BLOG https://xyaxxya.github.io/2024/04/13/DonkeyDocker-v1-0%E6%B8%97%E9%80%8F%E6%80%9D%E8%B7%AF/ date: 2024-04-13 19:15:10 tags: 内网渗透Dockerfile categories: 内网渗透vulnhub 靶机下载地址 https://www.vulnhub.com/entry/donkeydocker-1,189/ 靶机IP&a…

补充continue,break

一&#xff0c;continue 该关键字用于立即跳出本次循环&#xff0c;继续下一次循环 二&#xff0c;break 退出循环&#xff0c;不再执行

gma 2.0.8 (2024.04.12) 更新日志

安装 gma 2.0.8 pip install gma2.0.8网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版继…

Redis入门到通关之String命令

文章目录 ⛄1 String 介绍⛄2 命令⛄3 对应 RedisTemplate API❄️❄️ 3.1 添加缓存❄️❄️ 3.2 设置过期时间(单独设置)❄️❄️ 3.3 获取缓存值❄️❄️ 3.4 删除key❄️❄️ 3.5 顺序递增❄️❄️ 3.6 顺序递减 ⛄4 以下是一些常用的API⛄5 应用场景 ⛄1 String 介绍 Stri…

康耐视visionpro-CogCaliperTool操作工具详细说明

CogCaliperTool]功能说明:卡尺工具,用于测量距离 ◆CogCaliperTool操作说明: ①.打开工具栏,双击或点击鼠标拖拽添加CogCaliperTool ②.添加输入图像,右键“链接到”或以连线拖拽的方式选择相应输入源 ③.拖动屏幕上的矩形框到需要测量的位置。卡尺的搜索框角度与边缘不…

学习基于pytorch的VGG图像分类 day5

注&#xff1a;本系列博客在于汇总CSDN的精华帖&#xff0c;类似自用笔记&#xff0c;不做学习交流&#xff0c;方便以后的复习回顾&#xff0c;博文中的引用都注明出处&#xff0c;并点赞收藏原博主. 目录 VGG的数据集处理 1.数据的分类 2.对数据集的处理 VGG的分类标签设置 …