# 评测代码：看起来合理，不等于真的正确

作者：贺育隆（Yulong He）
更新日期：2026-09-06
内容类型：已发表论文解读与技术思考
主题：代码智能
页面：https://hreyulog.github.io/wiki/code-evaluation.html

为什么大模型打分与代码对数概率会给出不同判断？从已发表实验理解评测信号的适用范围。

没有现成参考答案，或者执行测试成本较高时，怎样评价一段生成代码？让另一个大模型给分是一种办法，利用模型对代码的生成概率也是一种办法。问题在于：它们测量的是同一件事吗？

## 两种信号，两种观察角度

在 GEM 2026 发表的合著论文中，我们比较了显式的大模型评判与任务条件下的代码对数概率。前者直接判断任务和解答是否匹配，后者提供不依赖显式打分指令的统计信号。[论文与公开全文](https://aclanthology.org/2026.gem-main.55/)

论文在 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.

研讨会论文 · 已发表。 [原始文献](https://aclanthology.org/2026.gem-main.55/)


## 延伸阅读

- [预测得准，为什么仍可能找错异常](https://hreyulog.github.io/wiki/anomaly-detection.html)
- [从数据到判断：我的研究方法](https://hreyulog.github.io/wiki/research-approach.html)
