CoderEval: A Benchmark of Pragmatic Code Generation with Generative Pre-trained Models
- 标题:CoderEval:基于生成式预训练模型的实用代码生成基准
- 摘要:基于预训练和微调范式的代码生成模型在学术界和工业界中得到了广泛应用,催生了许多知名的工业模型,如Codex、CodeGen和PanGu-Coder。为了评估这些模型的有效性,目前已有多个基准(如HumanEval和AiXBench)被提出,这些基准仅包括生成独立函数的案例,即仅调用或访问内置函数和标准库的函数。然而,非独立函数(即依赖于外部上下文的函数)在热门开源项目中占比超过70%,现有基准中的独立函数评估难以反映这些模型在实用代码生成场景(如开源或专有代码的真实环境生成)中的有效性。为弥补这一差距,本文提出了一个名为CoderEval的基准,包含230个Python和230个Java代码生成问题,这些问题从流行的真实开源项目中精心筛选,并提供了一个自包含的执行平台,用于自动评估生成代码的功能正确性。CoderEval支持六个层级的上下文依赖性,其中上下文指的是在目标函数之外但位于第三方库、当前类、文件或项目中定义的代码元素(如类型、API、变量和常量)。CoderEval可以用于评估模型在生成超出独立函数范围的代码时的有效性。通过在CoderEval和HumanEval上对三种先进的代码生成模型(CodeGen、PanGu-Coder和ChatGPT)进行评估,我们发现这些模型在生成独立函数时的有效性显著高于生成非独立函数时的表现。我们的分析总结了当前的进展,并指明了未来通过利用上下文信息进一步提升模型在实用代码生成中的有效性的方向。
- 关键词:Code Generation(代码生成)、LLMs(大模型)、Benchmark(基准测试)
- 开源地址:GitHub - CoderEval/CoderEval: A collection of practical code generation tasks and tests in open source projects. Complementary to HumanEval by OpenAI.
1. Introduction – 问题陈述
传统基准(如HumanEval)主要评估独立函数的生成能力,忽略了非独立函数在实际开发中的高占比(通过分析 GitHub 上分别用 Java 和 Python 编写的 100 个最受欢迎的项目发现非独立功能占开源项目功能的 70% 以上),导致无法全面评估模型在复杂依赖环境下的表现。
文章的主要贡献包括以下几点:
- 指出现有基准的局限性:通过分析100个最受欢迎的Java和Python开源项目,发现现有的基准(如HumanEval)主要包含独立函数,而非独立函数占据了开源项目中70%以上的比例。现有基准无法全面评估代码生成模型在实际应用场景中的表现。
- 提出CoderEval基准:CoderEval是一个面向实际代码生成的基准,从各种开源项目中收集问题,涵盖非原始类型、第三方库和项目特定的上下文引用。此外,CoderEval引入了人工标注的文档字符串,补充了原始文档字符串,为目标函数提供了更丰富的描述。
- 评估并比较三种先进的代码生成模型:文章在CoderEval上对CodeGen、PanGu-Coder和ChatGPT三种模型进行了实验,得到三大重要结论:(1) 这些模型在生成非独立函数时表现不如独立函数;(2) 即使是最强大的ChatGPT,生成具有上下文依赖的代码仍然具有挑战性;(3) 使用人工标注的文档字符串相较于原始文档字符串对生成代码的效果有显著影响。
2. Background – 代码生成及其基准测试的背景
2.1 用于代码生成的大型语言模型
- PanGu-Coder:一种用于文本到代码生成的预训练语言模型,基于PanGu-α架构,并采用双阶段训练策略。
- CodeGen:一系列用于文本到代码的大型语言模型,训练数据包括自然语言语料、多语言代码语料(多种编程语言)和Python代码数据集。
- Codex:首个使用大型生成预训练模型从自然语言生成完整函数的模型。
- AlphaCode:专注于编程竞赛,在表现上与普通人类开发者相当。
- InCoder:一个统一生成模型,既能进行程序生成(从左到右生成),也能进行代码编辑(通过填充完成)
2.2 代码生成的基准测试
-
CoderEval(本文提出)&