首页/AI/AI 应用速查/自洽性投票(Self-Consistency)

自洽性投票(Self-Consistency)

同一问题多次采样(temperature>0),对结果投票取多数——用多样性换正确率,对数学与推理题有效,代价是调用成本成倍上升。

AI 应用速查AI更新于 2026-10-13

自洽性投票是什么

对同一个问题用大于零的温度多次采样,得到多条推理路径与各自的答案,再按多数投票选出最终结果。它的工作原理是:同一问题存在多条推理路径,错误往往分散在不同方向,而正确答案会被多条路径共同得到,因此投票能互相纠错。前提是问题有可判定的答案,代价是调用成本按采样次数成倍上升,所以它适合高价值且能判对错的题目。

基本信息

核心前提采样温度必须大于 0,否则多次结果几乎完全相同
采样次数常见 5 到 10 条,边际收益随次数递减
适用题型数学计算、逻辑推理、分类判定、结构化抽取等有唯一答案的任务
不适用创作、开放建议、主观评价等没有正确答案的任务
成本量级采样 N 次即 N 倍调用费用与 N 倍延迟,需与准确率收益权衡
后处理投票前必须归一化答案,否则同一答案会被拆成多个类别

典型使用场景

  • 数学与单位换算类计算题:单条推理链算错时,投票能显著提高正确率
  • 结构化抽取:同一字段抽多次取共识,减少偶发漏抽与错抽
  • 分类判定:工单归类、意图识别这类有确定标签的任务
  • 关键判断的初筛:合规与风控场景先用投票降噪,再由人工复核
  • 评测模型稳定性:观察同一题的答案分布,判断模型在该类题目上是否可靠

采样投票实现

采样投票实现
from collections import Counter
import re

def normalize(ans):
    a = re.sub(r"[\s,。.]", "", ans)      # 去掉空格与中文标点,先做格式归一
    a = a.replace(",", "").replace("人", "")  # 统一单位表述,避免同值不同写法
    return a.lower()

answers = []
for _ in range(5):                    # 5 次采样,temperature 必须大于 0
    answers.append(ask_model("一个班 40 人,60% 是女生,男生几人?", temperature=0.7))
votes = Counter(normalize(a) for a in answers)   # 先归一化再计数,否则投票会失真
print(votes.most_common(1))           # 得票最多者作为最终答案;票数接近时人工介入

采样次数与收益

采样次数成本量级效果预期
1 次基准单条路径,错了就是错了
3 次三倍能削掉部分偶发错误,性价比高
5-10 次五到十倍常见区间,准确率提升趋于平缓
20 次以上二十倍起边际收益很小,多数场景不划算
无归一化同上同一答案被判为多类,投票结果不可信
答案归一化是投票能否成立的关键:数值、单位、大小写、中英文数字都必须先统一,否则「48」「48 人」「四十八」会被算成三个不同答案。
票数接近时不要直接取最大值:两三个答案平分说明题目本身有歧义或模型结论不稳,这种样本更适合回看推理过程或转人工,而不是交给多数投票。

易错点

  • 用温度为 0 采样多次:输出几乎完全相同,钱花了但投票没有任何纠错作用
  • 对没有唯一正确答案的创作任务投票:多个方案之间不存在对错,投票结果没有意义
  • 投票前不做答案归一化:同一答案被拆成多个类别,多数结果被稀释甚至选错
  • 采样次数盲目上调到几十次:成本成倍增加而准确率早已进入平台区
  • 只统计答案不看推理路径:所有采样都被同一个错误前提带偏时,投票反而会放大错误

数据来源与参考

  • Wang et al. Self-Consistency Improves Chain-of-Thought Reasoning(arXiv 2203.11171)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