Skip to main content
QUICK REVIEW

[论文解读] Generating Code with the Help of Retrieved Template Functions and Stack Overflow Answers

Dawn Drain, Changran Hu|arXiv (Cornell University)|Apr 12, 2021
Software Engineering Research参考文献 14被引用 6
一句话总结

本文提出了一种检索增强的代码生成框架,通过从 CodeSearchNet 检索相关模板函数以及从 CoNaLa(Stack Overflow)检索意图-代码片段对,来增强代码自动补全。该框架采用融合表示模型进行检索,并使用同时以函数签名和检索到的参考代码为条件的序列到序列生成器,通过最大边缘相关性(MMR)重排序检索模板函数,实现了 BLEU 分数 44% 的提升。

ABSTRACT

We approach the important challenge of code autocompletion as an open-domain task, in which a sequence-to-sequence code generator model is enhanced with the ability to attend to reference code snippets supplied by a semantic code search engine. In this work, we present a novel framework to precisely retrieve template functions as well as intent-snippet pairs and effectively train such a retrieval-guided code generator. To demonstrate the effectiveness of our model designs, we perform extensive experiments with CodeSearchNet which contains template functions and CoNaLa which contains Stack Overflow intent-snippet pairs. We also investigate different retrieval models, including Elasticsearch, DPR, and our fusion representation search model, which currently holds the number one spot on the CodeSearchNet leaderboard. We observe improvements by leveraging multiple database elements and further gain from retrieving diverse data points by using Maximal Marginal Relevance. Overall, we see a 4% improvement to cross-entropy loss, a 15% improvement to edit distance, and a 44% improvement to BLEU score when retrieving template functions. We see subtler improvements of 2%, 11%, and 6% respectively when retrieving Stack Overflow intent-snippet pairs. We also create a novel Stack Overflow-Function Alignment dataset, which consists of 150K tuples of functions and Stack Overflow intent-snippet pairs that are of help in writing the associated function, of which 1.7K are manually curated.

研究动机与目标

  • 为解决封闭书本代码生成的局限性,使模型能够访问外部代码参考。
  • 通过检索相关模板函数和 Stack Overflow 回答作为上下文,提升代码自动补全的质量。
  • 设计一种灵活的、检索引导的代码生成框架,将检索与生成解耦,以提升效率和可扩展性。
  • 评估多种检索策略(包括最大边缘相关性(MMR))对代码生成质量的影响。
  • 创建并发布一个包含 15 万对对齐的 Stack Overflow 意图-代码片段对的新型 SOFA 数据集,以支持未来研究。

提出的方法

  • 该框架使用神经代码搜索模型,基于函数的文档字符串和签名,从 CodeSearchNet 检索相关的模板函数,从 CoNaLa 检索意图-代码片段对。
  • 检索通过多种模型执行:Elasticsearch、DPR 和一种提出的融合表示模型,后者在 CodeSearchNet 上实现了最先进性能。
  • 代码生成器是一个基于函数签名、文档字符串和检索到的参考代码片段的预训练序列到序列 Transformer 模型。
  • 使用最大边缘相关性(MMR)对检索结果进行重排序,以平衡相关性与多样性,λ = 0.5 用于平衡相关性与冗余性。
  • 检索与生成组件分别训练,支持模块化且高效的训练与推理。
  • 系统支持模板函数检索(来自 GitHub)和意图-代码片段检索(来自 CoNaLa),并进行了关于检索质量与多样性的消融研究。

实验结果

研究问题

  • RQ1检索外部代码参考是否能超越模型内部上下文,提升代码自动补全质量?
  • RQ2检索模型的选择(如 Elasticsearch、DPR、融合表示模型)如何影响代码生成质量?
  • RQ3使用最大边缘相关性(MMR)对检索到的参考代码进行重排序,是否能带来优于贪婪检索的代码生成效果?
  • RQ4在提升代码生成质量方面,CodeSearchNet(模板函数)与 CoNaLa(Stack Overflow 意图-代码片段对)这两种数据库有何差异?
  • RQ5检索多样化、非冗余的参考代码在多大程度上能提升 BLEU、编辑距离和交叉熵损失等生成指标?

主要发现

  • 使用融合表示模型和 MMR 重排序从 CodeSearchNet 检索模板函数,使 BLEU-4 分数提升 44%,编辑距离降低 15%,交叉熵损失减少 4%。
  • 使用 MMR 对检索到的模板进行重排序,使检索多个模板的收益翻倍,与贪婪检索相比,显著提升了编辑距离和 BLEU 分数。
  • 当从 CoNaLa 检索 Stack Overflow 意图-代码片段对时,模型在 BLEU-4 上实现 6% 的提升,编辑距离提升 11%,交叉熵损失降低 2%,尽管增益不如模板函数显著。
  • 融合表示模型在 CodeSearchNet 上的表现优于 Elasticsearch 和 DPR,在 CodeSearchNet 排行榜上位列第一。
  • 创建并发布了包含 15 万对人工精心整理的函数-Stack Overflow 配对的 SOFA 数据集,以支持未来在检索增强代码生成方面的研究。
  • 在训练过程中排除重复检索的函数,可防止退化行为并提升泛化能力,凸显了检索过滤的重要性。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。