【论文研读】只用大模型写代码就够了?复旦发布ClassEval,首次评估LLMs类级别代码生成能力,结果喜忧参半

【导读】最近很多企业和校园学生开始使用大模型编程。但是有多少人知道大模型的实际代码生成能力?这篇文章提出了一个新颖的代码生成基准测试ClassEval,专注于类级别的代码生成,这是现有基准测试中较少涉及的领域。文章详细描述了ClassEval的构建过程,并通过实验评估了11种最先进的大型语言模型在类级别代码生成任务上的表现。研究发现,尽管GPT模型在类级别代码生成上仍表现出色,但所有模型在该任务上的性能均显著低于函数级别的代码生成。此外,文章还探讨了不同生成策略对模型性能的影响,为未来的研究和模型改进提供了有价值的见解。这篇文章发表在ICSE 2024上,是一个高质量的研究成果,对于我们理解大型语言模型在更复杂代码生成任务中的能力具有重要意义。

论文地址:https://dl.acm.org/doi/10.1145/3597503.3639219

研究背景与相关工作

研究背景

代码生成技术作为人工智能领域的一个重要分支,旨在通过自然语言描述自动生成相应的代码片段,从而提高软件开发效率。随着大型语言模型(LLMs)的兴起,代码生成技术迎来了新的发展机遇。然而,现有的评估方法主要集中在函数级别或语句级别的代码生成上,这些方法不仅生成的代码片段较短,难以充分展现LLMs在生成长代码片段方面的潜力,而且主要关注单个代码单元的生成,忽略了代码单元之间的依赖关系,难以反映真实软件开发场景中的复杂性。因此,如何全面评估LLMs在复杂软件开发场景中的表现成为了一个亟待解决的问题。

相关工作

代码生成模型

近年来,随着大型语言模型(LLMs)的发展,代码生成技术取得了显著进步。例如,GPT-4在HumanEval基准测试中表现出色,展示了其在代码生成方面的强大能力。此外,像WizardCoder和Instruct-CodeGen这样的模型也通过训练大量代码和文本数据,显著提升了代码生成的质量。这些模型不仅在代码生成任务中表现出色,还在代码补全、代码修复等多个领域展现出潜力,为代码生成技术的发展注入了新的活力。

代码生成基准测试

为了评估代码生成模型的能力,研究者们提出了多种基准测试。这些基准测试通常包含一系列编码任务,每个任务由一个自然语言描述作为输入,对应的代码作为输出。评估指标如通过率(Pass@k)被广泛用于衡量生成代码的正确性。然而,现有的基准测试主要集中在函数级别或语句级别的代码生成上,很少考虑代码之间的依赖关系,这限制了我们对模型在更复杂、更真实的软件开发场景中的表现的理解。

代码依赖关系处理

在真实的软件开发中,代码片段之间往往存在复杂的依赖关系。例如,一个方法可能依赖于其他方法或类变量。然而,现有的代码生成模型在处理这些依赖关系时仍面临挑战。一些研究尝试通过引入额外的上下文信息或采用逐步生成策略来提高模型处理依赖关系的能力,但效果有限。这表明,在处理复杂代码生成任务时,模型需要更强的理解和生成依赖代码的能力。

逐步生成策略

为了应对复杂代码生成任务的挑战,研究者们提出了逐步生成策略。这些策略将复杂的代码生成任务分解为一系列更简单的子任务,逐步完成代码片段的生成。例如,增量生成策略要求模型在每次迭代中基于已生成的代码片段生成下一个代码片段,直到完成整个代码的生成。这种策略有助于模型更好地处理代码之间的依赖关系,提高代码生成的质量和效率。

复旦发布ClassEval

新工作介绍

复旦大学团队在最新的研究中发布了一个名为ClassEval的代码生成基准测试集,该测试集专注于评估大型语言模型(LLMs)在类级别代码生成中的能力。其核心关键词包括类级别代码生成基准测试集LLMs评估。类级别代码生成是指生成包含多个方法、字段和依赖关系的完整类代码,这是现有基准测试中较少涉及的领域。通过ClassEval,研究者能够更全面地了解LLMs在复杂软件开发场景中的表现。

这项工作的亮点在于,它首次将评估焦点从函数级别或语句级别提升到了类级别,从而更贴近真实软件开发的需求。此外,ClassEval的构建过程严格且全面,涵盖了多种真实世界的开发主题,如游戏开发、文件管理和管理系统等,确保了测试集的实用性和多样性。同时,ClassEval还考虑了类中的方法依赖关系,使得评估结果能够更准确地反映LLMs在理解代码上下文和生成依赖代码方面的能力。

Table 1: Existing Benchmarks for Code Generation
图注:表1展示了现有的代码生成基准测试集,ClassEval填补了类级别代码生成评估的空白。

方法

