M2rc-Eval: Massively Multilingual Repository-level Code Completion Evaluation

TL;DR

提出支持18种语言的仓库级代码补全基准M2RC-EVAL,结合AST解析进行细粒度标注。

cs.CL 🔴 高级 2024-10-28 53 次浏览
Jiaheng Liu Ken Deng Congnan Liu Jian Yang Shukai Liu He Zhu Peng Zhao Linzheng Chai Yanan Wu Ke Jin Ge Zhang Zekun Wang Guoan Zhang Bangyu Xiang Wenbo Su Bo Zheng
多语言 代码补全 基准测试 AST解析 深度分析

核心发现

方法论

本研究构建了涵盖18种编程语言的仓库级代码补全基准M2RC-EVAL,利用Tree-sitter解析抽象语法树(AST)进行层级和语义标注。采样策略基于AST节点,定义10层桶级标签和11个语义类别,确保多样化难度。结合M2RC-INSTRUCT多语种指令语料库,提升模型性能。评估采用精确匹配(EM)和编辑相似度(ES)指标,验证不同模型在多语言、多场景下的表现。

关键结果

  • 在18种语言中,深度调优模型(如Code Llama-7B)在补全准确率上提升至45.4%的EM,较未调优模型提升近30%。引入检索增强后,模型性能平均提升20%以上,显示跨文件上下文极大改善补全效果。
  • 不同模型在不同语言表现差异显著,例如DeepSeekCoder-6.7B在Go语言中表现优异(EM达54.4%),而在HTML等标记语言中表现较弱(EM约41%),验证多语言评估的重要性。
  • 细粒度标注揭示模型在AST浅层节点(如声明、表达式)上的性能低于深层节点(如函数体、类定义),提示未来优化方向。

研究意义

本研究填补了多语言仓库级代码补全的空白,提供了全面的评估工具,推动多语言、多场景下代码智能的研究。通过引入AST层级和语义标注,细化模型性能分析,为未来多模态、多任务模型设计提供理论基础。该基准可广泛应用于自动化软件开发、代码智能辅助等行业,提升开发效率与代码质量,具有深远的产业推动意义。

技术贡献

创新点在于首次构建18语言的仓库级代码补全基准,结合AST解析实现多层次细粒度标注,突破以往仅关注少数语言的局限。引入M2RC-INSTRUCT多语种指令语料库,有效提升模型跨语言泛化能力。采用多指标评估体系,细致分析模型在不同语义和结构层次的表现,为未来模型优化提供数据支撑。该工作在多语言、多场景、多粒度评估方面具有里程碑意义。

新颖性

本研究首次将AST层级和语义信息结合应用于仓库级代码补全评估,覆盖18种主流编程语言,显著扩展了多语言评估范围。采用细粒度标注策略,揭示模型在不同代码结构中的性能差异,提供了前所未有的多维度性能分析框架,超越现有仅关注整体指标的研究。

局限性

  • 标注依赖AST解析工具,可能受工具准确性影响,存在误差风险,尤其在某些复杂语法结构中表现不足。
  • 评估指标主要为EM和ES,未充分反映模型语义理解能力,未来需引入语义一致性评价。
  • 模型调优主要基于静态数据,动态代码演化和上下文变化未充分考虑,限制实际应用场景的适应性。

未来方向

未来将扩展多模态信息(如代码执行结果、性能指标)以丰富评估体系,探索模型在动态环境中的适应能力。同时,结合强化学习和人类反馈,优化模型的语义理解和上下文推理能力,推动自动化软件开发的智能化升级。

AI 总览摘要

随着软件工程对多语言、多场景代码理解的需求不断增长,现有的代码补全基准多局限于少数几种语言,难以全面衡量模型的多语言能力。为此,本文提出了M2RC-EVAL——一个涵盖18种编程语言的仓库级代码补全评估基准,结合AST解析实现层级和语义的细粒度标注,极大丰富了评估维度。

通过引入Tree-sitter解析工具,将代码结构划分为10层桶级标签,并定义11个语义类别,确保模型在不同复杂度场景下的表现得以细致分析。结合多语种指令语料库M2RC-INSTRUCT,显著提升模型在多语言环境中的泛化能力。实验结果显示,调优后模型在EM指标上平均提升20%以上,验证了该基准的有效性。

该研究不仅丰富了代码补全的评估体系,也为未来多模态、多任务的智能代码系统提供了理论基础。其广泛的应用前景涵盖自动化软件开发、智能辅助编程等领域,为行业带来深远影响。然而,基于AST的标注存在工具依赖风险,模型在语义理解和动态环境适应方面仍需改进。未来,结合更多动态信息和强化学习,将推动代码智能的持续突破。

深度分析

研究背景

近年来,随着大规模预训练模型(如CodeX、CodeLlama)的出现,代码生成和理解能力显著提升。早期工作多关注单一语言或场景,代表如CodeBERT、GPT-3的Codex版本。现有评估多集中在单文件或少数语言,难以反映模型在复杂仓库环境中的表现。多语言、多场景的需求推动了仓库级评估的兴起,但缺乏统一、多维的评估基准,限制了模型的实际应用推广。

核心问题

当前的仓库级代码补全评估多局限于少数几种语言,缺乏多语言、多场景的全面衡量。模型在不同代码结构和语义层次的表现差异明显,现有指标难以捕捉细粒度性能。缺少结合AST结构和语义信息的细粒度标注,限制了对模型能力的深入理解。这些问题阻碍了多语言、多任务模型的优化和应用推广。

