赞
踩
Code generation models based on the pre-training and fine-tuning paradigm have been increasingly attempted by both academia and industry, resulting in well-known industrial models such as Codex, CodeGen, and PanGu-Coder. To evaluate the effectiveness of these models, multiple existing benchmarks (e.g., HumanEval and AiXBench) are proposed, including only cases of generating a standalone function, i.e., a function that may invoke or access only built-in functions and standard libraries. However, non-standalone functions, which typically are not included in the existing benchmarks, constitute more than 70% of the functions in popular opensource projects, and evaluating models’ effectiveness on standalone functions cannot reflect these models’ effectiveness on pragmatic code generation scenarios (i.e., code generation for real settings of open source or proprietary code).
To help bridge the preceding gap, in this paper, we propose a benchmark named CoderEval, consisting of 230 Python and 230 Java code generation tasks carefully curated from popular real-world open-source projects and a self-contained execution platform to automatically assess the functional correctness of generated code. CoderEval supports code generation tasks from six levels of context dependency, where context refers to code elements such as types, APIs, variables, and consts defined outside the function under generation but within the dependent third-party libraries, current class, file, or project. CoderEval can be used to evaluate the effectiveness of models in generating code beyond only standalone functions. By evaluating three state-of-the-art code generation models (CodeGen, PanGu-Coder, and ChatGPT) on CoderEval and HumanEval, we find that the effectiveness of these models in generating standalone functions is substantially higher than that in generating nonstandalone functions. Our analysis highlights the current progress and pinpoints future directions to further improve a model’s effectiveness by leveraging contextual information for pragmatic code generation.
基于预训练和微调范式的代码生成模型在学术界和工业界都有越来越多的尝试,形成了著名的工业模型,如 Codex、CodeGen 和 PanGu-Coder。为了评估这些模型的有效性,提出了多个现有基准(如 HumanEval 和 AiXBench),其中只包括生成独立函数的情况,即只能调用或访问内置函数和标准库的函数。然而,非独立函数通常不包括在现有基准中,它们占流行开源项目函数的 70% 以上,因此评估模型在独立函数上的有效性并不能反映这些模型在实用代码生成场景(即在开源或专有代码的实际设置中生成代码)上的有效性。
为了弥补上述不足,我们在本文中提出了一个名为 CoderEval 的基准,其中包括从流行的实际开源项目中精心挑选的 230 个 Python 和 230 个 Java 代码生成任务,以及一个自足的执行平台,用于自动评估生成代码的功能正确性。CoderEval 支持六级上下文依赖的代码生成任务,其中上下文指的是在生成函数之外但在依赖的第三方库、当前类、文件或项目中定义的类型、API、变量和常量等代码元素。CoderEval 可用于评估模型在生成独立函数之外的代码时的有效性。通过在 CoderEval 和 HumanEval 上对三种最先进的代码生成模型(CodeGen、PanGu-Coder 和 ChatGPT)进行评估,我们发现这些模型在生成独立函数时的有效性大大高于生成非独立函数时的有效性。我们的分析强调了当前的进展,并指出了未来的方向,即通过利用上下文信息来生成实用代码,从而进一步提高模型的有效性。
多个现有的基准(例如HumanEval和AiXBench)仅包括生成独立函数的情况,缺少评估模型生成非独立函数(实用代码)的标准。
CoderEval的构建包括三个步骤:数据集收集、数据集探索和评估过程。
数据集收集分为:目标选择和构建测试样例。
选择函数的五条规则:
(1) 包含少于 10 个上下文标记的函数。过多的上下文依赖会使模型难以生成正确的解决方案。对于所有大型语言模型来说都难以生成正确实现的函数不适合用于基准测试。
(2) 由 13 名开发人员评判的在实际开发场景中经常使用的函数。这一规则背后的理由是,不同的开发人员对常用函数有不同的偏好;因此,CoderEval 中开发人员偏好函数的多样性可以消除潜在的偏差。
(3) 包含能反映函数实现的文档说明的函数。
(4) 实现代码超过三行的函数。
(5) 不属于测试或废弃函数的函数。
测评过程:环境准备+测评
测评结果分析回答了以下三个问题:
问题 1:CodeGen、PanGu-Coder 和 ChatGPT 在 CoderEval 和 HumanEval 上的表现如何?
在 CoderEval for Python 和 CoderEval for Java 上,三种模型生成独立函数的效率都大大高于生成非独立函数的效率。不同的模型在生成代码方面有其独特的能力,如何将不同模型的代码生成能力结合起来是一个值得研究的方向。
问题 2:不同模型在正确生成上下文信息方面的表现如何?
综上所述,大型语言模型生成正确上下文信息的能力(Acc@k)与生成正确代码的能力(Pass@k)高度相关。大语言模型生成不同类型(即 TypeReference、APIInvocation 和 VariableReference)上下文标记的能力因语言而异。
问题 3:提示语如何影响不同模型的有效性?
选择使用人工标注的文档字符串还是原始文档字符串会影响代码生成的效果。在单一语言的代码生成任务中,当给出语义相同但表达方式不同的自然语言描述时,使用单一语言语料库训练的模型比使用多种语言训练的模型表现更好。
不同的模型在生成代码方面有其独特的能力,如何将不同模型的代码生成能力结合起来是一个值得研究的方向。
无法保证收集到所有第三方库,独立函数和非独立函数的统计比例可能会略有偏差。
https://github.com/CodeArtsSnap/CoderEval
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。