Quan, S., Yang, J., Yu, B., Zheng, B., Liu, D., Yang, A., … & Lin, J. (2025). CodeElo: Benchmarking competition-level code generation of LLMs with human-comparable elo ratings. arXiv preprint arXiv:2501.xxxxx.
研究背景与动机
研究问题:
该论文主要解决的问题是当前缺乏一个能够有效、全面且标准化地评估大语言模型在竞赛级别代码生成任务上能力的基准。随着LLMs代码推理能力的提升,特别是像OpenAI o1系列和DeepSeek r1这样的推理模型取得突破,现有的代码基准在评估这类高级能力时存在明显不足。
研究背景与动机:
现有基准的局限性: 论文指出,如LiveCodeBench、USACO、CodeContests等现有竞赛代码基准存在三个主要缺陷:
- 高误判率: 由于无法获取平台私有的、经过精心设计的对抗性测试用例,只能依赖少量公开或自生成的测试用例,导致模型生成的错误代码可能被误判为正确。
- 缺乏特殊评测支持: 约30%的竞赛题目没有唯一正确答案,需要特定的评测代码进行判断,而现有基准普遍不支持此类“特殊评测”。
- 执行环境未对齐: 离线评测环境与官方在线评测平台在执行效率上存在差异,而算法运行时间在竞赛中是关键评判指标,这导致了评估结果的不准确。
标准化与可比性的缺失: 尽管CodeForces平台被广泛用于评估高级代码模型,但缺乏一个标准化的测试套件,导致不同研究之间的评估设置和结果难以比较,也无法提供与人类参与者能力直接对应的标准化评分。
因此,研究者们提出了CodeElo基准,旨在通过一种新颖的评测方法,首次同时实现零误判、支持特殊评测、执行环境完全对齐,并提供与人类参与者能力可比的、标准化的Elo评分,以更准确地衡量LLMs在竞赛级别编程任务上的真实能力。
论文核心方法和步骤
CodeElo基准构建:
问题收集与分类:
- 从CodeForces官方平台抓取近期(2024年5月4日至11月4日)的54场竞赛,共387道题目。
- 对题目进行详细解析和分类,保留原始HTML格式以确保信息完整性。
- 引入三个关键分类维度:
- 竞赛难度分级: Div. 1, Div. 2, Div. 3, Div. 4, Div. 1+2。
- 题目难度评级: 基于平台上人类参与者的表现统计得出,代表特定评级的参与者首次看到该题时有50%的概率通过。
- 题目算法标签: 35种算法标签,用于分析模型在不同算法类型上的表现。
核心评测方法:
- 平台直接提交评测: 这是CodeElo最核心的创新。研究者开发了一个自动提交机器人,将模型生成的代码直接提交到CodeForces官方平台进行评测。
- 优势:
- 零误判: 利用平台完整的、对抗性的测试用例进行判断。
- 支持特殊评测: 平台内置的特殊评测逻辑能被自动调用。
- 执行环境对齐: 所有代码都在与人类参与者完全相同的环境中运行,时间限制等约束条件得到严格执行。
- 优势:
- 评测设置: 每个模型对每道题有最多8次提交机会。失败尝试会被记录并影响最终得分,模拟人类参赛者的罚时机制。
- 平台直接提交评测: 这是CodeElo最核心的创新。研究者开发了一个自动提交机器人,将模型生成的代码直接提交到CodeForces官方平台进行评测。
Elo评分计算系统:
- 为了提供与人类可比的评分,CodeElo设计了一套与CodeForces平台对齐但方差更低的Elo评分计算方法。
- 核心公式: 对于一个有 $n$ 名人类参与者的竞赛,他们的评分分别为 $r_{(i)}$ (i=1,2,…,n),模型在该竞赛中的排名为 $m$。模型的期望Elo评分 $r$ 满足以下方程:
$$
m = \sum_{i=1}^{n} \frac{1}{1 + 10^{(r - r_{(i)}) / 400}}
$$ - 计算过程: 由于等式右边是关于 $r$ 的单调递减函数,可以通过二分查找精确求解 $r$。模型在所有竞赛中的最终Elo评分是其在各场竞赛中期望评分的平均值。
- 优势:
- 人类可比性: 评分直接对应于人类参与者在平台上的百分位排名。
- 综合考虑难度与尝试次数: 通过解决更难的问题获得更高分数,并因失败的尝试而受到惩罚,比传统的pass@$n$指标更能全面反映模型能力。
- 低方差: 通过对多场竞赛取平均,显著降低了评分的波动性。
实验设置:
- 评测模型: 30个开源模型和3个闭源模型。
- 提示词: 统一使用链式思维提示,要求模型用C++编写代码。
- 推理配置: 开源模型使用vLLM进行推理,温度=0.7,top_p=0.8等。
实验结果与结论
主要实验结果:
整体性能排名:
- 闭源模型: OpenAI的o1-mini表现最佳,Elo评分达到1578,超过了约90%的人类参与者。
- 开源模型: QwQ-32B-Preview表现突出,Elo评分为1261,约处于人类参与者的第60个百分位。
- 多数模型表现不佳: 大多数模型即使在最简单的题目上也表现挣扎,其Elo评分处于人类参与者的最低20%区间。模型规模与性能呈正相关趋势。
跨算法类别性能分析:
- 模型擅长的领域: 数学、实现、排序类问题。
- 模型薄弱的领域: 动态规划、深度优先搜索及其变种、树形结构问题,许多模型在这些类别上通过率为零。
编程语言选择的影响:
- 一个关键发现是,尽管LLMs更常使用Python,但在CodeElo基准上,使用C++的模型性能显著优于使用Python的模型。
- 这与人类参赛者的经验一致,因为C++在执行效率上更具优势,能更好地满足竞赛题目对运行时间的苛刻要求。这一发现揭示了现有模型在语言选择认知上的不足,并表明以往的基准(如主要使用Python测试的APPS和LiveCodeBench)可能未能激发出模型的最佳性能。
[!NOTE] Title
或许是因为,用 c++的题解更多,训练模型时学习到的更多是基于 c++的解法。
- Elo评分的稳定性:
- 通过测试54场竞赛,模型整体平均Elo评分的标准差被控制在50左右,表明评测结果具有较好的稳定性。
结论与意义:
- 基准贡献: CodeElo首次提供了一个能够实现零误判、支持特殊评测、执行环境对齐,并能给出人类可比Elo评分的竞赛级别代码生成基准。
- 模型能力洞察: 研究结果表明,类似o1的长链式思维推理模型在解决复杂代码问题上展现出巨大潜力。同时,大多数现有模型距离具备稳健的竞赛级别编程能力仍有很大差距。
- 指导未来研究:
- 模型开发: 结果表明需要进一步提升模型在动态规划、图论等复杂算法上的推理能力。
- 评测实践: 强调了在评估代码生成能力时,考虑执行效率和使用合适编程语言(如C++)的重要性。
- 训练策略: 建议在训练代码模型时,应加强其对于不同编程语言适用场景的认知,特别是在效率关键型任务中优先选择C++。
CodeElo基准为社区评估和推进LLMs在高级代码推理能力方面的发展提供了一个强有力的工具,并为未来的研究方向提供了宝贵的见解。