封面

  • 日期:2026-10-08
  • 读者:研究生、科研新人和工程型研究者
  • 范围:一个小模型、64条开发样本、两组四示例及正反顺序;不是完整基准或未见测试集。

摘要:给了例子,不等于教对了

给模型四个带答案的例子,再让它判断新句子,直觉上应当比直接提问更可靠。但例子不仅提供任务信息,也改变输入长度、标签位置和上下文分布。“加了四个例子”不是足够完整的实验条件。

**本次实际验证:**固定SmolLM2-135M-Instruct和SST-2的64条开发样本,零示例答对32条;同样四个示例,正序答对31条,反序答对37条。另一组的两种顺序分别答对33条和44条。我们没有找到普遍更好的顺序,而是发现:示例数量相同、长度相同,内容和排列仍会改变测量。

复现价值:从总分转向配对观察

Few-shot在本文指上下文学习:把少量输入与答案放进提示,模型在推理时利用它们;没有梯度更新,也不是用四条数据微调。零示例同样不意味着模型从未经过指令训练。

**论文报告:**Lu等在ACL 2022研究示例排列敏感性,指出一个模型上的好排列未必能迁移给另一个模型。[1] Zhao等在ICML 2021讨论提示带来的答案偏向及上下文校准。[2] 这些工作支持检查顺序与答案先验,不意味着它们的提升幅度会在本篇重现。

近期工作中,Cobbina与Zhou的EMNLP 2025论文区分了“示例内部怎样排列”和“整组示例放在系统提示、用户消息的什么位置”,同时衡量准确率与预测变化。[3] 本篇只处理前者,示例始终在问题之前;不把两类变量混为一种位置效应,也没有复现该论文的完整评测。

相对上一篇,我们保留模型、题目、候选和计分方法,只增加示例集合与排列。新增产物不是最好的一行分数,而是五种条件下同一道题的对应记录。

核心思想:同一题才是比较单位

令DsD_s为示例集合,π\pi为顺序,xix_i为第ii道问题。拼接后的上下文记为C(Ds,π,xi)C(D_s,\pi,x_i),候选得分为:

sij(s,π)=∑t=1mjlog⁡pθ(yjt∣C(Ds,π,xi),yj,<t).s_{ij}^{(s,\pi)}=\sum_{t=1}^{m_j}\log p_\theta(y_{jt}\mid C(D_s,\pi,x_i),y_{j,<t}).

jj是候选位置,mjm_j是候选token数,θ\theta是冻结权重。选择总对数似然较大的候选,不做长度归一化;并列时取第一个。候选仍为negative与positive,不改成字母,不自由生成,也不增加答案抽取器。

对条件aa与bb,先计算每道题的正确性差值,再求平均:

Δb−a=1N∑i=1N(ci(b)−ci(a)).\Delta_{b-a}=\frac{1}{N}\sum_{i=1}^{N}\left(c_i^{(b)}-c_i^{(a)}\right).

cic_i为零或一,本次N=64N=64。五种条件产生320条预测,但不是320道独立问题。配对记录才能说明多答对的题来自哪里,不能把重复测量当作样本量增长。

预测翻转率回答另一个问题:

Fb,a=1N∑i=1N1[z^i(b)≠z^i(a)].F_{b,a}=\frac{1}{N}\sum_{i=1}^{N}\mathbf{1}\left[\hat z_i^{(b)}\ne\hat z_i^{(a)}\right].

z^i\hat z_i是预测类别。准确率不变也可能有很多题改了答案,只是得失抵消。因此同时报告错转对、对转错和预测翻转数,不能只看总分。

固定问题上的示例选择与顺序实验

每条通道是一次独立条件评测,不是把两组示例同时塞入一个提示;右侧网格以问题为行、五种条件为列,仅示意配对关系,不展示测量值。

官方代码阅读路线

先读固定提交的SST-2配置,确认模板、候选顺序、标签映射和acc指标。[4] 接着读ContextSampler:sample负责选例子,get_context负责拼接题干、答案与分隔符。[5] “随机种子固定”不能替代保存具体示例编号,尤其当遍历顺序或调用次数发生变化时。

