它要解决的问题
要判断一个代码大模型是否真的变强,通常的做法是让它做一套固定的题目。问题在于,这套题一旦公开、又被沿用多年,它测的就不再是能力。题目会出现在互联网上,进而进入后续模型的训练数据;这时高分反映的是记忆而不是本事,这种失效一般称为数据污染(contamination)。《LiveCodeBench》的作者把它当作诚实评测的核心障碍,同时也考察了一个相关的担忧:模型可能在 HumanEval、MBPP 这类已有基准上过拟合[1]。他们的办法是让基准本身不断更新。这篇论文由 Naman Jain、King Han、Alex Gu 等共十位作者(其中包括 Ion Stoica)在 2024 年 3 月 12 日提交到 arXiv[1]。
怎么做的
LiveCodeBench 持续从 LeetCode、AtCoder、CodeForces 三个竞赛平台的比赛中收集新题[1]。这个设计把时间的流逝变成了防线:在某个模型训练数据截止之后才出现的题目,该模型不可能见过,答对才算是能力的证据。题目经过筛选,而不是全量抓取;论文写作时,题库收录了 2023 年 5 月至 2024 年 5 月间发布的 400 道高质量编程题[1]。保留发布日期还有一个好处,作者可以按时间切分结果,把模型在训练截止前后两批题上的表现分开来看。
第二个设计选择是覆盖面。按自然语言描述写出一个函数,只是实际使用中的一种任务,所以基准还加入了其他场景:自我修复(self-repair)、代码执行(code execution)和测试输出预测(test output prediction)[1]。自我修复是给模型看一段运行失败的代码,让它改对;代码执行问的是程序跑起来会做什么;测试输出预测问的是某个测试用例会得到什么结果。一个能写出看起来合理的代码、却不太会推理代码行为的模型,在这几类任务上的表现会不一样。
实验结果
作者评测了 18 个基座模型和 34 个指令微调模型[1]。结果围绕三条线索展开:对数据污染的测量以及污染对分数的影响,对 HumanEval、MBPP 等现有基准可能存在过拟合的证据,以及单个模型之间的横向比较[1]。把同一模型的基座版本和指令微调版本放在一起比是这套评测有意为之的部分,因为它能区分预训练带来了什么、后续微调又加上了什么,而一个总分回答不了这个问题。
为什么重要
一个不断纳入新题的基准,不会像固定题库那样很快过时:题目之所以一直有用,正是因为它们一直在被换掉。这使得把今年发布的模型和之后发布的模型放在双方都没见过的题目上比较成为可能。
公开了什么
作者表示会公开所有提示词(prompt)与模型输出,以及一套用于添加新场景和新模型的通用工具包[2]。公开提示词和输出,让单个数字可以被复核;而一套能添加新场景的工具包,则让其他团队可以在这套评测上继续扩展,而不必另起炉灶。
注释与来源
- LiveCodeBench: Holistic and Contamination Free Evaluation of Large Language Models for Codehttps://arxiv.org/abs/2403.07974
- 2403.07974 (full text, HTML)https://ar5iv.labs.arxiv.org/html/2403.07974
引用本页: 《LiveCodeBench:面向代码的大模型全面且无污染评测》. TellWorld, https://www.tellworld.net/zh/papers/livecodebench. 更新于 2026-11-08