Skip to main content
QUICK REVIEW

[论文解读] Coder Reviewer Reranking for Code Generation

Tianyi Zhang, Changyuan Yu|arXiv (Cornell University)|Nov 29, 2022
Software Engineering Research被引用 7
一句话总结

本文提出 Coder-Reviewer 重排序方法,一种基于提示工程的策略,通过联合使用 Coder 模型(p(y|x))和 Reviewer 模型(p(x|y))对生成的程序进行评分,从而提升代码生成性能。该方法在标准 Coder 仅重排序的基础上实现了最高达 17% 的准确率提升,并在结合可执行性过滤时优于 MBR-exec 方法。

ABSTRACT

Sampling diverse programs from a code language model and reranking with model likelihood is a popular method for code generation but it is prone to preferring degenerate solutions. Inspired by collaborative programming, we propose Coder-Reviewer reranking. We augment Coder language models from past work, which generate programs given language instructions, with Reviewer models, which evaluate the likelihood of the instruction given the generated programs. We perform an extensive study across six datasets with eight models from three model families. Experimental results show that Coder-Reviewer reranking leads to consistent and significant improvement (up to 17% absolute accuracy gain) over reranking with the Coder model only. When combined with executability filtering, Coder-Reviewer reranking can often outperform the minimum Bayes risk method. Coder-Reviewer reranking is easy to implement by prompting, can generalize to different programming languages, and works well with off-the-shelf hyperparameters.

研究动机与目标

  • 解决仅使用 Coder 重排序的局限性,该方法在模式搜索推理过程中倾向于产生简短或重复的退化代码。
  • 通过引入 Reviewer 模型评估指令遵循程度(使用反向似然 p(x|y)),提升代码生成的可靠性。
  • 开发一种简单、零样本的基于提示工程的方法来实现 Reviewer 模型,无需额外训练。
  • 在多种数据集、模型和编程语言上展示一致的性能提升。
  • 证明该方法具有良好的泛化能力,且在使用现成超参数和现有过滤技术时仍能有效工作。

提出的方法

  • 使用预训练的 Coder 模型从自然语言指令 x 生成多个候选程序 y。
  • 对于每个生成的程序 y,调换提示顺序,使用同一模型作为 Reviewer,通过自回归似然估计 p(x|y)。
  • 通过两个似然的乘积 p(x|y) × p(y|x) 对候选程序进行重排序,该方法对应于加权最大互信息(MMI)目标。
  • 通过 few-shot 提示工程实现 Reviewer 模型,避免任何微调或额外训练。
  • 将 Coder-Reviewer 重排序与可执行性过滤结合,进一步提升性能,尤其在测试用例密集的基准上表现更优。
  • 在重排序前增加一个简单的退化解拒绝步骤,以过滤掉过于简短或重复的程序。

实验结果

研究问题

  • RQ1反向似然模型(p(x|y))是否能有效减少代码生成中对退化代码的偏好?
  • RQ2通过乘积评分结合 p(y|x) 和 p(x|y) 是否能在多种模型和数据集上实现一致的性能提升?
  • RQ3在准确率和实用性方面,Coder-Reviewer 重排序与 SOTA 方法 MBR-exec 相比表现如何?
  • RQ4该方法在不重新训练的前提下,跨编程语言和模型族的泛化能力如何?
  • RQ5该方法对超参数(如样本数量和混合比例 α)的敏感度如何?

主要发现

  • 在六个数据集和八个模型上,Coder-Reviewer 重排序相比仅使用 Coder 的重排序,准确率最高提升 17%。
  • 该方法在所有评估的模型族(如 Codex、CodeGen、CodeT)和编程语言(Python、Java、Bash)中均表现出一致的性能提升。
  • 当与可执行性过滤结合时,Coder-Reviewer 重排序通常优于 MBR-exec 方法,后者需要对执行输出进行复杂的聚合。
  • 该方法对候选程序数量的增加具有鲁棒性,在 Coder 仅重排序因退化解而性能下降时仍能保持稳定表现。
  • 退化解拒绝能提升所有方法的性能,但对仅使用 Coder 的重排序提升最为显著,证实 Coder-Reviewer 有效降低了内在偏差。
  • 对 α(混合比例)进行超参数调优在大多数情况下仅带来小于 1% 的性能增益,表明 α = 0.5 是一个稳健的默认选择。

更好的研究,从现在开始

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

无需绑定信用卡

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