评测代码:看起来合理,不等于真的正确
没有现成参考答案,或者执行测试成本较高时,怎样评价一段生成代码?让另一个大模型给分是一种办法,利用模型对代码的生成概率也是一种办法。问题在于:它们测量的是同一件事吗?
两种信号,两种观察角度
在 GEM 2026 发表的合著论文中,我们比较了显式的大模型评判与任务条件下的代码对数概率。前者直接判断任务和解答是否匹配,后者提供不依赖显式打分指令的统计信号。论文与公开全文
论文在 HumanEval-X 上观察到,两者对生成代码和最小变异代码的表现不同:显式评判在生成解答上更有优势,却难以稳定区分正确解答与轻微修改后的错误版本;对数概率在后一种成对区分中更有辨别力。这是实验范围内的互补性,不是“概率可以证明代码正确”。
一个总体分数会隐藏什么
我的理解是,候选排序与局部错误识别不是同一项能力。模型可能善于选出整体更合理的解答,却漏掉只改动一个边界条件的错误。也可能对局部结构变化敏感,但难以完整理解需求。
因此,评测器不能仅靠一个相关系数或总准确率来描述。需要区分它面对的是怎样的候选集合、怎样的错误,以及最终要支持哪一种选择。
如何把这种认识带入评测设计
我会把代码质量判断拆开讨论:需求语义是否满足,局部逻辑是否正确,结果能否通过执行验证,以及评判在不同输入上是否稳定。不同信号可以提供证据,但不应该未经校准就相加成一个“综合正确率”。
有测试条件时,应保留执行证据;没有测试条件时,应明确非执行式信号的局限。论文并未证明某一种信号能够普遍替代测试,也没有证明任意组合就一定改善效果。
我从这项工作中更重视什么
评测本身也是一个建模问题。选择评测器,与选择被评测的模型一样,需要理解数据分布、目标和失效方式。对工程决策而言,知道一个分数在什么情况下不可靠,和知道它平均有多高同样重要。
依据文献
语义与结构信号:无参考答案的代码评测
Dmitriy Fedrushkov, Yulong He, Ivan Smirnov, Artem Aliev, Sergey Kovalchuk. Semantic vs. Structural Signals: Log-Probability and LLM-as-a-Judge for Reference-Free Code Evaluation. Proceedings of the Fifth Workshop on Generation, Evaluation and Metrics (GEM), 574–581, 2026.
研讨会论文 · 已发表。 原始文献