Universal Self-Adaptive Prompting
USP(Universal Self-Adaptive Prompting,Wan et al., 2023b)可以理解为:把 COSP 的“自适应挑示例”推广成一个更通用的、可用于各种任务的自动 few-shot 构造方法。它的主要变化有三点:(1) 用无标注数据也能造示例;(2) 用更复杂的打分函数挑示例,而不是靠“答案一致性”;(3) 推理阶段不再用 Self-Consistency(不做多次采样投票)。
下面按“是什么—怎么做—适用/不适用—例子”讲清楚。
1) USP 想解决什么问题(相对 COSP 的痛点)
COSP 依赖两件事:
- 你有一批“题目-答案”或至少是“可投票的最终答案”形式,才能用 **agreement(答案一致性)**筛选示例;
- 最终还要用 Self-Consistency 多次采样来提升效果(成本/延迟更高)。
但很多任务并不天然“可投票”(如写作、摘要、开放问答、多标签信息抽取),或者你手里只有无标注数据(只有输入没有正确输出),这时 COSP 很难直接套用。
USP 的目标就是:
不依赖标注、也不依赖自一致投票,把“自动造示例 + 自动挑示例”做成更普适的流程。
2) USP 的核心思路(概念版)
A. 用无标注数据生成 exemplars(输入→模型生成输出)
给一批无标注输入 (x)(只有问题/文本/图片描述等),让模型为每个 (x) 生成一个候选输出 (\hat{y}),从而构造“伪示例”:
- 示例 = (输入 x,模型生成的输出 (\hat{y}))
- 这些示例不保证正确,但数量大、覆盖面广
B. 用“更复杂的打分函数”筛选示例
USP 不用“多次采样后看答案一致不一致”这种只适合有明确最终答案的标准,而是引入更通用的评分:对每个候选示例(x, (\hat{y}))评估它“作为 few-shot 示例”是否有用。
直观上,常见会考虑这类信号(不要求你全会实现,但理解方向):
- 格式/约束满足度:输出是否符合任务要求(JSON、字段、长度、标签集合)
- 可解释性/步骤合理性:如果任务需要推理链,推理是否自洽
- 任务相关性/信息量:是否覆盖关键模式、边界情况
- 一致性/自洽性(但不是 Self-Consistency 投票):例如同一输入的不同视角描述是否矛盾
- 对目标任务的“带来增益”:更像“这个示例放进 prompt 后能不能让模型在开发集上变好”(工程上常用小开发集近似评估)
一句话:
USP 用“可泛化的质量/效用评分”来挑示例,而不是用“答案多数投票的一致性”来挑示例。
C. 推理阶段不使用 Self-Consistency
最终拿到 few-shot exemplars 后,USP 用它们组成一个最终 prompt,对每个新输入只生成一次(或常规单次解码),不再多次采样投票:
- 优点:成本低、延迟小,更适合在线服务
- 代价:失去 Self-Consistency 带来的“采样集成”增益,需要更依赖 exemplar 质量与评分策略
3) USP 适合与不适合的应用场景
适合
- 无标注数据多、标注贵的任务
- 客服意图分类、信息抽取、摘要、风格改写、质量检查等
- 输出不是单一离散答案、难以做投票聚合的任务
- 摘要、改写、结构化抽取(字段可能多且开放)、长文本生成
- 对延迟/成本敏感的线上场景
- 不用 Self-Consistency,多次采样成本直接省掉
- 需要跨任务通用的一套自动造 prompt 流程
- 同一套“生成候选示例→打分筛选→拼 prompt”的流水线换任务即可复用
不适合
- 强可验证、且 Self-Consistency 能显著增益的任务
- 数学/逻辑/选择题:COSP + Self-Consistency 往往更强
- 模型对任务几乎不会做、生成的伪标注质量很差
- 如果 (\hat{y}) 大量胡写,评分再复杂也很难选出真正有帮助的 exemplars
- 没有任何可用于评估/打分的信号
- 连格式约束、规则校验、少量开发集都没有时,“复杂评分”无从落地
4) 至少 3 个中文提示词写法示例(围绕 USP 的三步:生成→评分→组装→推理)
说明:USP 的关键在“用无标注数据生成 exemplars,并用评分选它们”。所以例子会体现这两步怎么写 prompt。你在工程里会对一堆无标注输入重复调用“生成候选示例 prompt”,再调用“评分 prompt/规则”,最后把 top-k 拼进最终 prompt。
例子1:用无标注数据生成“信息抽取”任务的 exemplar(生成阶段)
场景:从用户投诉文本中抽取结构化字段(无标注)。
生成候选 exemplar 的 Prompt(对每条无标注文本运行一次):
你是信息抽取助手。请从下面文本中抽取字段,并严格按 JSON 输出。
字段:
- "产品": 文本中提到的产品或服务名称(没有则填空字符串)
- "问题类型": 从集合["物流","质量","售后","价格","其他"]中选一个
- "诉求": 用户希望如何解决(尽量简短)
- "情绪强度": 1-5 的整数
文本:{一条无标注投诉文本}
只输出 JSON,不要输出其他内容。
你会得到候选示例:(文本 x, 模型输出 (\hat{y})=JSON)
例子2:对候选 exemplar 打分并筛选(评分阶段,USP 的关键)
场景:给上一步生成的候选 exemplar 打分,选出最适合作为 few-shot 示例的若干条。
评分 Prompt(对每个候选 exemplar 运行一次):
你是“few-shot 示例质量评估器”。请评估下面这条示例是否适合作为信息抽取任务的示范。
评分维度(0-5 分):
- 格式正确性:是否为合法 JSON、字段齐全、值类型正确
- 约束满足:问题类型是否在给定集合内,情绪强度是否为1-5整数
- 抽取合理性:字段是否与原文对应,是否出现编造信息
- 教学价值:作为示例是否清晰、有代表性(覆盖常见/边界情况)
输入文本:{文本 x}
模型输出:{候选 JSON \hat{y}}请输出 JSON:
{"总分":0-20,"各维度":{"格式":x,"约束":x,"合理性":x,"教学价值":x},"是否入选":"是/否","原因":"一句话"}
工程里你可以按“总分”排序,取 top-k 进最终 prompt。
这就是 USP 相对 COSP 的“更复杂打分函数”的落地方向(可由规则+模型打分结合)。
例子3:把筛选出的 exemplars 拼成最终 few-shot prompt(推理阶段:不使用 Self-Consistency)
场景:线上抽取时只跑一次生成,不做多次投票。
最终推理 Prompt(单次生成):
你是信息抽取助手。请学习下面示例的输出格式与字段含义,然后抽取新文本的信息。
示例1:
文本:{入选示例文本1}
输出:{入选示例JSON1}示例2:
文本:{入选示例文本2}
输出:{入选示例JSON2}示例3:
文本:{入选示例文本3}
输出:{入选示例JSON3}现在抽取:
文本:{新文本}只输出 JSON,不要输出其他内容。
注意:这里没有“请采样多次并投票”的环节——这就是“USP 不用 Self-Consistency”。
例子4(再给一个开放式任务):摘要任务的 USP 示例生成与筛选
生成候选摘要 exemplar(无标注输入=文章):
你是摘要助手。请将下面文章总结为不超过120字的中文摘要,要求:覆盖关键事实、避免评价、不要引入文中没有的信息。
文章:{无标注文章}
评分(是否“忠实 + 覆盖关键点 + 无幻觉”):
你是摘要质量评估器。给出0-10分并判断是否入选 few-shot 示例。
评估要点:
- 忠实性:是否出现文中没有的事实
- 覆盖度:是否包含时间/人物/事件结果等关键点
- 简洁性:是否<=120字
输入文章:{文章}
候选摘要:{模型摘要}
输出格式:{"分数":0-10,"是否入选":"是/否","主要问题":"一句话"}
然后把高分摘要对作为 few-shot exemplars 拼进最终摘要 prompt。
5) USP 与 COSP 的一句话对比(帮你记忆)
- COSP:用 Self-Consistency 在有标注/可投票任务里挑“高一致”的示例,并且推理时也 Self-Consistency。
- USP:用 无标注数据生成示例 + 更通用的评分函数挑示例,推理时 不做 Self-Consistency,更通用、更便宜但更依赖筛选质量。
如果你告诉我你的具体任务类型(分类/抽取/摘要/对话/代码/数学)以及你是否有少量标注开发集,我可以把 USP 的“评分函数”细化成一套你能直接落地的打分维度与阈值,并给出一份可复制的最终 prompt 模板(含示例插槽)。