LLM 评审结果的归并与比较
使用 LLM 审查报告时,直接比较“发现了多少条问题”并不合适。同一张表中的四处错误,有的模型逐行列出,有的合并成一条。条数的差异可能只是拆分习惯不同。
还有一种差异来自核验深度。两个模型即使给出相同数量的问题,也可能只有一个找到了影响结论的错误。
一个能量提取错误
在一次计算化学任务中,Agent 使用 re.search
提取输出中的第一个
FINAL SINGLE POINT ENERGY,把优化起点的能量当成了收敛结果。
提取值为 −436.30180 Hartree,收敛值为 −436.600122 Hartree,两者相差约 187 kcal/mol。
几何优化过程中会反复计算能量,同一个关键词可能出现多次。正确解析需要结合计算是否收敛、输出属于哪个任务段,以及能量对应的几何。简单改成“取最后一个匹配值”也不总能解决问题,例如文件中可能包含后续失败的计算。
部分评审只检查了脚本打印的汇总结果,认为它与报告一致。另一些评审继续查看脚本和原始输出,才发现这个错误。只看问题总数,无法区分这两种情况。
归并成问题矩阵
比较评审结果前,可以先做去重:每一行表示一个具体问题,每一列表示一次评审,单元格记录是否发现了这个问题。
为方便归并,要求评审输出以下信息:
- 报告中的原文及位置;
- 报告声称的内容;
- 与之冲突的事实及证据位置;
- 涉及数值时,分别记录报告值与实际值。
以下是一个示意矩阵,1 表示发现,0 表示未发现:
| 问题 | 评审 A | 评审 B | 评审 C |
|---|---|---|---|
| 能量提取错误 | 1 | 0 | 1 |
| 频率结论与输出不符 | 1 | 1 | 0 |
| 方法参数写错 | 0 | 1 | 1 |
三次评审都发现了两条问题,但内容并不相同。只比较条数会认为结果一致,矩阵则能直接显示各自漏掉了什么。
如何判断是同一个问题
归并时,先检查引文是否能在报告中找到,再结合原文位置、数值对应关系和偏差大小判断是否为同一问题。多个数值必须按相同顺序配对,避免把不同物种的数据混在一起。
数值相近不一定代表同一问题,表述不同也不一定代表不同问题。例如,两个评审给出的收敛能量只在末位小数上不同,但都指出取到了优化起点,它们应当归为同一项。反过来,同一行数据既有舍入误差,又有计算结果选错的问题,就需要分别处理。
这里的原文位置和数值偏差是辅助判据,还需要确认它们指向相同的物理量和计算对象。无法确定的条目可以保留为待复核,不必强行合并。
一条汇总意见可能同时对应多个问题,可以将它分别标记到这些问题上。但不能因为有这条汇总意见,就把几个独立问题合并成一个。
归并后,可以比较各次评审的覆盖范围,以及哪些问题只被少数评审发现。不过,所有评审发现的问题并集仍可能有遗漏,以它为分母得到的覆盖率不能直接当作真实召回率。
问题的重要程度也要单独看。一个能改变反应能符号的解析错误,与一个软件版本笔误,都只占矩阵中的一行,但对报告结论的影响不同。矩阵负责整理发现结果,是否扣分以及扣多少分仍需要另行判断。
另外,同一模型重复运行,与不同模型交叉评审需要分开统计。前者主要反映运行波动,后者才适合讨论模型之间的互补性。