
当五个模型意见相左
为了探究在单机上运行多个小型语言模型的潜力,研究团队让五个模型回答同一问题并允许查阅资料,结果发现它们经常产生分歧。简单的多数投票无法解决模型共同犯错的问题,因此团队提出了“验证,然后投票”(Verify, Then Vote)方法:将回答、检查来源和选择答案分为独立步骤,并保存每步结果以便回溯。
实验设置:五个本地模型与一个检查器
实验在配备 36 GB 内存的 Apple M3 Pro 芯片上进行,通过 Ollama 运行 Llama 3.2 3B、Mistral 7B、Gemma 2 2B、Phi-3 mini 和 Qwen 2.5 3B 五个模型。程序整夜运行,约八小时完成。
每个模型生成搜索查询,针对一般性问题获取维基百科片段,针对科学主张获取研究摘要,随后给出答案、置信度及最多三段引用文本。所有数据在选定答案前均被保存。
来源检查由独立托管的 Claude Sonnet 5.5 执行。它仅查看答案陈述和引用段落,判断段落是支持、反驳还是不足以说明答案,且从未接触过正确答案。
有来源支持的答案仍可能出错
检查机制仅判断段落是否支持答案,而非段落本身的真实性。例如,若文本错误声称悉尼是澳大利亚首都,它仍会“支持”该错误答案。
决策规则从得票最多的答案开始,仅当检查器指出某引用段落支持另一答案时才切换。团队使用 Lean 4 证明了一条性质:若规则将正确答案替换为错误答案,必然存在一个来源检查支持了该错误答案。这指明了排查方向,但无法保证来源真实或检查器解读无误。
初步测试结果:修正91处错误,引入12处新错
在1,000个主要问题的测试中,该规则将准确率从简单多数投票的77.1%提升至85.0%。在526个模型答案混合对错的问题中,规则修复了91个错误答案,但破坏了12个原本正确的答案,使这部分准确率从71.5%升至86.5%。
然而,预设在投票正确答案中的错误破坏率上限为5%。实际测试中,376个投票正确的答案中有12个被误改(3.2%),考虑到统计波动,真实错误率可能高达5.5%,导致原始规则未能通过测试。
消融实验显示,若删除或替换引用文本,91处修正中有76处消失,证明段落内容至关重要,尽管 Sonnet 可能仍依赖其内部知识。
修订规则:若答案已有支持则保持不变
基于上述发现,团队制定了更谨慎的规则:若起始答案已有来源支持,则保持不变。该变更在收集新一批模型答案前确定,并复用了相同答案和段落的检查结果。
在新模型集测试中,547个混合答案问题里有73处被修复,仅3处被破坏,准确率从73.1%提升至85.9%。在400个投票正确的答案中,仅3个被误改(0.75%),最坏情况率为2.2%,远低于5%的上限,修订规则顺利通过测试。这表明该规则具有一定的模型迁移能力,但不代表能解决全新问题。
为何不直接让 Sonnet 决策?
对比测试显示,Sonnet 在相同条件下选出正确答案的概率为93.9%,高于规则的86.5%;且成本更低(每题约0.014美元,而来源检查成本约0.021美元,均不含生成成本)。
尽管如此,该方法的价值在于后续阶段:由于每次检查均被保存,团队可以确切追溯决策原因,并在无需支付新检查费用的情况下尝试不同规则。相比之下,要求裁判模型重新选择意味着发起新的API调用。
无需额外调用即可重跑决策
在包含 TruthfulQA 100题在内的1,100个问题中,模型在702个问题上有分歧。通过 Python 脚本每次移除一个模型,并将剩余保存的答案交给 Rust 程序重选,所有3,510次重跑均在23秒内完成,无需新的模型调用。
结果显示,9.4%的最终答案因模型构成变化而改变,证明结果高度依赖参与模型的组合。由于回答、检查和选择分离,团队可在不改变答案和检查结果的前提下调整选择逻辑。
下一步计划与开源资源
未来工作需要引入新问题而不仅是新规则。得益于完整的运行记录,团队可在付费收集更多数据前,深入分析决策并衡量规则变更的效果。
目前,论文、代码、证明文件及保存的运行记录均已开源至 GitHub,附带可重现结果的脚本及用于在相同数据集上测试自定义规则的工具。