⏶8
CodeContests+:高质量竞技编程测试用例生成
发表
由
Zihan Wang 提交
作者:
Zihan Wang, Siyao Liu, Yang Sun, Hongyan Li, Kai Shen
摘要
竞技编程,由于其高推理难度和精确的正确性反馈,已成为训练和评估大语言模型(LLM)推理能力的关键任务。然而,尽管大量的公开问题数据(例如问题描述和解决方案)是可获得的,但这些问题的测试用例却往往难以获取。因此,测试用例生成是构建大规模数据集的一项必要任务,且测试用例的质量直接决定了评估的准确性。在本文中,我们介绍了一个基于LLM的代理系统,该系统能够为竞技编程问题创建高质量测试用例。我们将该系统应用于CodeContests数据集,并提出了一个测试用例得到改进的新版本,命名为CodeContests+。我们对CodeContests+中的测试用例质量进行了评估。首先,我们使用了172万份带有通过/失败标签的提交来检验这些测试用例在评估中的准确性。结果表明,CodeContests+比CodeContests取得了显著更高的准确性,尤其是在真阳性率(TPR)方面显著更高。随后,我们在LLM强化学习(RL)方面的实验进一步证实,测试用例质量的改进为RL带来了显著优势。
CodeContests+ 是一个竞技编程问题数据集,构建于 CodeContests 之上。它包含 11,690 道竞技编程问题,以及相应的高质量测试用例、测试用例生成器、测试用例验证器、输出检查器,以及超过 1300 万个正确和不正确的解决方案。
高质量测试用例: 我们开发了一个生成器-验证器智能体系统 (Generator-Validator Agent System),能够为每个问题构建高质量的测试用例。除了随机测试用例之外,它还生成针对问题特性和各种边缘情况的特殊测试用例,旨在尽可能覆盖所有潜在错误。此外,这些测试用例的正确性通过独立的测试用例验证器进行验证,以确保它们符合问题约束。
测试用例生成器: 我们为每个问题提供了一个测试用例生成器,以及运行它的命令。这些命令可以多次运行,以生成无限数量的测试用例。这使用户能够清楚地了解所有测试用例的具体特征,并让他们能够使用这些生成器创建所需数量的额外测试用例。
灵活的测试用例数量: 此外,我们还提供了预生成的测试用例,分为五个版本:1x、2x、...、5x。这些版本中的测试用例数量依次增加,因此运行它们所需的计算资源也会随之增加。这使用户能够根据自己的需求,在计算成本和覆盖率之间取得平衡。
测试用例验证器: 竞技编程问题通常对输入数据本身有许多约束,包括数据范围、格式要求、数据结构要求等。因此,构建完全有效的测试用例并非易事,即使是专业的出题人也容易犯错。对于每个问题,我们都提供了一个测试用例验证器,它严格检查测试用例输入是否满足问题描述中列出的所有约束,以尽可能确保测试用例的有效性。
多答案问题的输出检查器: 在编程竞赛中,具有多个有效解决方案的问题非常常见。这意味着相同的输入可能对应多个有效输出。因此,不能简单地通过将程序的输出与单个预定义的正确答案进行比较来确定其正确性。出于这个原因,我们为所有此类问题提供了自定义的输出检查器,以验证输出的正确性。
严格评估: 为了严格评估这些测试用例的质量,我们使用了大量的解决方案来评估它们的准确性。对于每个问题,我们使用 100 个正确解决方案和 100 个不正确解决方案来确定测试用例是否能正确区分正确和不正确的提交。我们已将评估结果,包括真阳性率 (TPR) 和真阴性率 (TNR),记录在数据集中。