PaperWeekly 2024年12月25日
阿里、中科大等提出ExecRepoBench:仓库级可执行代码补全新基准
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了ExecRepoBench,这是一个针对仓库级代码补全的全新测试基准。现有代码补全评估方法多为静态,难以捕捉实际编码环境的动态性,存在上下文有限、指标片面等问题。ExecRepoBench包含50个活跃Python仓库的约1200个样本,并提出基于抽象语法树的多层次代码片段遮掩方法,构建了代码补全指令微调数据集Repo-Instruct。基于此数据集微调的Qwen2.5-Coder-Instruct-C模型在多个基准测试中表现出色,为代码补全任务的评估和改进提供了新思路。

💡ExecRepoBench是面向仓库级代码补全的全新测试基准,旨在解决现有静态评估方法无法捕捉实际编码环境动态性的问题。该基准包含50个活跃Python仓库的约1200个样本,具有更强的实用性和真实性。

🧩ExecRepoBench采用基于抽象语法树的多层次代码片段遮掩方法,构建了多级补全指令微调数据Repo-Instruct,覆盖多种编程语言,并从近 1.5M 仓库中采样了 3M 个样本,使得训练数据更具多样性和全面性。

🚀基于Repo-Instruct数据集微调的Qwen2.5-Coder-Instruct-C模型在多项基准测试中表现优异,尤其是在12项测试中的10项取得第一,验证了新基准和训练方法的有效性,并为代码补全模型提供了新的基线。

📊ExecRepoBench 包含六类补全任务,包括表达式级、语句级、函数级等,还新增了基于抽象语法树构建的复杂逻辑代码补全任务,更全面地考察代码补全模型的性能。

原创 让你更懂AI的 2024-12-25 21:12 北京

本文提出了 ExecRepoBench,一个面向仓库级代码补全的全新测试基准。

代码补全已成为日常软件开发中的重要工具。现有的评估基准通常采用静态方法,这些方法无法完全捕捉现实世界编码环境的动态特性,并面临重大挑战,包括上下文长度有限、依赖表面评估指标以及可能对训练数据集过度拟合


为此,本文提出一个全新的仓库级可执行的代码补全任务的测试基准:ExecRepoBench该基准包含来自 50 个活跃 Python 仓库的约 1200 个样本用于代码补全评估。此外,本文提出了一种基于抽象语法树的多层次的代码片段遮掩方法,并基于此方法构造了代码补全的指令微调数据集 Repo-Instruct


本文基于该数据集构建了代码补全基线模型 Qwen2.5-Coder-Instruct-C该模型在 MultiPL-E 和 ExecRepo Bench 上取得了优异的性能表现。

论文链接:

https://arxiv.org/abs/2412.05210

数据集链接:

https://huggingface.co/datasets/CSJianYang/ExecRepoBench

榜单链接:

https://execrepobench.github.io/leaderboard.html



可执行的仓库级代码补全基准

代码补全中的静态测试基准存在参考答案唯一,可能过拟合等问题,无法准确反映代码的实际可执行性和功能正确性。为此,本文创建了可执行的仓库级基准  ExecRepoBench。

▲ 评测流程示意图


测试集构建的过程中,遵循以下原则:


(1)只收集持续更新的 Python 语言的代码仓库。


(2)标注者收集或创建测试用例来进行评估。


(3)所有单元测试可以在有限时间内完成。


最终,ExecRepoBench 选取了 50 个具有复杂相互依赖关系的多文件 Python 仓库,先经过严格筛选以及人工创建可执行的单元测试,然后构建了 6 类,共计约 1200 个补全任务。


具体任务数量和 token 长度分布如下表所示:

6 类任务中,不仅包含传统的对单行、多行、多逻辑代码块进行补全,还新增了基于 AST 构建的复杂逻辑代码补全任务,具体包含:


1. 表达式级补全任务涉及诸如填补二进制运算中的操作数或运算符,提供适当的函数参数等。


2. 语句级补全任务针对单个语句的补全,例如变量赋值、控制流结构(if 语句、for 循环)等。目标是维护逻辑流并确保语法正确。


3. 函数级补全任务旨在补全整个函数体或填充函数签名,主要包括编写参数列表、返回类型和函数的内部逻辑。

▲ ExecRepoBench包含的仓库以及相应类别



基于抽象语法树的补全数据构造方法

本文提出了一种基于抽象语法树的多层次的代码片段遮掩方法,用于补全任务数据的构造。


该方法首先根据代码片段构建抽象语法树,然后提取其中语句级、表达式级、函数级和类级的代码片段,用于构建多级补全指令微调数据 Repo-Instruct,覆盖 Python、C#、Cpp、Java、Javascript、Typescript、Php 等 8 种编程语言,从近 1.5M 仓库中采样了 3M 个样本。


代码补全基线模型 Qwen2.5-Coder-Instruct-C 

与使用 Fill-In-Middle(FIM)的上下文填空训练的模型不同,本工作基于 Repo-Instruct,在 Qwen2.5-Coder-Instruct 7B 上进行微调得到了新的模型 Qwen2.5-Coder-Instruct-C。与 30 多个大小从 0.5B 到 30B+ 参数不等的模型相比,Qwen2.5-Coder-Instruct-C 在 12 项测试中的 10 项取得第一。

此外,为了对比不同类型的训练数据对于模型性能的影响,作者在 CrossCodeEval 与 MultiPl-E 数据集上进行了消融实验。实验结果表明,在模型中同时使用代码生成和补全数据进行训练,可以在保持生成任务性能的同时,大大提升模型的代码补全能力


总结与启发

本文提出了 ExecRepoBench,一个面向仓库级代码补全的全新测试基准,并设计了基于抽象语法树的多层次代码遮掩方法,用于构建指令微调数据集 Repo-Instruct。基于该数据集训练的代码补全模型 Qwen2.5-Coder-Instruct-C 在多项基准测试中表现优异,为代码补全任务的评估和改进提供了新思路。



更多阅读



#投 稿 通 道#

 让你的文字被更多人看到 



如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。


总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 


PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。


稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算


投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿


△长按添加PaperWeekly小编



?


现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧


·

·

·

阅读原文

跳转微信打开

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

ExecRepoBench 代码补全 测试基准 抽象语法树 Qwen2.5-Coder-Instruct-C
相关文章