核心创新

本研究创新在于:1)构建涵盖18种主流编程语言的仓库级基准,极大拓展评估范围;2)利用Tree-sitter解析AST,实现代码结构的多层次划分,定义10层桶级标签;3)结合11个语义类别,细粒度标注不同代码节点的语义信息;4)引入多语种指令语料库M2RC-INSTRUCT,提升模型跨语言泛化能力。这些创新突破了以往仅关注少数语言和整体指标的局限,为多语言、多场景代码理解提供了全面平台。

方法详解

  • �� 采集The Stack v2数据集,筛选出18种常用语言的仓库文件。• 利用Tree-sitter解析源代码,生成AST树。• 按照AST层级,将节点划分为10个桶级标签,反映不同结构深度。• 根据AST节点类型,定义11个语义类别(如声明、表达式、控制流等),实现细粒度标注。• 在每个代码补全位置,标记对应的桶级和语义类别,为模型提供多维度训练目标。• 构建多语种指令语料库M2RC-INSTRUCT,丰富模型训练样本。• 采用EM和ES指标评估模型在不同语言和结构层次的补全性能。• 通过调优和检索增强策略,显著提升模型表现。

实验设计

实验采用三种主流模型(StarCoder-7B、DeepSeekCoder-6.7B、Code Llama-7B),在18语言的验证和测试集上进行评估。指标包括精确匹配(EM)和编辑相似度(ES),比较调优前后性能变化。设置不同训练数据规模(从10k到50k样本),分析数据量对性能的影响。还通过不同层级和语义类别的标注,探讨模型在复杂结构和不同语义场景下的表现差异。实验结果验证了多层次标注的有效性和调优策略的提升作用。

结果分析

调优后,模型在18语言中的平均EM提升至45.4%,比基础模型高出近30%。引入检索后,性能平均提升20%以上,显示跨文件上下文极大改善补全效果。深度调优模型在Go语言表现尤为优异(EM达54.4%),而在HTML等标记语言中表现较弱(EM约41%),验证多语言评估的重要性。细粒度分析显示,模型在AST浅层节点(声明、表达式)上的表现低于深层节点(函数、类定义),提示未来优化方向。

应用场景

该基准可用于自动化软件开发中的代码补全、代码审查、语义理解等场景。开发者和AI研究者可以利用其进行模型调优、性能分析,推动智能编程助手的落地。企业可借助此平台优化代码生成流程,提升开发效率和代码质量。未来,结合动态调试和性能监控,将实现更智能的代码辅助系统。

局限与展望

基于AST的标注依赖解析工具,可能在复杂语法中出现误差,影响评估准确性。指标主要为EM和ES,未充分反映语义理解深度。模型调优主要基于静态数据,未考虑代码演化和动态环境,限制实际应用的适应性。未来需引入多模态信息和动态评估机制,以提升系统鲁棒性。

通俗解读 非专业人士也能看懂

想象你在一家大型工厂工作,工厂里有许多不同的生产线,每条生产线负责不同的产品。每条线的结构都不同,有的像拼装玩具,有的像流水线。你需要帮工厂的机器人快速找到正确的零件和步骤,完成任务。这个研究就像是教机器人如何理解工厂的每个部分,知道哪个零件在哪个位置,怎么拼装,才能帮忙快速完成工作。通过分析工厂的结构图(类似AST),机器人可以更聪明地找到需要的零件,完成任务变得更快更准。这就像给机器人装上了“智慧眼睛”,让它更懂工厂的秘密,从而帮你节省时间和精力。

简单解释 像给14岁少年讲一样

你知道在学校里做科学实验时,有时候需要找到正确的材料和步骤,对吧?想象一下,有个超级聪明的助手,它可以帮你快速找到你需要的工具和说明,不管是数学题、化学实验还是写作文。这个助手就像是一个懂得很多书和规则的机器人老师。它通过学习大量的例子,知道每个任务的不同部分应该怎么做。比如,它知道“声明”就像是告诉你“这是一个新东西”,而“表达式”就像是数学题的答案。这个研究就是让这些机器人助手变得更聪明,能理解各种不同的“语言”和“结构”,帮助程序员写代码、调试程序,就像你有个超级帮手一样。未来,这样的助手还能帮我们做更多复杂的事情,让我们的生活变得更方便、更有趣!

原文摘要

Repository-level code completion has drawn great attention in software engineering, and several benchmark datasets have been introduced. However, existing repository-level code completion benchmarks usually focus on a limited number of languages (<5), which cannot evaluate the general code intelligence abilities across different languages for existing code Large Language Models (LLMs). Besides, the existing benchmarks usually report overall average scores of different languages, where the fine-grained abilities in different completion scenarios are ignored. Therefore, to facilitate the research of code LLMs in multilingual scenarios, we propose a massively multilingual repository-level code completion benchmark covering 18 programming languages (called M2RC-EVAL), and two types of fine-grained annotations (i.e., bucket-level and semantic-level) on different completion scenarios are provided, where we obtain these annotations based on the parsed abstract syntax tree. Moreover, we also curate a massively multilingual instruction corpora M2RC- INSTRUCT dataset to improve the repository-level code completion abilities of existing code LLMs. Comprehensive experimental results demonstrate the effectiveness of our M2RC-EVAL and M2RC-INSTRUCT.

cs.CL cs.SE