本地FixedSampler只覆盖sample方法,返回冻结的训练行,其余拼接调用官方实现。同时独立构造完整提示,与fewshot_context逐字符比较。custom_dataset读取固定parquet,改变的是离线传输,不是任务内容。

最后追到simple_evaluate与HFLM的候选似然路径。[6] 官方返回之外,再用Transformers独立前向计算每个候选token。输入形状为[1,L−1][1,L-1],输出为[1,L−1,49152][1,L-1,49152];上下文有cc个token时,第一个候选token取位置c−1c-1的分布。两个实现覆盖同一批640个候选,不是只比较五个均值。

最小实验:先冻结,再看结果

模型revision为12fd25f77366fa6b3b4b768ec3050bf629380bac;数据使用GLUE的固定SST-2副本,revision为bcdcba79d07bc864c1c254ccfcedcce55bcc9a8c。[7][8] 评测器固定为0.4.9.2,commit见源码地图,不声称是当前最新版。

开发题沿用既定哈希顺序选出的64条。另留128条SST-2确认样本,不送入模型;此前预留的新闻确认样本也未使用。开发集已经反复出现,因此这是探索性协议实验,不能重新包装成未见数据上的最终验证。

示例仅来自官方train。排除与validation任一句子规范化后完全相同的文本,再排除八个示例之间的重复;筛查只使用文本,不使用验证标签。按固定哈希排序,每个标签取四条满足长度条件的训练记录;A、B各用两正两负,正序按负、正、负、正排列,反序完整倒置。

每个含答案和分隔符的示例块单独分词为42个token,四块相连的前缀实际为171个token,不能简单乘四。完整输入还要再次分词:四个few-shot条件对每道题的上下文长度都相同,为191至233;零示例为19至61,均低于512,没有截断。

这些是有意选取的短、平衡、等长示例,不代表整个训练分布。控制成本混杂的同时,也引入了范围限制。示例身份与全部条件在推理前写入plan.json,不根据分数更换样本,不追加排列搜索。

CPU单精度、四线程、eager注意力、候选批量一,不套聊天模板、不加BOS或EOS、不开请求或响应缓存。四个few-shot条件各处理26522个候选输入token;零示例仅4506。因此组内顺序比较等长,但few-shot与零示例并不是等计算量比较。

本次实际验证:负结果与改善一起报告

正式运行从第三方导入后计时102.77秒,峰值RSS为1994588160字节,未测GPU显存。五条件共320条预测,官方与独立实现的640个候选分数最大绝对差为零;题号、金标签、提示哈希和候选边界全部通过核对。

条件 正确数 准确率 预测为positive
零示例 32/64 50.00% 3
A正序 31/64 48.44% 0
A反序 37/64 57.81% 6
B正序 33/64 51.56% 2
B反序 44/64 68.75% 13

A正序比零示例少对一题,实际有三题翻转:一题由错转对,两题由对转错。这个净差不能证明few-shot总体有害,但说明“例子更多所以本次必然更好”的预设不成立。

A正序到反序有六题由错转对、没有对转错,提升9.375个百分点;B相应有十一题由错转对,提升17.1875个百分点。分母始终是相同64题,不能把两项变化相加,当作一种新方法的收益。

示例选择也影响结果:相同正序位置下,B比A多对两题;相同反序位置下,多对七题。这提示集合效果与排列有关,但两组集合、两个排列远不足以估计稳定的总体交互效应。我们保留全部条件,不以最高分替代完整报告。

沿着一条记录看变化

以编号400为例,金标签为正面。零示例时,negative与positive的对数似然约为负三点八七四和负四点七六五,模型选了负面;B反序时,两者约为负零点七六三和负零点六五一,正面候选才取得更高分。这道题在A的两个顺序和B正序中都没有改对,不能仅用“有了示例”解释变化。

读记录时应先核对题号和金标签,再对照候选顺序,最后观察分数。不同提示下单个答案的绝对对数似然变化,不等于准确率的变化,也不能直接称为置信度校准改善。本文只在同一道题、同一种条件的两个候选之间取最大值,然后统计预测变化。

