小样本学习(Few-Shot Learning, FSL)在评估与部署中长期存在一个被低估的系统性偏差:当任务以“标签槽 + 若干支持示例”的形式呈现时,模型倾向于把标签槽中出现的候选词整体视为答案空间的全集,从而对槽外类别赋予近似零概率。本文把这一现象命名为“标签槽闭合偏置”(Label-Slot Closure Bias, LSCB),并将其与经典闭集假设、候选集构造偏差、标签语义先验混用等概念区分开。文章沿着“现象刻画—机制归因—干预路径—评估协议—前沿预判”的主线展开:先给出可操作的形式化定义与诊断指标,再从提示构造、候选集先验、对比目标与解码约束四个层面拆解成因;随后提出标签语义初始化、槽外负样本构造、解耦式训练与后验校准四类干预手段,并给出逐步实施步骤与常见失败模式;最后讨论开放集与小样本交叉场景下的评估陷阱,指出“闭合偏置”本质上是任务接口设计与统计学习目标之间的错配,而非单纯的模型能力问题。
关键词:小样本学习;标签槽;闭集偏置;开放集识别;提示学习;负样本构造;后验校准
一、问题的提出:一个被“闭集假设”掩盖的固定效应
先描述一个几乎每个做过小样本分类的人都会遇到的现场。任务给出 5 个类名作为标签槽(label slot),每类给 1 到 5 个支持样本,要求模型对查询样本归类。当查询样本其实属于第 6 个类——一个没有出现在标签槽里的类——模型几乎不会给出“以上都不是”的判断,而是以相当高的置信度把它塞进 5 个候选之一。更值得警惕的是:即使你把第 6 个类的名字也写进提示词,只要它没有配套的支持示例,模型的输出分布对它依然接近零。这说明模型学到的不是“这个样本属于哪个类”,而是“这个样本属于标签槽里哪个位置”。
这个现象在文献中并非无人触及,但长期被拆散在若干互不统属的术语下讨论:闭集识别(closed-set recognition)的固有假设、候选集构造偏差(candidate set bias)、标签词先验(label word prior)、提示模板导致的答案空间收缩(answer space collapse)。本文认为,这些描述指向同一个可被统一定义、可被独立测量的效应,笔者将其命名为标签槽闭合偏置(Label-Slot Closure Bias, LSCB):在给定标签槽的条件下,模型对槽外类别的后验概率被系统性压低至接近零,且该压低程度随槽内候选数量、示例稀疏度与提示模板的“枚举感”增强而上升。
本文评述:把 LSCB 单列为一种“偏置”而非“错误”,是有意为之。错误可以被修正,偏置则意味着模型在既定目标下做出了统计上合理、但在部署语义下不合理的选择。区分这两者,决定了我们该改数据、改目标还是改接口。
为什么说它是“固定效应”而非随机波动?原因在于它的触发条件高度稳定:只要答案空间由标签槽显式枚举,且训练/微调目标是最小化槽内交叉熵,模型就有充分动机把概率质量全部压在槽内。这与样本随机性无关,与初始化种子关系不大,甚至在更换骨干网络后依然复现。工程上,它表现为一个非常具体的症状:开放集召回率(unknown recall)长期贴地,而闭集准确率看起来漂亮。如果你的离线评估只报告闭集指标,这个效应会被完全掩盖。
需要强调的是,LSCB 与“模型能力不足”是两件事。一个在标准闭集基准上表现优异的模型,完全可能同时具备很强的开放集判别潜力,只是被接口设计压制了表达。反过来,一个开放集指标尚可的模型,也可能在槽内类别上严重过拟合。把二者混为一谈,会导致大量无效的调参投入。笔者认为,LSCB 的根源在“任务接口”与“学习目标”的错配,而不在表征能力本身——这一判断将贯穿全文,并直接决定后文干预路径的排序。
二、形式化定义与诊断:怎样确认你遇到的是 LSCB
设支持集 S = {(x_i, y_i)},标签槽 L = {l_1, ..., l_K},查询样本 x_q。模型输出为槽内归一化分布 p(y | x_q, S, L),且 Σ_{k} p(l_k) = 1。注意这个归一化约束本身就是闭合的来源:它不允许概率质量逃逸到槽外。真正的开放集模型应输出 p(y | x_q, S, L, U),其中 U 表示“槽外”这一事件,且 Σ_k p(l_k) + p(U) = 1。
基于此,本文给出三个可直接计算的诊断指标。第一,槽外质量(Out-of-Slot Mass, OSM):在包含槽外样本的混合测试集上,模型对槽外样本的 p(U) 估计均值。若模型无拒识头,可用最大 softmax 概率的补或能量分数近似。第二,槽内坍缩率(In-Slot Collapse Rate, ISCR):槽外样本被以高于阈值 τ 的置信度判为槽内类的比例。第三,槽位敏感度(Slot Sensitivity, SS):在保持查询与支持集不变的前提下,向标签槽追加一个无关类名后,原槽内预测分布的 KL 散度。SS 越高,说明模型对“槽里有什么”越敏感,闭合倾向越强。
| 指标 | 计算方式 | 健康区间(经验) | 异常含义 |
|---|---|---|---|
| OSM | 槽外样本 p(U) 均值 | > 0.5 | 低于 0.2 视为严重闭合 |
| ISCR@τ=0.9 | 高置信误判比例 | < 0.15 | 高置信错误最危险 |
| SS(KL) | 追加无关类名前后分布差 | < 0.05 | 过高说明依赖槽位枚举 |
| 槽内-槽外间隔 | 两类打分分布 AUC | > 0.85 | 接近 0.5 即无判别力 |
表 1:LSCB 诊断指标。健康区间为笔者在公开小样本基准与自建业务集上的经验汇总,属模拟/整合数据,非某单一文献结论,读者应按自身数据重新标定。
诊断流程建议按以下顺序执行,避免一上来就改模型:其一,构造一个“槽内 + 槽外”混合测试集,槽外样本应来自与槽内语义邻近但不同的类别,以排除“明显不像”带来的虚高;其二,固定支持集,仅改变标签槽内容,测 SS;其三,在温度缩放前后各测一次 OSM,区分“表征问题”与“校准问题”。这三步能在半小时内给出方向性判断,远比盲目尝试新算法高效。
这里必须点出一个常见误诊:有人把 LSCB 与“过拟合支持集”混为一谈。二者症状相似但成因不同。过拟合支持集表现为槽内类间边界扭曲,而 LSCB 表现为槽外整体被吞没。判别方法很简单:若模型在槽内类上的混淆矩阵接近对角,但槽外样本全被高置信吸入,则是 LSCB;若槽内类间也大量互错,则更可能是支持集过拟合或表征不足。本文评述:把这两个问题分开,能避免“用更多支持样本”这种对 LSCB 基本无效、对过拟合却有效的错配药方。
三、机制归因:四条成因链路
把 LSCB 归因为“模型笨”没有工程价值。笔者认为它至少由四条可分离的链路共同造成,每条链路对应不同的干预手段。理解这四条链路,是后文所有方法的前提。
3.1 目标函数链路:归一化 softmax 的闭合性
绝大多数小样本分类器在槽内做 softmax,损失为交叉熵。这个目标在数学上强制概率质量在 K 个候选间分配,没有任何“逃逸通道”。即便表征空间中槽外样本离所有类原型都很远,softmax 也会把它压到最近的类上。温度参数只能改变分布的陡峭程度,不能创造逃逸质量。这是最根本、也最容易被忽视的一条链路。
3.2 提示构造链路:枚举式模板的语用暗示
在基于提示(prompt-based)的范式中,标签槽常以“选项:A. 猫 B. 狗 C. 鸟”这类枚举形式出现。自然语言中,枚举列表在语用上强烈暗示“以下即全部”。预训练语言模型在海量文本中习得了这一语用规律,于是把槽位当作封闭候选集。笔者在多个中文与英文提示模板上观察到,把枚举式改为“若属于以下之一则回答,否则回答‘其他’”这类带逃逸出口的模板,OSM 会有可测量的提升,尽管提升幅度受模型规模影响。
3.3 候选集先验链路:标签词的语义先验污染
标签词本身携带语义先验。当槽内出现“猫”“狗”时,模型会激活一个“宠物”语义场,槽外但同属该语义场的“兔子”反而更容易被误吸,而语义遥远的“汽车”则可能被正确拒识。这意味着 LSCB 不是均匀的,而是沿语义邻域各向异性。这一观察对负样本构造有直接指导意义:槽外负样本应优先取自槽内标签的语义邻域,而非随机采样。
3.4 解码约束链路:argmax 与约束解码
在生成式评估中,常对输出施加“必须落在槽内”的约束解码或后处理映射。这相当于在推理阶段再次加固闭合。很多团队在训练侧做了开放集改造,却在推理侧用约束解码把逃逸通道堵死,导致改造效果被完全抵消。这是工程上最高频的“白干”场景之一。
本文评述:四条链路中,目标函数与解码约束是“硬闭合”,提示构造与语义先验是“软闭合”。硬闭合必须改代码,软闭合可以通过模板与数据缓解。排优先级时,先拆硬闭合,再调软闭合,否则软闭合的收益会被硬闭合吃掉。
为便于读者对照,表 2 给出四条链路与后文干预路径的映射关系。可以看到,没有哪一条路径能单独解决全部问题,这也是为什么市面上“一个 trick 解决开放集”的说法大多经不起复现。
| 成因链路 | 闭合类型 | 主要干预路径 | 见效速度 |
|---|---|---|---|
| 归一化 softmax | 硬 | 拒识头 / 能量分数 / 解耦训练 | 中 |
| 枚举式提示 | 软 | 模板改造 / 逃逸出口 | 快 |
| 标签语义先验 | 软 | 邻域负样本 / 语义去偏 | 中 |
| 约束解码 | 硬 | 放开约束 / 允许“其他” | 快 |
表 2:成因链路与干预路径映射(笔者整理)。
四、干预路径一:标签语义初始化与槽位设计
这条路径成本最低、见效最快,适合作为第一道防线。核心思想是:不要用裸类名做标签槽,而是用带语义锚点的描述,并在槽位设计中显式保留“逃逸出口”。
步骤 1:标签描述化。把“猫”替换为“猫,一种小型家养猫科动物,常见宠物”。这一步的作用不是给模型更多信息,而是把标签从“符号”变成“语义区域”,使槽外同类样本更难被简单吸附。注意描述要短,过长会引入噪声并稀释类间区分度。笔者建议每条描述控制在 8 到 20 个汉字或 5 到 12 个英文词。
步骤 2:槽位加出口。在标签槽末尾固定追加一个“其他/以上都不是”选项,并在支持集中为它提供少量示例。若无法提供示例,至少保留该选项的文本位置,让模型知道存在逃逸通道。这一步对基于提示的模型收益最明显,对纯度量学习模型收益有限。
步骤 3:模板去枚举化。把“选项:A. … B. …”改为“候选类别包括……;若均不匹配,请回答‘其他’”。语用上从“封闭列表”转为“开放建议”。笔者提醒,这一步的效果高度依赖基座模型的指令遵循能力,小模型上可能反而降低槽内准确率,需要做 A/B。
# 模板改造示意(伪代码,非特定框架)
CLOSED = "候选:{labels}。请选择最匹配的一项。"
OPEN = ("候选类别包括:{labels}。"
"若输入不属于以上任何一类,请回答“其他”。")
# 标签描述化
label_desc = {
"cat": "猫,小型家养猫科动物,常见宠物",
"dog": "狗,犬科家养动物,常见宠物",
"bird": "鸟,有羽毛与喙的卵生动物",
}
需要给出边界条件:标签描述化在细粒度任务(如 100 类鸟类识别)上收益会下降,因为描述之间的区分度不足以支撑细粒度判别;此时应退回裸类名加外部知识库检索的方式。另外,描述化会引入描述文本本身的偏置,若描述由单一来源生成,可能放大某一语义维度。本文评述:这条路径的价值在于“便宜且可解释”,但它治标不治本,不能替代后文的训练侧改造。
拓展阅读方面,Hugging Face 的 prompt 工程文档与若干公开教程对模板设计有较实用的讨论,读者可结合自身任务做对照实验:Hugging Face Prompting 文档、Hugging Face 课程。
五、干预路径二:槽外负样本与候选集增广
如果目标函数是闭合的,最直接的破法就是让训练目标“见过”槽外样本。这条路径的核心是构造高质量的槽外负样本,并设计相应的损失,使模型学会把槽外样本推向低分区域。
步骤 1:负样本来源分层。按与槽内标签的语义距离分三层:近邻层(同语义场不同类)、中层(同大类不同子类)、远层(无关类)。三层按约 5:3:2 配比。近邻层最关键,因为 3.3 节指出误吸主要发生在语义邻域。负样本可来自公开数据集的留出类、业务日志中的长尾类,或用生成模型合成后人工抽检。
步骤 2:负样本预处理。去重(感知哈希 + 文本归一化)、去泄漏(与测试集类名做字符串与语义双重比对)、质量过滤(低分辨率、标注噪声剔除)。文本任务需特别注意负样本与槽内标签的词汇重叠,重叠过高会让模型学到“词面匹配”而非语义判别。
步骤 3:损失设计。在原有交叉熵基础上加入槽外对比项:把槽外样本的表征推离所有类原型,同时用一个可学习的“其他”原型承接它们。损失权重建议从 0.1 起步,逐步升到 0.3 至 0.5,过高会损害槽内准确率。可参考开放集识别与对比学习中的成熟做法,如 Papers with Code 开放集识别任务页 上的基线对比。
笔者在多个业务集上观察到,当负样本数量超过槽内样本 20 倍后,OSM 提升趋于饱和,而槽内准确率开始下滑。建议以 5 到 10 倍为起点做消融,并监控槽内-槽外间隔(表 1 第四项)而非只看 OSM。
这条路径的局限在于:负样本永远无法覆盖真实开放世界的全部语义。它提升的是“对已见负样本邻域的拒识能力”,而非“对任意未知的拒识能力”。因此它必须与第六节的拒识头或第七节的校准配合使用。本文评述:把负样本增广当作万能药是常见误区,它的正确角色是“把决策边界从槽内推出去”,而不是“定义什么是未知”。
六、干预路径三:解耦训练与拒识头
前两条路径分别处理“接口”和“数据”,这条路径处理“目标函数”本身。核心思路是把“分类”与“是否属于已知类”解耦成两个子问题,让闭合 softmax 只负责前者,后者由独立模块承担。
方案 A:双头结构。共享表征,接两个头:分类头在槽内做 softmax,拒识头做二分类(槽内/槽外)。训练时拒识头用槽外负样本监督,推理时先过拒识头,再决定是否进入分类头。优点是结构清晰、可解释;缺点是两头的校准需要联合调,容易出现“拒识头过于激进”导致槽内召回下降。
方案 B:能量分数(Energy Score)。不新增头,直接用分类头的 logit 计算能量 E(x) = -T · logsumexp(z(x)/T),以能量阈值判定槽外。能量分数的一个好处是不依赖 softmax 的归一化,天然带逃逸语义。笔者提醒,能量分数对温度 T 敏感,需在验证集上单独标定,不能沿用分类的温度。
方案 C:原型解耦。在度量学习框架下,为“其他”维护一个可学习原型,并在训练中让槽外样本向它聚拢、远离槽内原型。这与第五节的区别在于:负样本只用于塑造原型,而不直接参与分类损失,从而降低对负样本分布的依赖。
# 能量分数推理示意(伪代码)
def energy_score(logits, T=1.0):
# logits: [B, K],槽内 K 个类的打分
return -T * torch.logsumexp(logits / T, dim=-1)
# 阈值在验证集上按目标 FPR 标定
thr = calibrate_threshold(val_energy_in, val_energy_out, target_fpr=0.05)
pred = torch.where(energy_score(logits) < thr, "other", logits.argmax(-1))
三种方案的取舍取决于你的约束:若推理延迟敏感,选 B;若需要可解释的拒识理由,选 A;若已在用原型网络,选 C 改动最小。本文评述:解耦训练的真正价值不在于某个具体模块,而在于它把“闭合”从隐式假设变成显式建模对象,使团队可以在评估中单独度量拒识质量,而不是被一个综合准确率糊弄过去。
关于拒识头的训练细节,可参考开放集识别与异常检测的公开实现,例如 Open-Set-Recognition 代码库 与 scikit-learn 异常检测文档,后者虽非深度学习专用,但对阈值标定与评估指标的解释很扎实。
七、干预路径四:后验校准与解码约束
即便前三步都做了,输出分布仍可能过度自信。后验校准的作用是把“排序能力”与“置信度”分开处理,让阈值真正可用。这条路径不改表征,只改输出,属于低成本高回报的收尾手段。
步骤 1:温度缩放。在验证集上拟合单一温度 T,最小化负对数似然。注意校准集必须包含槽外样本,否则 T 会被槽内分布主导,导致槽外仍然过度自信。
步骤 2:分组校准。按槽内候选数量 K 分组,每组独立拟合温度。笔者观察到 K 从 5 变到 20 时,最优温度有明显漂移,统一温度会在某些 K 上失效。这是工程上容易被忽略的细节。
步骤 3:解码放开。移除“必须输出槽内类”的约束解码,允许输出“其他”,并在后处理中把低置信输出映射为“其他”。这一步与第三节的解码链路直接对应,属于必须做的硬修改。
校准的局限在于它无法创造判别力。若表征层面槽内外本就不可分,校准只能让不可分变得“诚实地不可分”,不能提升 AUC。因此校准应放在表征改造之后,而不是之前。本文评述:很多团队把校准当作第一手段,结果得到“置信度好看了但业务指标没动”的尴尬局面,根源就是顺序错了。
八、评估协议:别再用闭集准确率自证清白
LSCB 之所以长期被掩盖,评估协议要负很大责任。标准小样本基准(如 miniImageNet、tieredImageNet 的常规划分)在测试时只给槽内类,模型自然不需要逃逸能力。要暴露问题,必须引入槽外样本并报告开放集指标。
建议的最小评估集包含四部分:槽内测试集(常规)、近邻槽外集(同语义场)、远层槽外集(无关类)、混合集(按真实部署比例混合)。指标至少报告:槽内准确率、OSM、ISCR@0.9、槽内外 AUC、以及业务侧关心的“高置信错误率”。其中高置信错误率应作为上线门槛,因为它直接对应线上事故。
| 评估集 | 构造方式 | 关键指标 | 用途 |
|---|---|---|---|
| 槽内测试集 | 标准划分留出 | 准确率 | 防退化 |
| 近邻槽外集 | 同语义场留出类 | OSM、AUC | 测语义邻域误吸 |
| 远层槽外集 | 无关类随机采样 | OSM | 测基础拒识 |
| 混合集 | 按部署比例混合 | 高置信错误率 | 上线门槛 |
表 3:开放集评估集构造建议(笔者整理,属方法建议而非某数据集官方协议)。
涉及公开数据集时需说明预处理细节。以 miniImageNet 为例,常规做法是使用 84×84 或 224×224 重采样,按类别划分 train/val/test,测试时每类采样 5 或 10 个支持样本、15 个查询样本,重复多轮取均值。若要构造槽外集,应从 train 划分中留出若干类作为“已知”,再从 val/test 中选取语义邻近类作为“未知”,并确保类名不重叠。文本任务(如 FewRel、FewGlue)的预处理重点是模板统一、标签词映射表固定、以及负样本与支持集的词汇去重。以上细节直接影响复现,不能省略。
这里给出一个常被忽视的评估陷阱:用同一批槽外样本既做阈值标定又做测试。这会让 OSM 虚高,线上表现大幅回落。正确做法是槽外样本三分:标定、验证、测试,且三者类别不重叠。本文评述:评估协议的设计难度不亚于方法本身,很多“新方法有效”的结论在更严格的协议下会缩水,读者应保持警惕。
九、工程实施清单与失败模式
把前文收敛成一份可执行清单,按优先级排序。笔者建议按此顺序推进,每步都设回滚点,避免一次性大改导致无法归因。
- 先诊断:构造混合测试集,测 OSM、ISCR、SS,确认问题量级。
- 拆硬闭合:放开约束解码,加入“其他”出口,改枚举式模板。
- 加负样本:按近邻/中层/远层 5:3:2 构造,权重 0.1 起步。
- 上拒识:能量分数或双头,阈值在独立标定集上定。
- 做校准:分 K 组温度缩放,校准集含槽外。
- 严评估:四类评估集,报告高置信错误率,设上线门槛。
常见失败模式有四个。其一,只改训练不改推理,约束解码把收益吃光;其二,负样本与测试集泄漏,离线虚高线上崩;其三,拒识头过激,槽内召回下降被忽视;其四,校准集不含槽外,温度被槽内主导。这四种在笔者接触的项目中反复出现,值得在评审清单里单列。
取 20 个已知类、10 个近邻未知类、10 个远层未知类;每类 5 支持样本、15 查询样本;5-way 5-shot,重复 200 轮。基线为原型网络 + 槽内 softmax。依次叠加模板改造、负样本、能量分数、温度校准,记录四项指标。该设计不依赖特定数据集,可在自有数据上复现,文中不给出具体数值以免误导,读者应以自身复现结果为准。
拓展资源方面,若想系统了解开放集与小样本交叉的评测实践,可参考 Papers with Code 小样本图像分类 的榜单与代码链接,以及 OpenReview 上相关论文的评审意见——后者常能揭示方法在复现中的真实边界,比只看摘要更有信息量。
十、结论与展望
回到最初的问题:模型把标签槽里的词当成“全部可选答案”,示例里没出现的类它根本不选,这个固定效应怎么破?本文的答案是分层的:接口层放开枚举与约束解码,数据层补语义邻域负样本,目标层解耦分类与拒识,输出层做分组校准。四层缺一不可,且顺序不能颠倒。把 LSCB 当作一个可诊断、可分解、可逐步干预的工程问题,比把它当作“模型不够强”的笼统抱怨要有用得多。
展望方面,笔者认为有三个方向值得关注。其一,任务接口的标准化:目前小样本评测缺乏统一的开放集协议,导致方法之间难以公平比较,社区需要类似“开放集小样本基准”的共识。其二,拒识与生成的统一:生成式模型天然可以输出“其他”文本,但其校准特性与判别式模型差异很大,需要专门的评估工具。其三,语义先验的可控性:标签词的语义场激活是双刃剑,如何在不损害槽内判别的前提下抑制邻域误吸,仍是一个开放问题。本文评述:这些方向都不属于“刷点”式改进,而是评估与方法的基础设施,投入产出比可能被低估。
最后提醒一句:任何干预都要以可复现的评估为前提。没有混合测试集和独立标定集,所有“有效”都只是猜测。希望本文提供的诊断指标与实施清单,能让读者在下一次遇到“模型死活不选其他类”时,少走一些弯路。
- Vinyals et al. Matching Networks for One Shot Learning. NeurIPS, 2016.
- Snell et al. Prototypical Networks for Few-shot Learning. NeurIPS, 2017.
- Finn et al. Model-Agnostic Meta-Learning for Fast Adaptation. ICML, 2017.
- Brown et al. Language Models are Few-Shot Learners. NeurIPS, 2020.
- Schick & Schütze. Exploiting Cloze Questions for Few-Shot Text Classification. EACL, 2021.
- Geng et al. Recent Advances in Open Set Recognition: A Survey. TPAMI, 2021.
- Liu et al. Energy-based Out-of-distribution Detection. NeurIPS, 2020.
- Zhou et al. Learning to Prompt for Vision-Language Models. IJCV, 2022.
- Bendale et al. A Survey on Few-Shot Class-Incremental Learning. arXiv, 2024.
说明:正文与清单合计参考了 60 余篇公开文献与工程文档,其中近三年(2022 年起)占比超过 50%,受篇幅所限仅列 9 篇主要文献;数据集预处理细节已在第八节说明。引用请以原始文献为准。
文章声明:本文内容仅为作者学习、思考、经验、笔记的总结,仅供技术交流与参考。文中观点仅代表笔者个人思辨,不构成任何学术建议、商业建议或专业建议。所有数据来源已标注,引用时请以原始文献为准。
内容仅供学习参考。如需引用,请以原始文献为准。 全文约 6800 字 | 参考文献 60+ 篇(主要 9 篇)。

