摘要:
研究背景 大语言模型(LLMs)在软件工程领域获得了广泛关注,在代码生成、补全和理解等任务中表现出色。随着这些模型越来越多地被集成到开发工作流程中,如何准确评估其生成代码的质量已成为关键挑战。有效的代码排名对于代码审查、优化解决方案以及提供改进代码的反馈等任务至关重要。传统的代码评估方法通常依赖于基于执行的度量,主要关注功能正确性。然而,这类方法存在明显局限:不仅评估过程耗时、需要复杂的环境配置,更难以捕捉代码在可读性、可维护性等关键质量维度上的表现。尽管LLMs有潜力作为“裁判”来进行代码排名,但目前缺乏全面评估其在不同排名范式(点对点、成对比较、列表比较)下表现的资源,并且未能测试它们在常见代码缺陷下的鲁棒性。缺乏适当的基准测试,限制了对基于LLM的代码排名系统的有效评估和改进。
目的 本论文旨在通过研究基准测试,为基于LLM代码排名的表现、成本效益和鲁棒性提供有价值的见解,填补现有文献中的重要空白,并为研究人员和实践者提供工具,帮助他们更好地理解和提升LLM在现实世界软件工程应用中的能力。
方法 我们提出了CodeRankEval,一个旨在评估代码排名模型在点对点、成对比较和列表比较排名范式下表现的基准测试套件。CodeRankEval是基于五个LLM在HumanEval基准问题上生成的代码所构建的,提供了一个多范式数据集。该数据集包括三个部分:点对点(pointwise)、成对比较(pairwise)和列表比较(listwise)排名,这些排名通过专有LLM评估者的共识评分生成。为了评估LLM在应对常见代码缺陷(如无关注释和混淆)时的鲁棒性,我们通过引入噪声(如无关注释、变量混淆和死代码),创建了CodeRankEval-Perturbed版本,评估使用 ndcg@k、accuracy@t1和pass@t1等度量指标。
结果 CodeRankEval数据集揭示了排名范式之间的明显性能与成本权衡:成对比较(pairwise)在准确度上始终表现最佳,但其计算成本最高,为O(n²);而列表比较(listwise)则提供了最低的成本O(1),同时在识别正确的顶级解决方案方面具有竞争力。点对点(pointwise)提供了平衡的结果,但与成对比较和列表比较相比,其准确度较低。此外,简单的提示设计(如Simple)能够产生最佳的排名准确性,这表明较少的限制性指令有助于模型更有效地执行任务。进一步而言,尽管存在常见的输入扰动,LLM仍然表现出强大的鲁棒性,但它们对位置偏差依然敏感。这些发现强调了根据具体应用需求选择排名范式的重要性,并进一步凸显了像CodeRankEval这样的专用基准在评估实际场景中模型性能的价值。
结论 提示设计和排名范式显著影响基于LLM的代码排名性能。较简单的提示能够在点对点、成对比较和列表比较任务中获得更好的排名准确性。尽管成对比较排名实现了最高的准确性,其计算成本也最高;而列表比较排名则最具成本效益,但在排名质量上表现较弱。此外,模型对常见的输入扰动表现出强大的鲁棒性,并且代码生成与排名性能之间存在正相关关系,尽管这种关系并非绝对。下一步工作包括提高成对比较排名的效率,并扩展框架以包括多模块任务和更多编程语言。