Documentation Index
Fetch the complete documentation index at: https://docs.apiyi.com/llms.txt
Use this file to discover all available pages before exploring further.
概念定义
自我一致性(Self-Consistency)是一种通过采样多条推理路径,然后选择出现频率最高的答案来提升大语言模型推理准确性的技术,特别适合有固定答案的推理任务。
详细解释
自我一致性由Google Research在2022年提出,作为思维链(CoT)提示技术的重要增强。其核心思想是:复杂推理问题通常有多条有效的推理路径可以到达正确答案。通过探索多样化的推理路径而非仅依赖贪婪解码的单一路径,可以显著提高模型输出的可靠性。
该技术在算术推理、常识推理和符号推理等任务上展现了卓越性能,准确率提升幅度从3.9%到17.9%不等。2024年的最新进展包括动态自我一致性(Dynamic Self-Consistency)和通用自我一致性(Universal Self-Consistency),进一步优化了计算效率并扩展了应用范围。
自我一致性的本质是利用”群体智慧”原理——多个独立的推理过程得出相同结论的概率,比单一推理路径的正确率更高。这种方法特别适合处理具有确定性答案的任务,如数学问题、逻辑推理等。
工作原理
自我一致性工作机制
问题示例:“学校有15个学生,加入了7个,又走了3个,现在有几个?“
步骤1:多路径采样(温度 > 0)
| 推理路径 | 详细步骤 | 最终答案 | 正确性 |
|---|
| 路径 1 | 1. 开始有15个学生; 2. 加入7个:15 + 7 = 22; 3. 走了3个:22 - 3 = 19 | 19 | ✅ 正确 |
| 路径 2 | 1. 初始学生数:15; 2. 净增加:7 - 3 = 4; 3. 最终:15 + 4 = 19 | 19 | ✅ 正确 |
| 路径 3 | 1. 总共来了:15 + 7 = 22; 2. 减去离开的:22 - 3 = 19; 3. 现有学生:19个 | 19 | ✅ 正确 |
| 路径 4 | 1. 开始15个; 2. 变化:7 + 3 = 10(错误); 3. 总计:15 + 10 = 25 | 25 | ❌ 错误 |
| 路径 5 | 1. 原有:15名; 2. 增加后:15 + 7 = 22名; 3. 离开后:22 - 3 = 19名 | 19 | ✅ 正确 |
步骤2:多数投票
| 答案选项 | 获得票数 | 得票率 | 决策 |
|---|
| 答案 19 | 4票 | 80% | ✅ 最终答案 |
| 答案 25 | 1票 | 20% | ❌ 舍弃 |
2024年最新进展
| 创新技术 | 核心特点 | 性能提升 |
|---|
| 动态自我一致性 | 置信度评分器; 加权投票机制 | 效率提升40% |
| 通用自我一致性 | 支持开放式任务; LLM判断一致性 | 扩展应用范围 |
| 早停机制 | ESC自适应采样; 智能计算分配 | 成本降低50% |
自我一致性的核心步骤:
- 多样化采样:使用较高温度参数生成多条推理路径
- 独立推理:每条路径独立完成推理过程
- 答案提取:从每条推理路径中提取最终答案
- 多数投票:选择出现频率最高的答案作为最终输出
实际应用
基础实现示例
标准自我一致性:
def self_consistency(prompt, model, num_samples=5, temperature=0.7):
"""
实现自我一致性推理
"""
answers = []
# 1. 生成多条推理路径
for _ in range(num_samples):
response = model.generate(
prompt + "\n让我们一步步思考:",
temperature=temperature
)
# 2. 提取答案
answer = extract_answer(response)
answers.append(answer)
# 3. 多数投票
from collections import Counter
vote_counts = Counter(answers)
final_answer = vote_counts.most_common(1)[0][0]
confidence = vote_counts[final_answer] / num_samples
return final_answer, confidence
2024年优化技术
动态自我一致性(Dynamic SC):
def dynamic_self_consistency(prompt, model):
"""
动态调整采样数量的自我一致性
"""
answers = []
confidence_scores = []
for i in range(1, max_samples):
# 生成新的推理路径
response = model.generate(prompt, temperature=0.7)
answer = extract_answer(response)
# 计算置信度(7个文本指标)
confidence = calculate_confidence(response)
answers.append(answer)
confidence_scores.append(confidence)
# 早停检查:如果答案一致性足够高
if check_convergence(answers, confidence_scores):
break
# 加权投票而非简单多数投票
return weighted_vote(answers, confidence_scores)
通用自我一致性
对于开放式生成任务:
def universal_self_consistency(prompt, model, task_type="generation"):
"""
适用于摘要、创意写作等开放式任务
"""
outputs = []
# 生成多个输出
for _ in range(5):
output = model.generate(prompt, temperature=0.8)
outputs.append(output)
# 使用LLM判断一致性
consistency_prompt = f"""
以下是对同一问题的多个回答:
{format_outputs(outputs)}
请识别最一致和高质量的回答。
"""
best_output = model.select_best(consistency_prompt)
return best_output
应用场景与效果
-
数学推理:
- GSM8K数据集:准确率提升17.9%
- MultiArith:准确率从78.7%提升至89.3%
-
常识推理:
- CommonsenseQA:准确率提升12.2%
- StrategyQA:准确率提升6.4%
-
符号推理:
- Last Letter Concatenation:准确率提升8.3%
- Coin Flip:准确率提升15.1%
-
实际案例:
- 客服问答系统:减少错误回答35%
- 代码生成:bug率降低28%
- 医疗诊断辅助:诊断一致性提升42%
最佳实践
- 采样数量:通常5-10条路径即可获得良好效果
- 温度设置:0.5-0.8之间平衡多样性和质量
- 早停策略:简单问题使用动态采样节省计算
- 组合使用:与CoT、思维树等技术结合效果更佳
相关概念
延伸阅读