重写代码:大型语言模型增强代码搜索的简单方法
内容提要
该文综述代码检索与生成研究:CoaCor用强化学习训练注释模型以提升检索;生成式查询扩展框架在CodeSearchNet上表现最佳;REDCODER以检索增强代码生成与摘要;ReCode通过子树检索提升代码生成BLEU;GAR-meets-RAG结合两种范式改善零样本检索;可检索实体注入LLM解码器用于代码生成;Cosco利用静态与动态特征及正负样本训练代码到代码搜索;改善数据质量可提升自然语言生成代码;利用代码编辑先验知识可显著提升LLM性能。
延伸解读
检索与生成的双向增强
文章梳理了代码检索与生成相互增强的多种路径:REDCODER 用检索到的代码或摘要辅助生成与总结;GAR-meets-RAG 在零样本场景下迭代结合生成增强检索与检索增强生成;可检索实体注入则把外部实体信息直接送入 LLM 解码器。这些工作表明,检索不再只是独立任务,而是可以嵌入生成流程,缓解模型对参数化知识的依赖。
数据质量与编辑先验的价值
在提升自然语言到代码生成的效果上,文章提到两条不依赖扩大模型规模的思路:一是通过代码转换和模块化改善数据质量,用较少但高质量的数据微调即可优于原始数据集;二是引入先前的代码编辑知识作为先验,使 LLM 更好处理代码更改的多样性。后者报告了相比常见符号和神经方法显著的性能提升,说明利用编辑历史是值得关注的方向。
代码搜索中的动态信息与对比样本
Cosco 方法在训练阶段同时利用静态特征和动态运行时信息,并引入相似与不同的参考样本,使模型在推理时无需执行搜索语料或查询。消融研究表明,即使只有一个正面和负面参考样本也能带来明显提升。文章还强调,经过精心调整的较小开源模型可以持续优于未调整的更大模型,这提示模型调优与开源实现对代码搜索研究具有实际意义。
Q&A
有哪些方法利用生成模型来提升代码检索性能?
CoaCor通过强化学习训练代码注释模型以更好地检索相关代码片段;生成式查询扩展框架利用代码生成模型扩展文档查询,在CodeSearchNet上取得最佳性能;GAR-meets-RAG结合生成增强检索和检索增强生成,在零样本场景下迭代改进检索和重写。
REDCODER框架是如何工作的?
REDCODER是一个检索增强框架,用于检索相关的代码或摘要作为代码生成或总结模型的补充,实现与检索数据库的交互,适用于不同模态的检索数据库,并在Java和Python的代码生成和摘要基准数据集上取得良好结果。
ReCode方法如何提升代码生成性能?
ReCode使用基于子树检索的方法,通过动态规划的句子相似性评分检索与输入句子相似的句子,提取抽象语法树动作序列的n-gram,并增加导致检索到的n-gram动作子树出现在预测代码中的动作概率,在两个代码生成任务中提升了高达2.6 BLEU的性能。
Cosco代码搜索技术有什么特点?
Cosco是一种代码到代码搜索技术,首次在训练中编码动态运行时信息,无需在推断时执行搜索语料库或查询;首次训练正负参考样本;能增强LLMs跨语言代码搜索能力,效果在不同模型架构和编程语言中一致;即使只有一个正负样本也能显著提升性能;精心调优的模型优于未调优的更大LLMs。
如何通过数据质量提升自然语言生成代码的性能?
通过改善数据质量,例如进行代码转换和模块化,可以显著提升自然语言生成代码的性能;使用较少但高质量的数据进行模型微调可以优于在原始数据集上进行微调。
利用代码编辑先验知识如何提升大型语言模型的代码生成能力?
使用先前的代码编辑知识赋予智能代码生成LLMs先验知识,有助于解决代码更改的多样性以及对前期编辑的依赖,与常见的符号和神经方法相比,使LLMs的性能显著提高了29%和54%。