给大模型喂 Few-Shot 示例反而掉点这件事其实跟长度有关
很多时候给模型喂几个例子(Few-Shot)不仅没帮上忙,反而让准确率掉了,之前大家总觉得是示例干扰了模型。但这篇 arXiv:2609.15990v1 的研究结论挺反直觉的:Few-Shot 能不能起作用,关键在于模型对示例「内容」的响应程度,而不是被示例「干扰」了。研究者测了 12 个开源模型在乌克兰语新闻分类和法律案件预测这两个任务上的表现,发现同一个模型在新闻任务上能涨 24 个百分点,但在法律文本上只涨了 3.4 个百分点,甚至有两个模型直接掉点了。
为什么之前的 Few-Shot 掉点分析是错的
以前大家分析 Few-Shot 导致性能下降时,习惯去量化模型在 Zero-Shot 和 Few-Shot 模式下隐藏状态(hidden states)的偏移量。但这里有个巨大的坑:Few-Shot 的提示词比 Zero-Shot 长得多,提示词长度增加本身就会导致表示空间的偏移,这跟示例内容其实没关系。
为了把「长度干扰」给剔除掉,这篇论文搞了个很简单的对照组:把示例内容换成长度完全一致的随机文本。这样通过对比,就能算出所谓的 content delta(内容增量),也就是剔除掉长度因素后,真正由示例内容引起的表示变化。
结论完全反转了
研究结果显示,之前大家信奉的「偏移量越大,干扰越大,性能越差」的逻辑根本站不住脚。
- 原始偏移量(Raw Shift): 与 Few-Shot 是否有效几乎没关系,相关系数只有 r = 0.20。
- 内容增量(Content Delta): 与性能提升强相关,rho = +0.65 (p = 0.043)。
Llama 3.3 70B 的掩码实验验证
为了证明这个结论是因果关系而非相关性,研究者在 Llama 3.3 70B 上做了掩码(masking)实验。结果证明,当通过特定手段控制变量后,模型依然能恢复到高于 Zero-Shot 基准的准确率。
对于我们平时在公司里调优提示词的人来说,这个结论其实给了个提醒:如果 Few-Shot 没效果甚至掉点,可能不是因为你给的例子「干扰」了模型,而是这个模型对该任务示例内容的敏感度太低,或者说它根本没能通过这些示例有效地调整自己的内部表示。
我想起之前调那个法律数据集,示例只要超过 3 个就直接崩掉,难道跟 Token 权重分布有关?