Skip to main content
QUICK REVIEW

[论文解读] CERT: Continual Pre-Training on Sketches for Library-Oriented Code Generation

Daoguang Zan, Bei Chen|arXiv (Cornell University)|Jun 14, 2022
Software Engineering Research被引用 9
一句话总结

本文提出 CERT,一种持续预训练框架,通过利用代码草图来提升面向库的代码生成性能。通过持续预训练一个草图生成器以预测结构模板,并训练一个生成器来填充细节——两者均在无标注代码上进行持续预训练——CERT 在 PandasEval 基准测试中相比基线模型实现了 15.67% 的 pass@1 绝对提升,证明了其在无需昂贵文本-代码配对数据的情况下仍具备强大性能。

ABSTRACT

Code generation is a longstanding challenge, aiming to generate a code snippet based on a natural language description. Usually, expensive text-code paired data is essential for training a code generation model. Recently, thanks to the success of pre-training techniques, large language models are trained on large-scale unlabelled code corpora and perform well in code generation. In this paper, we investigate how to leverage an unlabelled code corpus to train a model for library-oriented code generation. Since it is a common practice for programmers to reuse third-party libraries, in which case the text-code paired data are harder to obtain due to the huge number of libraries. We observe that library-oriented code snippets are more likely to share similar code sketches. Hence, we present CERT with two steps: a sketcher generates the sketch, then a generator fills the details in the sketch. Both the sketcher and the generator are continually pre-trained upon a base model using unlabelled data. Furthermore, we craft two benchmarks named PandasEval and NumpyEval to evaluate library-oriented code generation. Experimental results demonstrate the impressive performance of CERT. For example, it surpasses the base model by an absolute 15.67% improvement in terms of pass@1 on PandasEval. Our work is available at https://github.com/microsoft/PyCodeGPT.

研究动机与目标

  • 为解决在不依赖昂贵文本-代码配对数据集的情况下生成面向库的代码片段的挑战。
  • 探索代码草图——即省略用户定义术语的抽象结构——是否可作为持续预训练中代码生成的有效监督信号。
  • 利用无标注代码语料库,提升对 Pandas 和 NumPy 等流行库的代码生成性能。
  • 开发专用基准测试 PandasEval 和 NumpyEval,以评估针对特定库的代码生成能力。

提出的方法

  • 训练一个草图生成器,通过从代码片段中去除用户定义的术语(如变量名、常量)来预测代码草图。
  • 训练一个生成器,通过条件输入预测的草图,利用草图作为结构提示来生成完整代码。
  • 草图生成器与生成器均在大规模无标注代码语料库上进行持续预训练,无需任何文本-代码配对数据。
  • 该方法以基础代码语言模型(PyCodeGPT)为基底,通过在特定库的代码文件上进行持续微调。
  • 采用两个新基准测试进行评估:PandasEval 和 NumpyEval,每个基准包含 101 个 Python 语言的特定库编程问题。
  • 还训练了一个变体 CERTg,使用完整代码语料库进行训练,以评估泛化能力,结果表明基于草图的预训练在面向库的任务中尤为有效。

实验结果

研究问题

  • RQ1在缺乏文本-代码配对数据的情况下,代码草图能否作为持续预训练中的有效监督信号?
  • RQ2将代码生成分解为草图预测与细节填充是否能提升面向库的代码生成任务性能?
  • RQ3CERT 与 Codex 和 GPT-3 等强基线模型相比,在特定库的代码生成基准测试中表现如何?
  • RQ4基于草图的方法是否具有通用性,还是仅对面向库的代码生成具有显著优势?

主要发现

  • CERT 在 PandasEval 基准测试中相比基线模型实现了 15.67% 的 pass@1 绝对提升,显著提升了面向库的代码生成性能。
  • 草图生成器与生成器组件协同工作,生成器能够纠正不完美的草图预测,展现出对草图错误的鲁棒性。
  • 尽管参数量仅为 11000 万,CERT 在 PandasEval 和 NumpyEval 基准测试中仍优于 GPT-3 和 Codex,表明其具有强大的样本效率。
  • 在完整代码语料库上训练的变体 CERTg 在 HumanEval 上的表现与基线模型相当,证实基于草图的预训练在特定库任务中最为有效。
  • 消融实验表明,提取面向库的代码文件对 CERT 性能至关重要,因为 CERTg 在特定库基准测试中的表现劣于 CERT。
  • 案例研究显示,即使缺少用户定义术语,草图生成器也能生成正确的结构模板,且生成器可从错误草图中恢复,凸显该框架的鲁棒性。

更好的研究,从现在开始

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

无需绑定信用卡

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