[论文解读] CoCoMIC: Code Completion By Jointly Modeling In-file and Cross-file Context
CoCoMIC 提出了一种框架,通过联合建模文件内和跨文件上下文,提升预训练代码语言模型的代码补全性能。通过使用 CCFinder 基于导入的静态分析检索相关跨文件上下文,并通过联合注意力机制进行整合,CoCoMIC 在精确匹配上相比仅使用文件内上下文的基线模型实现了 33.94% 的相对提升,在标识符匹配上实现了 28.69% 的相对提升。
While pre-trained language models (LM) for code have achieved great success in code completion, they generate code conditioned only on the contents within the file, i.e., in-file context, but ignore the rich semantics in other files within the same project, i.e., cross-file context, a critical source of information that is especially useful in modern modular software development. Such overlooking constrains code language models' capacity in code completion, leading to unexpected behaviors such as generating hallucinated class member functions or function calls with unexpected arguments. In this work, we develop a cross-file context finder tool, CCFINDER, that effectively locates and retrieves the most relevant cross-file context. We propose CoCoMIC, a framework that incorporates cross-file context to learn the in-file and cross-file context jointly on top of pretrained code LMs. CoCoMIC successfully improves the existing code LM with a 33.94% relative increase in exact match and a 28.69% relative increase in identifier matching for code completion when the cross-file context is provided.
研究动机与目标
- 为解决预训练代码语言模型(LM)仅依赖文件内上下文、忽略项目级依赖的局限性。
- 通过整合同一项目中的相关跨文件上下文,提升代码补全的准确性,这些上下文通常对正确生成代码至关重要。
- 开发一种可扩展且高效的跨文件上下文检索与集成方法,同时不超出模型上下文长度限制。
- 设计一种联合建模框架,区分文件内与跨文件上下文,尊重其不同的语义角色。
- 在真实世界代码补全基准上,实证验证跨文件上下文检索与集成的有效性。
提出的方法
- CCFinder 被开发为一种静态代码分析工具,从源代码构建项目上下文图,捕捉实体(如类、函数)及其关系。
- 给定一个代码片段,CCFinder 通过分析导入语句,从项目上下文图中检索邻近实体,识别相关的跨文件上下文。
- CoCoMIC 使用专用的编码器模块,将检索到的跨文件上下文压缩为紧凑表示。
- 在自回归生成过程中,CoCoMIC 采用联合注意力机制,同时关注文件内上下文和压缩后的跨文件上下文。
- 该框架基于现有的预训练代码 LM(如 CodeGen)构建,并通过端到端的联合上下文建模进行微调。
- 模型在基于 PyPI 构建的自定义数据集上进行评估,使用精确匹配和标识符匹配作为指标。
实验结果
研究问题
- RQ1仅依赖文件内上下文时,跨文件上下文是否能显著提升代码补全性能?
- RQ2像 CCFinder 这类静态分析工具,能否基于导入语句有效检索相关跨文件上下文?
- RQ3联合建模文件内与跨文件上下文对代码生成准确率有何影响?
- RQ4CoCoMIC 与仅使用文件内上下文的基线模型及微调后的代码 LM 相比,性能如何?
- RQ5当缺乏跨文件上下文或应用于更大模型时,CoCoMIC 的局限性是什么?
主要发现
- 与仅使用文件内上下文相比,CCFinder 在代码补全中成功检索到多出 27.07% 的相关上下文,表明其在识别项目级依赖方面的有效性。
- 与仅使用文件内上下文的基线相比,CoCoMIC 在精确匹配上实现了 33.94% 的相对提升,在标识符匹配上实现了 28.69% 的相对提升。
- 性能提升在不同代码补全场景中保持一致,尤其在需要了解导入类和函数知识的情况下表现更优。
- 当缺乏跨文件上下文时,CoCoMIC 的性能相比微调后的 CodeGen 模型相对下降 5–7%,凸显其对外部上下文的依赖性。
- 该框架在扩展至更大模型方面展现出强大潜力,尽管 2B、6B 或 16B 参数版本的实证验证仍为未来工作。
- 该方法通过压缩跨文件上下文而非拼接原始代码,有效解决了上下文长度限制问题。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。