王老师想了解学生小航的数学真实水平。他没有只看一次单元测验——一次考试可能蒙对,也可能发挥失常。他出了一道方程题,让小航先后用配方法、因式分解、公式法独立解三遍。三次思路完全不同,可最后一行都写下同一个答案。王老师这才放心:这题他是真会了。如果三份草稿三个答案,那只能说明概念还没吃透。这种“多解几遍、殊途同归”的检验思路,恰恰是今天大模型数学评测中一项关键指标——推理自洽性的雏形。 大模型像一位“发挥不稳定的学生”:同一个数学题,受采样随机性影响,两次生成的推理过程可能大相径庭。要让模型能力评估可信,就不能只赌一次输出。这篇文章用王老师的抽查办法,带你看懂自洽性如何用多次采样、答案一致性、多数投票来判断“模型到底稳不稳”,以及它在评测中的价值与局限。
对 AI 从业者而言,自洽性是把“模型可不可信”从感性判断变成可量化指标的关键工具,广泛应用于模型评测、答案校验与可靠性分析。
目录
可视化演示
展示多次采样推理路径、一致性度量评分与稳定性提升策略,切换模式理解大模型推理自洽性评估的全流程方法论。
本节配有交互动效(进入视口后自动加载,约 3KB)。
多次采样推理路径 同一问题用不同随机种子采样多次,生成多条独立推理路径 各路径可能得出不同答案,路径间答案一致率反映推理自洽性 Paths = {Sample(q, seed_i) for i in 1..N} 多次采样是评估推理自洽性的基础方法,揭示模型推理的稳定性边界
自洽性概念:什么算“殊途同归”
王老师的抽查法看似朴素,背后是一条深刻的评测原则:单次表现充满噪声,反复验证才能逼近真实水平。一名学生可能因为刚巧背过套路而蒙对,也可能因为状态不佳而做错;只有让他换着方法多解几遍,你才能把“运气”和“实力”分开。大模型的推理也充满这种“噪声”——解码时的随机采样让每一次生成的推理链都不同,单次输出可能包含幻觉或计算失误。因此,评测模型时不能只看一次回答的对错,更要看它在不同推理路径下能否得出一致结论。
这种“多次推理结论互相印证”的性质,就是数学推理自洽性。它与单次准确率的关键区别在于:准确率回答的是“这次答对没有”,自洽性回答的是“它的结论禁不禁得起反复检验”。一个模型可能单次准确率尚可,却每次都用不同理由碰巧蒙对——这样的推理并不可靠。反过来,如果模型多次采样都指向同一个答案,哪怕答案最终是错的,也说明模型对这条推理路径高度“笃定”,评测者应当警觉。自洽性因此成为衡量推理可靠性的重要指标,也是自洽性评测方法兴起的根本动力。
在数学评测中,自洽性分数(Self-Consistency, SC)的定义非常直观。设对一道题采样 N 次,得到 N 个答案,其中出现次数最多的答案称为主导答案 $\hat{z}$,那么自洽性分数就是 N 份答案中与主导答案一致的占比:
王老师用三份草稿判断小航,评测工程师用几十次采样判断模型,本质是同一件事:结论越是被不同路径反复印证,就越值得信赖。自洽性分数就是这件事的数字化表达。
- 采样总数 N对同一道题独立采样 N 次,得到 N 份“草稿”答案 $a_1, a_2, \ldots, a_N$。
- 主导答案 $\hat{z}$在所有答案中挑出出现次数最多的那个候选答案,作为“大家最认可的结论”。
- 指示函数$\mathbb{1}\{\cdot\}$ 是一个计数器,括号里的条件成立时取 1,不成立时取 0,用来判断每份草稿是否落在主导答案上。
- 求和取平均把所有“是否与主导答案一致”的计数加起来,再除以 N,得到一致样本所占的比例。
多次采样:给推理一点发挥空间
王老师让小航“换方法做三遍”,前提是小航每次解题会自然地走不同的路。大模型没有这种天然的自由度——它只是按概率逐词生成,如果不加干预,两次解码可能几乎复读同一遍。要让模型真正“多解几遍”,评测时给模型注入一点随机性,这就是温度采样。
温度 T 是解码时的一个旋钮,控制模型“发挥浮动”的大小。语言模型生成下一个词时,会先算出一组原始得分 logits,再通过 softmax 转成概率。温度缩放就发生在这个转换之前:把每个得分除以 T,再进 softmax。T 小,概率分布变得尖锐,模型几乎总是选最高分的词,输出趋于保守;T 大,分布变得平坦,低分词汇也有机会被选中,输出更加天马行空。自洽性评测通常把 T 设在 0.5~0.7 之间,既让每次采样产生足够多变的推理路径,又不至于让模型胡言乱语。
每次采样时更换随机种子,模型就会沿着不同的概率路径生成不同的推理链;同样的题目,一条链可能用方程,另一条链可能用算术。采样次数 N 决定了“草稿”的多少:太少,统计不稳定;太多,计算成本线性上涨。王老师需要三份草稿就能判断,而模型评测通常采样 5 到 40 次,在成本与可靠性之间取平衡。
- logits 得分 $z_k$模型尚未归一化的原始打分,分数越高代表模型越倾向选这个词。
- 除以温度 T将每个得分都除以 T。T 越大,得分之间的差距被压缩,分布变得更平坦。
- softmax 归一化对缩放后的得分取指数并求和归一,使所有候选词的概率加起来等于 1。
- 温度的作用边界T 趋近于 0 时退化为贪心解码,每次几乎选最高分;T 趋近于无穷大时退化为均匀随机。
一致性度量:把草稿收上来对答案
草稿收上来之后,怎么判断“是不是同一个答案”?王老师知道,“42“和”四十二“显然是同一个结论,但”3.14“和”3.1416“就要看题目要求保留几位小数。如果直接把原始字符串拿来比对,会闹出”字面不同但语义相同”的误判。一致性度量的第一步,就是答案归一化。
归一化要做三件事:一是去掉多余的空格、标点和单位,把“42 元”变成“42“;二是把等价表达转成统一形式,比如把”四十二“转成”42“;三是对浮点数设置容差,允许”3.14159“和”3.1416“在误差范围内视为相同。做完归一化,才能统计每个候选答案获得了多少”票”。自洽性的一致性分数,本质上就是最大那个答案簇占全部采样的比例:
王老师对答案时心细,评测工程师对答案时也心细。归一化看似琐碎,却直接决定自洽性分数靠不靠谱:归一化太严,语义等价的答案被拆散,自洽性被低估;归一化太松,不同结论被强行合并,自洽性被高估。一致性度量的质量,决定了整个自洽性评测的可信度。
- 候选答案集合 $\mathcal{Z}$把所有归一化后的不同答案收集起来,比如 {42, 13, 25}。
- 对每个答案统计得票内层求和数出答案 z 在 N 次采样中出现了多少次。
- 取最大得票簇外层 $\max$ 在所有答案中选出票数最多的那一个。
- 除以 N 归一化用最大簇大小除以总采样数,得到 0 到 1 之间的比例,这就是一致性分数。
多数投票:少数服从多数的智慧
草稿对完答案,每个候选答案都有了自己的票数,接下来要做一个决定:这道题最终采用哪个答案?王老师的做法很简单——少数服从多数。哪个答案被最多的独立解法支持,就把它当作小航的最终结论。这个朴素的决策规则,在自洽性评测中被称为多数投票。
多数投票是自洽性方法里聚合多次采样的最终步骤。它等价于从所有采样答案中找出票数最多者:
多数投票还有进阶玩法。有些采样草稿在生成时会附带一个置信度分数,模型对某条推理路径越自信,这个分数越高;投票时按置信度加权,比简单数人头更能反映草稿质量。如果出现平票——两个答案票数一样多——稳妥的处理是拒绝作答,或者将温度调低重新采样一轮。多数投票之所以有效,是因为随机错误通常方向分散,而正确的推理往往殊途同归;当绝大多数路径都指向同一个答案时,这个答案大概率是对的。
- 票数统计给每个候选答案 z 数出它在 N 次采样中出现的次数。
- argmax 选择在所有候选答案中找出票数最多的那一个,记为 $\hat{z}$。
- 与自洽性的联系投票胜出的答案,正是计算自洽性分数时那个“主导答案”。
提升策略:让结论更经得起反复检验
王老师发现,有些学生怎么抽查都很稳,有些学生一换方法就露馅。能不能通过训练或引导,让模型本身变得更“稳”?自洽性评测的实践者们摸索出一套提升推理稳定性的策略,核心思路是让每一次采样的推理路径都更规范、更不容易跑偏。
第一条策略是提示引导。在提示词中给出带完整解题步骤的示例,模型会模仿示例把过程写得更细,减少跳步造成的错误。第二条是温度调控,温度太低模型懒得换思路,温度太高则容易飘到无关方向,适中温度(0.5~0.7)能兼顾路径多样性与单次正确率。第三条是步骤自检,让模型生成答案后自己复核一遍每一步的依据,把“粗心的草稿”变成“检查过的草稿”。最后是采样调参,根据具体任务调整采样次数 N——简单题 5 次就够,复杂应用题可能需要 40 次。这些策略的共同目标,是让“多数投票”的群众基础更牢固:每条路径都更靠谱,共识才更有价值。
如何量化“答案分布有多集中”?可以借用信息论里的熵。设 $\mathcal{Z}$ 为候选答案集合,$p(z)$ 为答案 z 的占比,定义归一化熵指数:
王老师对不同的学生用不同的抽查频率:基础好的学生少查几次,基础差的要多查几遍。模型评测也一样,通过策略组合让推理路径更稳、通过熵指数识别“心里没底”的样本,自洽性才能真正服务于可靠性判断。
- 答案分布 $p(z)$用每个答案的得票占比近似它的概率,$p(z)$ 越大代表越多人支持。
- 熵 H(z)度量答案分布的混乱程度。所有答案均匀分布时熵最大,全都指向一个答案时熵为 0。
- 最大熵 $\log K$K 个候选答案均匀分布时熵达到最大值 $\log K$,用它做归一化分母。
- 归一化熵指数 E用 1 减去归一化后的熵,把“混乱度”翻转成“集中度”。
实验分析:数据里的自洽密码
策略好不好,光靠推理不行,得拿数据说话。王老师把抽查法用了一学期,期末统计发现:平时多次解题结论一致的学生,考试分数普遍更高。大模型评测的实验也给出了类似的结论——自洽性与准确率之间存在着显著的正相关关系。
典型的评测设置是:选用 GSM8K 数学应用题数据集作为基准,对每个问题采样 N 条思维链(常用 N=40 或 64),温度设为 0.7,答案归一化后做多数投票,并将投票结果与单次采样比较。公开实验显示,在 GSM8K 测试集上,将多数投票应用于思维链提示,可以让 PaLM-540B 的准确率从约 18% 提升到约 56%;在 MATH 数据集上也有数个百分点乃至十几个百分点的提升。这说明“多次采样 + 多数投票”确实能剥掉偶然误差,逼近模型真实能力的上限。准确率高的模型自洽性一般也高——实力强的学生怎么抽查都稳;但反向并不成立:自洽性高的模型准确率未必高。多数投票带来的相对提升幅度可以写成:
实验还揭示了自洽性的阴影面——失败案例。当模型被一个系统性偏见支配时,比如总是忽略“答案必须为正整数”的条件,所有采样会一致地错,自洽性分数依然很高。这提醒评测者:自洽性是必要的可靠性信号,但不是充分条件。王老师也明白这个道理:全班都抄同一份错误笔记时,交上来的答案再一致也是错的。好的评测会同时报告自洽性与准确率,并把两者结合成更全面的能力画像。
- 单次准确率 $A_{single}$只取一次采样作为答案时,模型的答对率。
- 投票准确率 $A_{vote}$对每题多次采样后多数投票,以投票结果作为答案时的答对率。
- 差值投票准确率减去单次准确率,得到多数投票带来的绝对提升。
- 相对增益除以单次准确率再乘 100%,得到相对提升的百分比。
AI 应用场景
大模型数学能力自动评测
阶段:模型能力评估
解决的问题:传统评测让模型每题作答一次,受解码随机性影响,单次偶然正确会虚高准确率;自洽性评测通过多次采样与多数投票,得到更接近模型真实水平的稳定成绩。
具体案例:评测团队在 GSM8K 数学题集上对候选模型做 40 次采样,归一化答案后计算自洽性分数并多数投票。结果显示,部分单次准确率看似接近的模型,自洽性差异明显——一个 68% 一个 72% 自洽性,后者推理路径更稳定,最终被选为上线版本。
金融场景的答案可靠性校验
阶段:推理结果校验
解决的问题:金融问答中模型给出的利息计算、汇率换算等结论一旦出错代价高昂;自洽性可作为置信信号,识别“模型自己都没想清楚”的边界案例。
具体案例:某理财问答系统对利息类问题采样 20 次,若自洽性低于 60%,系统将该问题标记为“待人工复核”,不再直接展示给用户。上线后高风险问题的人工复核准确率提升了 30%。
教育AI的解题稳定性监测
阶段:效果监控
解决的问题:教育类 AI 助教给学生的解题讲解若每次思路飘忽,会让学生困惑;通过监控典型题型的自洽性,可以及时发现讲解不稳定的问题。
具体案例:数学答疑机器人每个月对 100 道典型例题各采样 10 次,计算自洽性。某次版本更新后,方程题的自洽性从 82% 掉到 64%,监控告警触发,团队回滚了提示词模板,恢复了稳定性。
Python 演示
# -*- coding: utf-8 -*-"""模拟多次采样的数学求解器, 计算自洽性分数并做多数投票"""from collections import Counter class MathSolverSimulator: """模拟一个带随机性的数学求解器, 每次 sample 做一次独立解答""" def __init__(self, true_answer, vocab, correct_rate=0.65): self.true_answer = true_answer self.vocab = vocab self.correct_rate = correct_rate def sample(self, seed): """以 correct_rate 概率返回正确答案, 否则返回一个随机错误答案""" rnd = (seed * 9301 + 49297) % 233280 / 233280 if rnd < self.correct_rate: return self.true_answer idx = (seed * 7) % len(self.vocab) wrong = self.vocab[idx] if wrong == self.true_answer: wrong = self.vocab[(idx + 1) % len(self.vocab)] return wrong class SelfConsistencyEvaluator: """自洽性评测器: 归一化答案, 统计一致率, 多数投票""" def __init__(self): self.answer_counts = Counter() @staticmethod def normalize(answer): """把字符串答案归一化为标准形式, 只保留数字部分""" s = answer.strip().replace(",", "").replace(" ", "") digits = "".join(ch for ch in s if ch.isdigit() or ch == ".") return digits or s def evaluate(self, samples): """输入多次采样答案, 返回自洽性分数与多数投票结果""" normalized = [self.normalize(a) for a in samples] self.answer_counts = Counter(normalized) total = len(normalized) if total == 0: return 0.0, None top_answer, top_votes = self.answer_counts.most_common(1)[0] consistency = top_votes / total return consistency, top_answer def run_experiment(n_samples): """跑一轮模拟: 20 道题的多数投票准确率对比单次采样""" solver = MathSolverSimulator(true_answer="42", vocab=["13", "25", "99", "7"], correct_rate=0.65) judge = SelfConsistencyEvaluator() single_hits = 0 vote_hits = 0 for q in range(1, 21): samples = [solver.sample(q * 100 + i) for i in range(n_samples)] consistency, voted_answer = judge.evaluate(samples) first_answer = judge.normalize(samples[0]) if first_answer == "42": single_hits += 1 if voted_answer == "42": vote_hits += 1 print("题 %2d 自洽性=%.2f 投票=%s 单次=%s" % (q, consistency, voted_answer, first_answer)) print("单次准确率: %d/20" % single_hits) print("多数投票准确率: %d/20" % vote_hits) if __name__ == "__main__": run_experiment(11)
rnd = (seed * 9301 + 49297) % 233280 / 233280用线性同余法生成伪随机数,模拟模型每次采样的“随机发挥”。self.correct_rate = correct_rate设定单次采样的基础正确率,相当于模型的单次准确率。if rnd < self.correct_rate:以 65% 概率返回正确答案,其余 35% 随机返回错误答案,模拟温度采样带来的波动。digits = "".join(...)答案归一化:只保留数字和小数点,把“42 元”、“四十二”统一成"42"。self.answer_counts = Counter(normalized)用计数器统计每个归一化答案的得票数。top_answer, top_votes = self.answer_counts.most_common(1)[0]找出票数最多的主导答案。consistency = top_votes / total主导答案票数除以总采样数,得到自洽性分数。first_answer = judge.normalize(samples[0])取第一次采样作为“单次推理”的对照基准。if voted_answer == "42": vote_hits += 1多数投票答案正确则计数,用于对比单次准确率。
常见误区
误区模型多次采样都指向同一个答案,说明这个答案肯定是对的,自洽性分数可以当作准确率来用。
正解自洽性衡量的是“多次推理的一致性”,不是“与标准答案的吻合度”。全班都抄同一份错误笔记时,交上来的答案再一致也是错的。现实中模型可能被系统性的推理偏见支配,比如总是忽略某个约束条件,导致所有采样一致地错。正确做法是把自洽性当作可靠性信号而非正确性保证,评测时同时报告准确率。
为何常见:直觉上“大家都这么说”容易给人安全感,人们常常把共识与真相混淆,忽略了共识可能来自同一个源头。
误区既然多次采样能提升稳定性,那就把采样次数设得越大越好,比如每次采 200 次,反正越多越准。
正解采样带来的增益是边际递减的。实验显示 5 次提升明显,40 次之后准确率基本趋于稳定,再增加采样只是线性消耗算力。选择采样次数要在收益与成本之间权衡,简单题 5 到 10 次足够,复杂题 40 次左右即可。无脑增加次数既浪费 GPU 资源,也可能因引入过多低质量路径而稀释投票质量。
为何常见:人们容易把“多”和“好”画等号,忽略了统计上样本量超过一定范围后置信度提升趋缓的客观规律。
误区想要更多样的推理路径,就要把温度调高,温度越高采样越多样化,自洽性结果就越丰富可靠。
正解温度过高会让模型进入“胡言乱语”状态,低概率 token 大量出现,推理链变得支离破碎,答案分散在无关区域,自洽性反而暴跌。温度的作用是“适度扰动”,不是“彻底放飞”。自洽性评测实践中最常用的温度区间是 0.5 到 0.7,在这个范围内路径既有多样性又保持基本正确率。
为何常见:人们把“多样性”理解为“随机性越大越好”,忽略了推理任务需要的是有限范围内的有效变化,而不是无限发散。
误区对答案就是比对字符串,模型输出“42“和”四十二”是不同答案,统计时应该分开计算。
正解不做归一化的字符串匹配会把大量语义等价的答案拆散,严重低估自洽性。“3.14“和”3.1416“可能在容差内等价,”42 元“和”42”是同一个结论。评测前必须做答案归一化:去掉格式符号、抽取数值、统一等价表达、设置浮点容差,然后再统计一致性。
为何常见:字符串比较实现最简单,人们容易先用“能跑就行”的方案,却没意识到评测指标的数值会因此失真。
误区多数投票是自洽性方法的最终答案生成方式,既然实验都显示有提升,那它对任何模型、任何题目都有效。
正解多数投票提升的是稳定性,它依赖一个前提——正确采样之间有共同结论,而错误采样方向分散。如果模型的错误是系统性的,比如总是把减号看成负号,错误采样也会形成“一致的错误共识”,投票只会让错误答案更突出。此外当采样次数很少时,投票结果受随机性支配,未必优于单次。多数投票是锦上添花的聚合策略,不是点石成金的魔法。
为何常见:看到几组正面实验数据就归纳出“一定有效”的结论,忽略了实验结果背后的前提条件。
面试题
Q1. 自洽性评估的核心思想是什么?
- A.要求模型每次输出完全相同的推理链
- B.多次独立采样后检验结论的一致性← 正确答案
- C.比较模型推理速度的快慢和资源占用
- D.检查模型答案是否与训练数据重复
答案:B。自洽性的核心是“殊途同归”:让模型多次独立求解同一道题,检验结论是否互相印证。A 错在要求路径完全一致,自洽性恰恰允许路径不同;C 和 D 都是无关维度。
Q2. 温度参数 T 调大时,采样分布会如何变化?
- A.概率分布变得更加集中尖锐
- B.概率分布变得更加均匀平坦← 正确答案
- C.概率分布完全不受温度影响
- D.概率分布消失且无法采样
答案:B。温度 T 将 logits 除以 T 后再做 softmax,T 越大得分差距被压缩,分布越平坦,低概率词也有机会被选中。温度调低才会让分布更尖锐,对应更保守的贪心解码。
Q3. 某次评测中自洽性分数为 0.8,最准确的理解是?
- A.模型有 80% 的概率答对这道题
- B.80% 的采样草稿指向主导答案← 正确答案
- C.模型推理链中有 80% 的步骤是正确的
- D.模型有 80% 的推理路径完全相同
答案:B。自洽性分数是主导答案得票数占总采样数的比例,描述“结论的共识程度”。它不直接等于正确率,也不度量步骤正确率,更不要求路径完全相同——往往路径不同但终点一致才更有说服力。
Q4. 下列哪些属于一致性度量前的“答案归一化”操作?
- A.移除答案中的多余空格与标点符号← 正确答案
- B.从字符串中抽取数字部分作为标准形式← 正确答案
- C.将“四十二”等等价表达转为统一数字← 正确答案
- D.给模型提示词加上“请重新尝试一次”
答案:ABC。归一化是把不同表达映射到同一标准形式,包括去除格式噪声、抽取数值、统一等价表达。D 是改变采样方式的操作,属于采样策略而不是归一化。
Q5. 多数投票的主要作用是什么?
- A.提高多次采样结论聚合后的稳定性← 正确答案
- B.显著提升单次推理的生成速度
- C.减少评测任务的整体计算开销
- D.让每个候选答案都获得相等的权重
答案:A。多数投票通过让分散的错误互相抵消、让正确的共识凸显,把多次采样的随机性消化掉,提升最终结论的稳定性。它不会加速单次推理,计算开销反而更大,也并非等权——它本来就是按票数决定权重。
Q6. 设 5 次采样答案分别为 A、B、A、A、C,主导答案的自洽性分数是多少?
- A.0.4
- B.0.6← 正确答案
- C.0.8
- D.1.0
答案:B。主导答案是出现 3 次的 A,自洽性分数 = 3 / 5 = 0.6。注意自洽性计算的是主导答案的得票占比,不是最高频答案的次数本身。D 的 1.0 只在所有采样全部一致时出现。
Q7. 下列哪些策略有助于提升模型推理的稳定性?
- A.在提示中给出带完整解题步骤的示例← 正确答案
- B.将温度调低到让采样几乎完全保守
- C.让模型对推导出的步骤进行自我检查← 正确答案
- D.大幅调高温度以制造更多随机性
答案:AC。提示引导和步骤自检都能让推理路径更规范、更少跳步,从而提升稳定性。B 错在温度过低会失去路径多样性,多次采样退化为复读;D 错在温度过高会让推理发散为胡言乱语。
Q8. 实验中发现某模型自洽性很高,但多数投票结果仍是错误的,最可能的原因是?
- A.本次采样的总次数设置得太少
- B.大多数采样犯了相同的系统性错误← 正确答案
- C.生成过程使用的温度设定得太高
- D.答案归一化的规则设置得太严格
答案:B。自洽性高说明采样结论高度集中,但如果所有采样共享同一个错误偏见,就会“一致地错”。A 会导致统计不稳定而非高自洽;C 会导致分散而非聚集;D 会让等价答案被拆散,降低自洽性而非升高。
Q9. 与单次采样准确率相比,自洽性指标能额外提供什么信息?
- A.数值一定高于单次采样的准确率
- B.体现结论被反复印证后的稳定程度← 正确答案
- C.评测时不需要任何额外的计算开销
- D.只适用于小学数学应用题类型的评测
答案:B。自洽性回答的是“结论是否经得起反复检验”,这是单次准确率无法给出的稳定性信息。A 不成立,自洽性与准确率没有大小关系;C 错在多次采样明显增加算力;D 错在自洽性可扩展到推理问答等更广场景。
Q10. 关于自洽性评测,下列说法正确的有?
- A.采样次数超过一定范围后增益会递减← 正确答案
- B.高自洽性是对答案正确性的充分保证
- C.温度过高会产生语义漂移降低自洽性← 正确答案
- D.自洽性可作为模型可靠性的代理指标← 正确答案
答案:ACD。采样增益边际递减,验证了“够用就好”的调参原则;温度过高导致语义漂移,答案分散,自洽性下降;自洽性虽然不等于正确率,但确实是可靠性的有效代理指标。B 错在“充分保证”——一致地错的情况下高自洽与正确无关。