Skip to main content
QUICK REVIEW

[论文解读] Automatic Code Generation using Pre-Trained Language Models

Luis J. Dominguez Perez, Lizi Ottens|arXiv (Cornell University)|Feb 21, 2021
Topic Modeling参考文献 8被引用 11
一句话总结

本文提出微调一个预训练的 GPT-2 语言模型,用于端到端的 Python 代码生成,以函数签名和文档字符串作为输入,生成正确的函数体。该方法在 BLEU 分数上达到 0.22,相比字符级 RNN 基线模型提升了 46%,表明大规模预训练模型能够有效生成语法正确且语义有意义的代码。

ABSTRACT

Recent advancements in natural language processing \cite{gpt2} \cite{BERT} have led to near-human performance in multiple natural language tasks. In this paper, we seek to understand whether similar techniques can be applied to a highly structured environment with strict syntax rules. Specifically, we propose an end-to-end machine learning model for code generation in the Python language built on-top of pre-trained language models. We demonstrate that a fine-tuned model can perform well in code generation tasks, achieving a BLEU score of 0.22, an improvement of 46\% over a reasonable sequence-to-sequence baseline. All results and related code used for training and data processing are available on GitHub.

研究动机与目标

  • 探究预训练语言模型是否可被有效微调,用于高度结构化的领域(如 Python)中的代码生成。
  • 比较微调后的 GPT-2 模型与字符级 RNN 基线在从函数签名和文档字符串生成函数体方面的性能表现。
  • 评估预训练对代码生成质量的影响,特别是从语法正确性和语义相关性角度。
  • 评估将自然语言预训练知识迁移至编程语言生成任务的可行性。

提出的方法

  • 在 CodeSearchNet 数据集的一个精选子集上微调一个小型 GPT-2 模型(117M 参数),该子集包含 500,000 个(文档字符串,代码)对,均为 Python 代码。
  • 采用序列到序列的框架,其中输入为函数签名和文档字符串,输出为对应的函数体。
  • 使用字节对编码(BPE)进行分词,相比字符级嵌入可提升代码生成质量。
  • 使用标准语言建模范式训练模型 100,000 个 mini-batch 迭代,批量大小为 2。
  • 使用保留的测试集上的 BLEU 分数评估性能,以衡量生成代码与参考代码之间的 n-gram 重叠程度。
  • 与一个强基线模型进行比较:在 10% 的 Python 数据上训练的字符级 RNN,使用 128-token 序列和 softmax 交叉熵损失。

实验结果

研究问题

  • RQ1像 GPT-2 这样的预训练语言模型是否能被有效微调,以从函数签名和文档字符串生成语法正确且语义有意义的 Python 函数体?
  • RQ2微调后的 GPT-2 模型在代码生成任务中的表现与字符级 RNN 基线相比如何?
  • RQ3在大规模自然语言数据上进行预训练,能在多大程度上迁移到结构化编程语言(如 Python)的代码生成任务中?
  • RQ4与字符级分词相比,使用字节对编码(BPE)是否能提升代码生成质量?

主要发现

  • 微调后的 GPT-2 模型在代码生成任务上取得了 0.22 的 BLEU 分数,显著优于字符级 RNN 基线模型。
  • 与 RNN 基线相比,GPT-2 模型在 BLEU 分数上实现了 46% 的相对提升,后者在同一评估集上的得分为 0.015。
  • 通过定性分析验证,该模型生成了具有正确 Python 语法的新代码,包括对 if 语句、函数调用和方法定义的正确使用。
  • 该模型表现出强大的泛化能力,即使在面对多样的函数签名和文档时,也能生成语义相关的代码。
  • 与字符级嵌入相比,GPT-2 中使用 BPE 分词带来了更好的性能和更连贯的代码生成。
  • 训练损失和 BLEU 分数随时间持续改善,表明进一步微调可能带来额外收益。

更好的研究,从现在开始

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

无需绑定信用卡

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