今天在读一篇讲 COSP 的文章,顺手记一下。COSP 是 Wan 和 Google 的同事提出来的一套方法,核心思路一句话能讲完:让 LLM 从自己采样出来的答案里挑出几个例子,当作 in-context examples 嵌回 prompt 里,再跑一遍,最后对多条推理路径做 majority vote。全程不需要人工标注的示例。文章报的数字挺好看,几个推理任务上超过了 zero-shot CoT,有些任务能摸到甚至略超 few-shot CoT,三个模型上对 zero-shot 基线的提升最高到 15% 左右。
但这篇笔记真正想讲的不是它有多好用,而是我卡住的那个点——用一致性当筛选依据,这个前提到底站不站得住。先把方法本身拆开看看,再回来讲这个坑。
方法本身
流程按顺序拆开是这样:
- 模型对同一个问题采样出多条回答;
- 用三条标准筛这些候选回答:按熵衡量的一致性、对重复输出的惩罚、对所选示例多样性的鼓励;
- 挑出来的回答作为示例,prepend 到原始问题上;
- 重新跑模型,对多条推理路径做 majority vote 得出最终答案。
代码层面没有开源实现可以直接跑,我照着描述在本地用两个数学题 prompt 手动复现了一下前两步的思路——采样十条回答,把出现频率最高的答案挑出来当「示例」。跑出来的效果方向上和文章说的一致,但样本太小,不构成验证,只能算「原理是这样」的程度。这条记下来了,下次如果想认真复现,得搭一个正经的评测脚本。
文章里那张近似的 benchmark 表,我抄几个数字过来感受一下量级:
MultiArith: COSP ~85% | zero-shot ~67% | few-shot ~81%
AddSub: COSP ~79% | zero-shot ~69% | few-shot ~72%
GSM8K: COSP ~30% | zero-shot ~21% | few-shot ~30%
StrategyQA: COSP ~65% | zero-shot ~57% | few-shot ~68%
MultiArith 上 COSP 比 few-shot 还高四个点,GSM8K 上基本打平,StrategyQA 上反而比 few-shot 低三个点。这个分布本身就有信息量——任务越依赖外部事实(StrategyQA 这种),模型自己生成的示例质量越撑不住,这个方向我觉得比平均提升百分比更值得看。
真正想说的那个坑
文章自己也承认了一句:一致性不等于正确性。一个模型如果有系统性的错误认知,会反复产出同一个错误答案,一致性分数照样很高。评论区也有人指出同一个问题,说得更直白——一致性衡量的只是模型有多「确信」,不是答案有多真。
我一开始没觉得这算多大的问题,心想哪有筛选标准是完美的。这个坑我也是绕了两次才想明白:COSP 不是只拿一致性筛一次,它筛完之后还要做 majority vote,而 vote 的对象又是同一个模型采出来的路径。两层机制叠在一起,等于把「模型自己确信什么」这个信号放大了两遍。评论区还有一条提醒我觉得很关键:当采样出来的推理路径并不是真正独立的时候,majority vote 会放大共同的偏差,而不是抵消它。
换成一个具体的场景想一下。假设模型在某类数学题上有一个稳定的计算偏差,比如进位习惯性出错——那它采样十条,八条错在同一个地方,熵很低,一致性很高,被 COSP 挑成示例;第二轮跑完 majority vote,还是那个错答案胜出。整个流程从头到尾没有任何一个环节能发现「大家都错得一样」这种情况。zero-shot CoT 反而没有这个问题,它至少不会把错误答案固化成示例再喂回去。
所以我的判断是:COSP 这类方法在「模型能力够、只是缺示例引导」的任务上(MultiArith、AddSub 这种)确实能涨分,数字也不假;但在「模型本身有认知盲区」的任务上,它有把盲区制度化的风险。GSM8K 上只追平 few-shot、StrategyQA 上掉到 few-shot 之下,我怀疑和这个机制有关系——文章没往这个方向分析,这一段属于我的猜测,老实标注一下。
💡 小技巧:如果你也想评估这类自举式方法,可以先单独测一下「模型在这个任务上的错误是不是系统性的」——把采样出来的错误答案聚一下类,如果错误高度集中在少数几个模式上,majority vote 就不是在降噪,是在投票选最流行的错误。这一步没法省,哪怕这次可能什么事都不会发生。
划重点
第一,COSP 的涨分是真的,但涨分来源要分清任务:纯推理引导类的任务收益大,事实依赖型的任务收益小甚至为负。第二,一致性筛选加 majority vote 是两层放大,模型确信什么就会被放大两遍,这个机制在文章的数字里看不到,但它在决定方法能不能用。第三,评论区那两条提醒(一致性只测确信度、非独立路径下的投票放大偏差)比文章正文的主结论对我更有用,以后读这类自举方法的论文,我会先翻评论。
这篇就记到这里。你可以拿一个自己熟悉的、模型经常答错的题去手动跑一遍采样,看看错误答案的集中程度——如果八条里六条错得一模一样,那 COSP 这种方法在这个题上就先别用了。踩到别的坑欢迎回来留言,我一起补一条笔记。
