[论文解读] ReACC: A Retrieval-Augmented Code Completion Framework
ReACC 是一种检索增强的代码补全框架,通过从大型代码库中检索语义和词法相似的代码片段来提升代码补全性能。它结合了混合检索器(密集 + 稀疏)与微调后的基于 CodeGPT 的生成器,在 Python 和 Java 的 CodeXGLUE 基准测试中达到最先进性能。
Code completion, which aims to predict the following code token(s) according to the code context, can improve the productivity of software development. Recent work has proved that statistical language modeling with transformers can greatly improve the performance in the code completion task via learning from large-scale source code datasets. However, current approaches focus only on code context within the file or project, i.e. internal context. Our distinction is utilizing "external" context, inspired by human behaviors of copying from the related code snippets when writing code. Specifically, we propose a retrieval-augmented code completion framework, leveraging both lexical copying and referring to code with similar semantics by retrieval. We adopt a stage-wise training approach that combines a source code retriever and an auto-regressive language model for programming language. We evaluate our approach in the code completion task in Python and Java programming languages, achieving a state-of-the-art performance on CodeXGLUE benchmark.
研究动机与目标
- 通过利用当前文件之外的外部代码库上下文来提升代码补全性能。
- 探究检索语义和词法相似的代码片段是否能提升代码补全性能。
- 设计一种分阶段训练框架,整合检索与生成以实现代码补全。
- 评估混合检索(密集 + 稀疏)和数据增强在提升代码补全准确率方面的有效性。
提出的方法
- 使用基于 GraphCodeBERT 初始化的双编码器密集检索器,并通过合成代码对上的对比学习进行微调。
- 采用稀疏检索器(BM25)实现词法相似性,通过混合检索策略与密集检索器结合。
- 通过语义保持变换(如标识符重命名、死代码插入)进行数据增强,生成检索器的正样本训练对。
- 将输入代码片段与检索到的相似代码拼接作为生成器的上下文。
- 使用仅解码器的 Transformer(CodeGPT 适配版)作为代码补全生成器,并在增强后的上下文中进行微调。
- 采用分阶段训练策略:先预训练检索器,再使用检索到的上下文微调生成器。
实验结果
研究问题
- RQ1与仅依赖内部上下文相比,检索具有相似语义的外部代码片段是否能提升代码补全准确率?
- RQ2结合密集(语义)和稀疏(词法)检索如何影响代码补全性能?
- RQ3不同数据增强技术对检索器泛化能力和性能的贡献如何?
- RQ4检索增强框架是否在代码补全任务中优于强基线模型如 CodeGPT 和 GitHub Copilot?
- RQ5ReACC 在不同代码领域(如通用代码与算法代码)中的性能表现有何差异?
主要发现
- ReACC 在 CodeXGLUE 基准测试中达到最先进性能,在 PY150 数据集上使用混合检索器实现 64.74% 的精确匹配得分。
- 混合检索器优于密集和稀疏基线,证明了语义相似性和词法相似性互补的优势。
- 在 CodeNet 算法数据集上,与 CodeGPT 适配版相比,ReACC 将编辑相似度提升 18%,精确匹配提升 10%,表明在特定领域具有显著有效性。
- 消融实验表明,查询截断和标识符重命名是对检索器影响最大的数据增强技术。
- 当使用原始检索片段而非对齐片段时,生成器性能略有下降,表明上下文对齐具有重要价值。
- 即使检索数据库较小,ReACC 在某些情况下仍优于 GitHub Copilot,且 Copilot 本身在集成 ReACC 的检索器后性能也得到提升。
更好的研究,从现在开始
从阅读论文到最终审阅,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。