大模型LL04 微调prompt-Tuning方法入门(背景与发展)
1.NLP的四种范式
第一范式:非神经网络时代(机器学习)的完全监督学习(特征工程)
核心思想:依赖人工设计的特征和规则,结合统计学模型解决NLP任务。
需要大量标注数据和领域知识,特征提取繁琐(如词性标注、句法分析)
第二范式:基于神经网络的完全监督学习(架构工程)
核心思想:利用神经网络自动学习特征,减少人工干预。
第三范式:预训练+微调(目标工程)
核心思想:通过无监督预训练学习通用语言表示,再通过少量标注数据微调适配下游任务。
挑战:预训练成本高,微调可能过拟合小数据集
第四范式:预训练+提示(Prompt工程)
核心思想:重构下游任务形式以匹配预训练目标(如完形填空),实现少样本/零样本学习。
典型方法:Prompt-Tuning、P-Tuning(连续提示)、LoRA(参数高效微调)。
范式发展工程重心转移:从特征工程→架构工程→目标工程→Prompt工程,人力投入逐渐减少。
模型主导性增强:下游任务从“迁就模型”(微调)变为“迁就预训练任务”(Prompt)。
范式 | 特征工程 | 数据需求 | 模型类型 | 典型任务 | 优点 | 缺点 |
非神经网络完全监督学习 | 需要 | 标注数据 | 传统机器学习 | 文本分类、NER | 可解释性强 | 特征工程耗时,难以捕捉复杂语义 |
神经网络完全监督学习 | 不需要 | 标注数据 | 深度学习 | 机器翻译、文本生成 | 自动学习特征,表现优异 | 需要大量标注数据,可解释性差 |
预训练-微调 | 不需要 | 未标注+标注数据 | 预训练模型 | 几乎所有NLP任务 | 利用大规模数据,泛化能力强 | 预训练成本高,微调需要标注数据 |
提示学习 | 不需要 | 少量/无标注数据 | 预训练模型 | 分类、生成、推理 | 少样本/零样本学习,接近人类语言理解 | 提示设计复杂,对复杂任务泛化能力有限 |
2.Fine-Tuning
Fine-Tuning属于一种迁移学习方式,在自然语言处理(NLP)中,Fine-Tuning是用于将预训练的语言模型适应于特定任务或领域。Fine-Tuning的基本思想是采用已经在大量文本上进行训练的预训练语言模型,然后在小规模的任务特定文本上继续训练它。
但是fine tuning存在问题:
下游任务的目标和预训练的目标差距过大,可能导致过拟合。
微调过程中需要依赖大量的监督语料等等。
基于此,prompt tuning出现了
3. Prompt-Tuning
Prompt-Tuning, 通过添加模板的方法来避免引入额外的参数,从而让模型可以在小样本(few-shot)或者零样本(zero-shot)场景下达到理想的效果.
简单来说,Prompt就是你给大型语言模型(LLM)的所有输入,目的是引导它生成你想要的输出。它就像你和AI助手之间的“对话启动器”或“指令”。
你可以把它想象成:
- 给一个非常聪明的学生出考题:你的Prompt就是那个题目。题目出得好,学生才能理解你的意图,给出准确的答案。
- 和一位知识渊博但需要引导的专家交流:你的Prompt就是你提问的方式、你提供的信息以及你表达需求的具体方式。
设计、优化和完善Prompt的过程被称为Prompt Engineering (提示工程)。它是一门艺术和科学,旨在找到最有效的 Prompt,以最大化 LLM 在特定任务上的性能。通过不断尝试和调整 Prompt,我们可以让模型表现出更强大的能力。
3.1 Prompt(提示词)
3.1.1 组成
在提示词的组成上并没有一个官方的标准的答案,根据个人理解包括以下部分的提示词效果拔群(有些关键词可能在不同的地方有不同的英文名字,不过意思是一样的):
- 任务(Task)
明确模型需完成的具体动作,通常以动词开头。例如:
- “生成一篇关于太阳能的科普文章”
- “从文本中提取人名和地点”
- 作用:避免模糊指令,直接定义目标。
- 上下文(Context)
提供背景信息或约束条件,增强任务相关性。例如:
- “目标读者为中学生,需用生活化比喻解释技术原理”
- 作用:防止模型偏离主题或忽略关键限制。
- 示例(Exemplars)
少量输入-输出对(Few-shot),示范期望的格式或逻辑。例如:
- 输入:“今天天气很好” → 输出:“积极”
- 作用:通过案例对齐模型输出风格,提升一致性。
- 角色(Persona or Role)-对应的角色提升真的很大,比如你是一个暴躁的贴吧老哥,比各种诱导来让模型直接说脏话要快得多
指定模型的身份或行为倾向。例如:
- “你是一位资深律师,用专业术语分析合同条款”
- 作用:控制回答的专业性和语气。
- 格式(Format)
定义输出的结构化要求。例如:
- “以JSON格式输出,包含字段:作者、书名”
- “生成包含标题、引言、结论的三段式文章”
- 作用:便于后续数据处理或直接使用。
- 语气(Tone)-这个不会影响结果的正确性
设定文本风格(正式、幽默、简洁等)。例如:
- “用幼儿园老师讲故事的语气解释科学现象”
- 作用:适配不同场景的沟通需求。
- 约束条件(Constraints)
明确限制输出长度、排除内容等。例如:
- “摘要不超过200字,不讨论技术细节”
- 作用:避免冗余或无关信息。
- 动态上下文(Dynamic Context)
多轮对话中引用前文信息。例如:
- “根据前文讨论的糖尿病方案,制定饮食计划”
- 作用:保持对话连贯性。
- 思维链(Chain-of-Thought)-关键因素,有时候模型生成的答案并没有经过思考,只是在语料库中选择了最可能出现的词,因此需要引导模型思考,来产出真正的答案
分步推理提示。例如:
- “请逐步分析:1. 计算总成本;2. 分摊比例;3. 最终结果”
- 作用:提升复杂问题解答的准确性。
- 自检指令(Self-Check)
要求模型验证输出。例如:
- “检查回答是否有逻辑矛盾,并修正”
- 作用:减少错误或幻觉(Hallucination)。
3.1.2 设计原则与优化
- 具体化:避免模糊描述,如将“写得专业些”改为“采用IEEE论文格式”。
- 结构化:用分隔符(如冒号、箭头)组织指令,提升可读性。
- 迭代测试:通过AB测试对比不同Prompt版本的效果。
- 平衡简洁与完整:关键指令前置(前200字符决定70%效果),但避免冗长。
3.2 Fine-Tuning与 Prompt-Tuning的区别
基于fine-tuning的方法是让预训练模型去迁就下游任务
而基于prompt-tuning的方法可以让下游任务去迁就预训练模型, 其目的是将fine-tuning的下游任务目标转换为pre-training的任务。
Prompt-Tuning的核心理念是将下游任务转化为语言模型的任务,通过设计提示(Prompt)引导模型生成目标输出。
特征 | Fine-tuning (模型迁就任务) | Prompt Tuning (任务迁就模型) |
核心操作 | 修改预训练模型的参数,使其适应下游任务的数据和目标 | 调整少量参数(如软提示向量)或仅依赖输入设计(提示工程) |
模型状态 | 发生变化,学习新的特定任务知识 | 保持不变,利用已有的通用知识 |
任务目标 | 直接学习下游任务的特定目标函数 | 将下游任务目标重构为预训练模型更擅长的形式(如生成、补全) |
资源消耗 | 通常需要大量计算资源进行训练,为每个任务存储一个模型副本 | 计算资源消耗极少,只需存储和处理 Prompt |
目的 | 深度适应特定任务,可能牺牲通用性,但通常性能上限高 | 高效利用预训练模型的通用能力,在资源有限时效果显著,泛化性好 |
比喻 | 专业技能培训,改变学生本身来适应职业 | 提问艺术,用学生习惯的方式来让他解决特定问题 |
那么具体如何工作呢?我们接下来将以一个二分类的情感分析为例子,进行简单理解:
定一个句子:[CLS]I like the Disney films very much. [SEP]
传统的fine-tuning方法:将其通过BERT模型获得[CLS]表征之后再喂入新增加的MLP分类器进行二分类,预测该句子是积极的(positive)还是消极的(negative),因此需要一定量的训练数据来有监督微调训练。
prompt-tuning执行步骡:
构建模板(Template):生成与给定句子相关的一个含有[MASK]标记的模板,例如It was[MASK]并拼接到原始的文本中,获得prompt-tuning的输入:[CLS]I like the Disney films very much. [SEP] It was [MASK]. [SEP].将其喂入BERT模型中,并复用预训练好的MLM分类器,即可直接得到[MASK]预测的各个token的概率分布.
标签词映射(Verbalizer):因为[MASK]只对部分词感兴趣,因此需要建立一个映射关系。例如:如果[MASK]预测的词是“great”,则认为是positive类,如果是“terrible”,则认为是negative类.
训练:根据Verbalizer,则可以获得指定label word的预测概率分布,并采用交叉信息熵进行训练。此时因为只对预训练好的MM head(输出头)进行微调,所以避免了过拟合问题
3.3 Prompt-Tuning的发展历程
Prompt Tuning的发展历程可以概括为以下几个关键点:
- 从In-Context Learning到Prompt Tuning:Prompt Tuning的灵感来自于In-Context Learning,但它通过训练 Prompt Tokens,实现了更好的性能和参数效率。
- 从Hard Prompt到Soft Prompt:Prompt Tuning使用可学习的向量作为Prompt,而不是自然语言文本,从而避免了人工设计Prompt的困难。
- 从单层Prompt到多层Prompt:Prefix-Tuning在预训练模型的每一层都添加Prompt Tokens,从而更好地控制模型的行为。
- 从手工设计到自动化搜索:研究人员开始探索如何自动化Prompt Engineering,以进一步提高Prompt Tuning的效率和效果。
3.4 Prompt-Tuning的相关方法
3.4.1 In-Context Learning 上下文学习
ICL是Prompt-Tuning的轻量级原型,适合快速实验;Prompt-Tuning是ICL的深化,通过参数优化提升鲁棒性。
GPT-3开创性的提出了In-context Learning(ICL,上下文学习)的思想. (GPT-3相比于1和2指数提升了不止一个量级)即无须修改模型即可实现few-shot、one-shot、zero-shot的学习. 同时引入了Demonstrate Learning(示范学习), 即让模型知道与标签相似的语义描述,提升推理能力.
为什么会提出ICL:大模型“涌现能力”的发现
参数规模与能力跃迁:随着GPT-3、PaLM等模型的参数量突破千亿级,研究者发现模型在未微调的情况下,仅通过少量示例(few-shot)即可完成新任务,这种能力被称为“涌现能力”(Emergent Abilities)你也可以叫他模型一机灵O(∩_∩)O~。ICL成为评估和利用这种能力的核心方法。
与传统微调的对比:传统监督学习需通过反向传播更新模型参数(如BERT微调),而ICL完全依赖预训练阶段习得的知识,仅通过上下文示例激活模型隐含能力,大幅降低适配成本。
few-shot、one-shot、zero-shot
- zero-shot(0样本)
定义: 给出任务的描述, 然后提供测试数据对其进行预测, 直接让预训练好的模型去进行任务测试.
示例: 向模型输入“这个任务要求将中文翻译为英文. 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.
- one-shot(1样本)
定义: 在预训练和真正翻译的样本之间, 插入一个样本做指导. 相当于在预训练好的结果和所要执行的任务之间, 给一个例子, 告诉模型英语翻译为法语, 应该这么翻译.
示例: 向模型输入“这个任务要求将中文翻译为英文. 你好->hello, 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.
- few-shot(少样本)
定义: 在预训练和真正翻译的样本之间, 插入多个样本(一般10-100条)做指导. 相当于在预训练好的结果和所要执行的任务之间, 给多个例子, 告诉模型应该如何工作.
示例: 向模型输入“这个任务要求将中文翻译为英文. 你好->hello, 再见->goodbye, 购买->purchase, 销售->”, 然后要求模型预测下一个输出应该是什么, 正确答案应为“sell”.
3.4.2 PET模型
PET模型(Pattern-Exploiting Training)是一种基于提示(Prompt)的半监督学习方法,主要用于少样本(few-shot)文本分类和自然语言推理任务。其核心思想是通过设计模板(Pattern)和标签映射(Verbalizer),将分类任务转化为与预训练语言模型(如BERT的MLM任务)一致的完形填空问题,从而利用预训练模型的知识提升下游任务性能。
核心组件:
Pattern(Template): 记作T, 即上文提到的Template,其为额外添加的带有[mask]标记的短文本,通常一个样本只有一个Pattern, 由于不同的任务、不同的样本可能会有其更加合适的pattern,因此如何构建合适的pattern是Prompt-Tuning的研究点之一.
Verbalizer: 记作V, 即标签词的映射,对于具体的分类任务,需要选择指定的标签词(label word).例如情感分析中,我们期望Verbalizer可能是 (positive和negative是类标签). 同样,不同的任务有其相应的label word,但需要注意的是,Verbalizer的构建需要取决于对应的Pattern, 因此如何构建Verbalizer是另一个研究挑战.
PET是Prompt Tuning的早期实践
PET作为Prompt Tuning的雏形,首次系统化地提出了Pattern-Verbalizer Pair(PVP)框架,通过人工设计的模板(如“It was [MASK].”)和标签词映射(如“good→积极”),将分类任务转化为掩码语言模型(MLM)的完形填空问题。这一思想为后续Prompt Tuning提供了方法论基础。
基于PVP框架, 最需要关注的问题是如何选择或构建合适的Pattern和Verbalizer .
3.4.3 Prompt-Oriented Fine-Tuning(POFT,基于提示的微调)
Prompt-Oriented Fine-Tuning(基于提示的微调)是Prompt-Tuning(提示微调)的一种具体实现方式,两者均属于利用提示(Prompt)引导预训练模型适应下游任务的技术范式,但存在方法细节和应用场景的差异。
Prompt-Oriented Fine-Tuning(POFT,基于提示的微调)训练方法的本质是将下游目标任务转换为适应预训练模型的预训练任务,然后在这个转换后的任务形式上,利用标注数据进行全量微调,以达到更好的性能。
Prompt-Oriented Fine-Tuning方法中,预训练模型参数是需要更新的, 本质是Prompt-Tuning + Fine-Tuning的结合体. 该方法在Bert类相对较小的模型上表现较好,但是随着模型越来越大,如果每次针对下游任务,都需要更新预训练模型的参数,资源成本及时间成本都会很高,因此后续陆续提出了不更新预训练模型参数,单纯只针对prompt进行调优的方法.
针对Prompt调优方法的分类:Hard Prompt(离散提示) 和 Soft Prompt(连续提示)
- 硬提示(Hard Prompt):依赖人工设计的离散模板(如PET模型),适合少样本场景但性能波动较大。
- 软提示(Soft Prompt):如P-Tuning v2,通过连续向量自动学习提示,减少人工干预,提升泛化性。
3.4.4 Prompt Tuning方法 (NLG任务)
Prompt Tuning是2021年谷歌在论文《The Power of Scale for Parameter-Efficient Prompt Tuning》中提出的微调方法,它是一种针对大语言模型(如BERT、T5、GPT)的微调技术,特别适合资源受限场景或需要快速适配任务的情况。
它的核心思想是:在不修改或更新大型预训练语言模型(PLM)自身大量参数的前提下,通过学习一小段连续的、可训练的向量序列(即“软提示”Soft Prompt),将其作为输入的一部分,来引导 PLM 在特定下游任务上产生期望的输出。
P-Tuning V1 VS P-Tuning V2
特征 | P-Tuning v1 | P-Tuning v2 |
软提示位置 | 主要在输入嵌入层前插入 | 在每一层的输入中都插入软提示 (Deep Prompting) |
Prompt Encoder | 使用一个小型网络(MLP/LSTM)来编码软提示 | 不使用 Prompt Encoder,软提示直接可训练 |
软提示长度 | 通常较短 (5-20) | 通常较长 (20-100+) |
参数量 | 极少 (软提示长度 * 嵌入维度 + Prompt Encoder 参数) | 较多 (软提示长度 * 嵌入维度 * 模型层数) |
性能 | 在分类任务和 Few-shot 场景表现好,但复杂任务/大数据集有瓶颈 | 在大多数任务和数据集上可媲美甚至超越全量微调 |
适用任务 | 分类任务表现更佳 | 对序列生成/抽取任务(如问答、序列标注)效果显著提升 |
鲁棒性 | 对模型大小敏感,在小模型上表现可能不佳 | 对模型大小不敏感,在较小模型上也能表现良好 |