Rewriting the Code: A Simple Method for Large Language Model Augmented Code Search

📄 arXiv: 2401.04514v2 📥 PDF

作者: Haochen Li, Xin Zhou, Zhiqi Shen

分类: cs.SE, cs.CL, cs.IR, cs.LG

发布日期: 2024-01-09 (更新: 2024-06-03)

备注: Accepted to ACL 2024

🔗 代码/项目: GITHUB


💡 一句话要点

提出ReCo方法以解决代码搜索中的风格不一致问题

🎯 匹配领域: 支柱九:具身大模型 (Embodied Foundation Models)

关键词: 代码搜索 生成增强检索 大型语言模型 风格规范化 代码风格相似性 检索准确率 机器学习

📋 核心要点

  1. 现有的生成增强检索方法在代码风格一致性方面存在不足,生成的代码与真实代码在风格上存在显著差异。
  2. 本文提出了一种重写代码(ReCo)的方法,通过在代码库中进行风格规范化来提升检索效果。
  3. 实验结果显示,ReCo在不同检索场景下显著提高了检索准确率,尤其是在稀疏和零样本密集检索中表现突出。

📝 摘要(中文)

在代码搜索中,生成增强检索(GAR)框架利用大型语言模型(LLMs)生成示例代码片段以增强查询,旨在解决代码片段与自然语言查询之间的模态不一致问题。然而,初步研究表明,LLM增强框架的改进效果受到限制,主要由于生成的代码在风格上与代码库中的真实代码存在明显偏差。本文扩展了GAR框架,提出了一种简单有效的方法,通过在代码库中重写代码(ReCo)实现风格规范化。实验结果表明,ReCo在稀疏、零样本密集和微调密集检索设置下显著提高了检索准确率,提升幅度分别达到35.7%、27.6%和23.6%。此外,我们引入了代码风格相似性这一新指标,以量化代码中的风格相似性,强调现有指标在捕捉风格细微差异方面的不足。

🔬 方法详解

问题定义:本文旨在解决代码搜索中生成代码与真实代码风格不一致的问题。现有的生成增强检索方法虽然能够生成功能上准确的代码,但在风格上往往与代码库中的真实代码存在显著偏差,限制了检索效果的提升。

核心思路:论文提出的ReCo方法通过在代码库中重写代码,实现风格的规范化,从而提高生成代码与真实代码之间的风格一致性。这种设计旨在减少风格差异对检索准确率的负面影响。

技术框架:ReCo方法的整体架构包括两个主要模块:首先是生成模块,利用LLMs生成示例代码;其次是重写模块,对生成的代码进行风格规范化处理。整个流程通过不断迭代优化,确保生成代码在功能和风格上的一致性。

关键创新:ReCo的核心创新在于引入了代码风格规范化的概念,首次将风格一致性作为提升检索效果的关键因素。与现有方法相比,ReCo不仅关注代码的功能性,还强调了代码的风格一致性,从而实现了更高的检索准确率。

关键设计:在ReCo方法中,关键设计包括对生成代码的风格评估和重写策略,采用特定的损失函数来优化风格一致性。此外,设计了新的代码风格相似性指标,以量化代码之间的风格差异,进一步指导重写过程。

🖼️ 关键图片

fig_0
fig_1
fig_2

📊 实验亮点

实验结果显示,ReCo方法在稀疏检索中提高了检索准确率达35.7%,在零样本密集检索中提升27.6%,在微调密集检索中提高23.6%。这些结果表明,ReCo在多种检索场景下均显著优于现有基线方法,验证了其有效性。

🎯 应用场景

该研究的潜在应用领域包括代码搜索引擎、智能编程助手和代码审查工具等。通过提升代码检索的准确性,ReCo方法能够帮助开发者更高效地找到所需代码片段,减少开发时间,提高代码质量。未来,该方法有望在更广泛的编程语言和代码库中推广应用,推动代码风格规范化研究的发展。

📄 摘要(原文)

In code search, the Generation-Augmented Retrieval (GAR) framework, which generates exemplar code snippets to augment queries, has emerged as a promising strategy to address the principal challenge of modality misalignment between code snippets and natural language queries, particularly with the demonstrated code generation capabilities of Large Language Models (LLMs). Nevertheless, our preliminary investigations indicate that the improvements conferred by such an LLM-augmented framework are somewhat constrained. This limitation could potentially be ascribed to the fact that the generated codes, albeit functionally accurate, frequently display a pronounced stylistic deviation from the ground truth code in the codebase. In this paper, we extend the foundational GAR framework and propose a simple yet effective method that additionally Rewrites the Code (ReCo) within the codebase for style normalization. Experimental results demonstrate that ReCo significantly boosts retrieval accuracy across sparse (up to 35.7%), zero-shot dense (up to 27.6%), and fine-tuned dense (up to 23.6%) retrieval settings in diverse search scenarios. To further elucidate the advantages of ReCo and stimulate research in code style normalization, we introduce Code Style Similarity, the first metric tailored to quantify stylistic similarities in code. Notably, our empirical findings reveal the inadequacy of existing metrics in capturing stylistic nuances. The source code and data are available at \url{https://github.com/Alex-HaochenLi/ReCo}.