这个案例是结果产生后用于解释计算链的例子,不是提前指定的主要指标。不能因为它恰好支持某个故事,就忽略其余六十三题。完整逐题文件保留成功、失败和没有变化的记录,读者可以重新聚合,而不必相信作者挑出的少数例子。

失败排查:控制长度,也要控制解释

最初试跑把任务初始化时间也按样本数放大,触发600秒预算检查。分离固定开销后,保守预测仍为816.96秒,故在正式运行前明确把本地CPU上限改为1200秒,内存仍为4GiB。最终试跑预测944.89秒并通过,正式运行实际约103秒。两次失败、日志和修订原因均保留,没有借资源调整更换表现不好的条件。

需要防范四类静默错误:示例从评测题泄漏、反序时标签配错、长提示自动截断、结果没有按真实编号对齐。独立审计重新读取数据和分词器,验证身份,再重算候选与配对统计。八项测试包含故意删除记录、重复题号、篡改预测或配对计数,确认错误会被拦截。

算术检查由独立脚本完成,不要求真人逐题按计算器,也不声称有人新增语义金标。数据卡许可标记不明确,公开包只保留索引、哈希与派生分数;不上传完整影评、提示、题干token、权重和缓存。固定版本下载脚本负责获取资源。

可检验问题:不要只寻找最好顺序

**作者推断:**排列变化明显影响了类别偏向,但不能据此锁定“最后一个标签”机制。A正序末例是正面,模型却全部预测负面;反序同时改变首尾和中间位置,当前对照没有隔离哪个位置负责。

更可检验的设计是固定首尾只交换中间,或者固定内容只改变末例位置,并在独立开发划分预先确定策略。校准应作为单独变量,保留未参与选择的确认集。不要在这64题上一直试到最高分,再宣布顺序问题已经解决。

还有一个重要边界:没有规范化后的完全重复,不代表不存在同源片段、语义近邻或预训练污染。当前筛查只能排除明确检查过的那一类重叠。扩展实验时,应记录示例与题目的来源关系,再分别控制相关性、长度和标签位置;如果一次改变所有因素,即使分数提升,也难以回答究竟改善了什么。

总结起来,few-shot不是只有示例数量的开关。记录选了谁、排在哪里、用了多少token、同题怎样变化,才能区分任务信息、标签偏向和评测偶然性。本篇完成的是可审查的局部实验,不是新的提示词配方。

源码与复现入口

完整源码、依赖、冻结计划与逐题记录已公开:固定版本源码目录、README运行说明、SOURCE_MAP源码地图。匿名下载的51个文件与本地归档逐一核对一致;公开副本的独立审计、八项测试和真实模型试跑全部通过。

安装README中的依赖、用prepare.py获取并校验资源后,最小真实入口为:

HF_HUB_OFFLINE=1 TOKENIZERS_PARALLELISM=false python run.py --cache ./cache --out smoke-new --private private-new --smoke

该命令对两道开发题执行全部五种条件,并检查官方与独立评分。去掉--smoke运行完整64题;再执行python audit.py --cache ./cache --out results核对保存结果。输出目录须用新名称,避免覆盖证据。当前已完成五条件正式运行,没有训练模型、没有使用确认集,也没有把论文数字当成本地结果。

参考资料

检索日期:2026-10-08。近期工作与经典论文围绕本篇问题选取,不宣称覆盖所有最新论文。

  1. Yao Lu等,ACL 2022:Fantastically Ordered Prompts and Where to Find Them: Overcoming Few-Shot Prompt Order Sensitivity。
  2. Zihao Zhao等,ICML 2021:Calibrate Before Use: Improving Few-shot Performance of Language Models。
  3. Kwesi Adu Cobbina、Tianyi Zhou,EMNLP 2025:Where to show Demos in Your Prompt: A Positional Bias of In-Context Learning。
  4. EleutherAI:固定SST-2任务配置。
  5. EleutherAI:固定ContextSampler、fewshot_context。
  6. EleutherAI:simple_evaluate、Hugging Face后端。
  7. HuggingFaceTB:固定SmolLM2-135M-Instruct模型卡。
  8. NYU:固定GLUE数据卡。