ClassEval基准测试集的构建方法主要包括以下步骤:

  1. 任务选择:从多个来源选择任务,包括参考现有基准测试集、探索PyPI主题和头脑风暴等,以确保任务的多样性和实用性。
  2. 类骨架构建:为每个任务构建一个类骨架,描述目标类的功能和预期行为。类骨架的构建遵循依赖性原则、构造函数原则、方法功能原则、方法参数原则和方法返回值原则,以确保生成的代码具有多样性和可测试性。
  3. 测试套件构建:为每个任务构建测试套件,包括方法级别测试和类级别测试,以验证生成的代码的正确性。
  4. 规范解构建:为每个任务编写规范解,与测试套件一起用于评估生成的代码的正确性。

在实验方法方面,研究团队采用了三种不同的生成策略来评估LLMs在ClassEval上的表现:整体生成、增量生成和组合生成。这些策略分别代表了模型一次性生成整个类、逐步生成类中的每个方法和独立生成类中的每个方法然后组合成整个类的不同方式。

Figure 2: An Example of Class Skeleton in ClassEval
图注:图2展示了ClassEval中一个类骨架的示例,包括类名、字段和方法等元素的定义。

Figure 3: Overview of ClassEval Construction Process
图注:图3概述了ClassEval的构建过程,包括任务选择、类骨架构建、测试套件构建和规范解构建等步骤。

实验结果

实验结果表明,尽管GPT模型在类级别代码生成上仍表现出色,但所有LLMs在该任务上的性能均显著低于函数级别的代码生成。这表明LLMs在处理复杂代码生成任务时仍存在挑战。具体来说,GPT-4和GPT-3.5在类级别代码生成中仍然领先于其他LLMs,显示出在处理长文本和复杂任务方面的优势。

此外,实验还发现,对于大多数模型(除了GPT模型),增量生成和组合生成策略通常优于整体生成策略。这表明这些模型在处理长指令和利用中间信息方面存在局限性。同时,所有模型在生成依赖代码方面都表现出一定的局限性,尤其是在生成方法调用代码时更为困难。

Table 5: Comparative Distribution of Dependency Levels
图注:表5展示了ClassEval与其他基准测试集在依赖级别分布上的比较,突出了ClassEval在类级别代码生成任务上的独特性。

Figure 6: Pass@5 of Three Generation Strategies
图注:图6展示了三种生成策略在ClassEval上的Pass@5结果,表明增量生成和组合生成策略通常优于整体生成策略。

Figure 8: Distribution of correctly-generated methods in increasing method dependencies
图注:图8展示了正确生成的方法数量随着方法依赖关系增加的分布情况,表明模型在生成高依赖级别的方法时面临更大的挑战。

这些实验结果不仅揭示了LLMs在类级别代码生成中的当前局限性,也为未来的研究和模型改进提供了有价值的见解。

应用场景 & 未来研究方向

应用场景

ClassEval基准测试集的问世,不仅为学术界提供了研究大型语言模型(LLMs)在类级别代码生成能力的重要工具,还为工业界在多个领域带来了潜在的应用前景:

  1. 软件开发自动化:通过利用LLMs生成高质量的类级别代码,可以显著提升软件开发效率,缩短软件交付周期。在快速迭代的开发环境中,这种自动化能力尤为重要。

  2. 代码补全与修复:ClassEval评估的模型可以应用于集成开发环境(IDE)中,提供智能的代码补全和修复建议。当开发者编写代码时,IDE可以实时分析上下文,并利用LLMs生成或修正代码片段,提高开发效率和质量。

  3. 教育培训:在编程教育领域,ClassEval可以作为教学辅助工具,帮助学生理解类级别代码的结构和编写方法。通过展示LLMs生成的代码示例,学生可以更直观地学习编程技巧,提升编程能力。

  4. 代码质量评估:在代码审查过程中,可以利用LLMs对代码进行静态分析,评估其质量。通过对比生成的代码与规范解的差异,可以发现潜在的问题和改进空间,提升代码的整体质量。

未来研究方向

尽管ClassEval基准测试集为LLMs在类级别代码生成能力的研究提供了新的视角和方向,但仍存在许多潜在的问题和改进空间:

  • 模型泛化能力:当前LLMs在类级别代码生成中的表现仍受限于特定任务和领域。未来的研究可以探索如何提升模型的泛化能力,使其能够处理更多样化的任务和领域。

  • 代码上下文理解:LLMs在生成依赖代码时仍面临挑战。未来的研究可以关注如何提升模型对代码上下文的理解能力,包括类之间的依赖关系、方法之间的调用关系等,以生成更准确的代码。

  • 代码风格一致性:在软件开发中,保持代码风格的一致性至关重要。未来的研究可以探索如何在LLMs生成的代码中引入风格约束,确保生成的代码符合项目或团队的编码规范。

  • 多模态输入支持:当前LLMs主要依赖于文本输入来生成代码。未来的研究可以探索如何支持多模态输入,如结合自然语言描述、图形界面设计或用户交互行为等,以生成更符合用户需求的代码。

总的来说,我认为ClassEval基准测试集为LLMs在类级别代码生成能力的研究提供了新的机遇和挑战。未来的研究将不断推动这一领域的进步和发展,为软件开发和编程教育等领域带来更多的创新和变革。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值