中文

基于预训练 Transformer 的代码片段摘要生成研究

软件工程 2024-02-02 v1

摘要

在理解代码时,可能会从记录代码的自然语言注释中获得帮助,但遗憾的是,注释并不总是存在。为了在这种情况下为开发者提供支持,已有多种技术被提出用于为给定代码自动生成自然语言摘要。最近的方法利用深度学习 (DL) 自动为类或函数生成文档,而针对更细粒度的文档编写(例如,为代码片段甚至单条语句编写文档)则鲜有研究。这种设计选择受限于训练数据的可用性:例如,对于 Java,很容易创建由 <方法, Javadoc> 对组成的数据集,并将其输入到 DL 模型中以教会其如何为方法生成摘要。然而,当涉及到记录少数语句的内部注释时,这种注释到代码的关联则并非易事。在本研究中,我们采取了训练 DL 模型以记录代码片段所需的所有步骤。首先,我们手动构建了一个包含 6.6k 条注释的数据集,这些注释被 (i) 根据其类型(例如,代码摘要、TODO)进行了分类,并且 (ii) 关联到了它们所记录的代码语句。其次,我们使用该数据集训练了一个多任务 DL 模型,该模型以注释作为输入,能够 (i) 分类其是否代表“代码摘要”,以及 (ii) 将其关联到它所记录的代码语句。我们的模型以 84% 的准确率识别代码摘要,并能够以高于 80% 的召回率和精确率将它们关联到所记录的代码行。第三,我们在 10k 个项目上运行了该模型,识别代码摘要并将其关联到所记录的代码。这为构建大规模带有注释的代码片段数据集提供了可能,随后该数据集被用于训练一个新的、能够为代码片段生成文档的 DL 模型。与 state-of-the-art 基线方法的比较表明了所提方法的优越性。

关键词

引用

@article{arxiv.2402.00519,
  title  = {Towards Summarizing Code Snippets Using Pre-Trained Transformers},
  author = {Antonio Mastropaolo and Matteo Ciniselli and Luca Pascarella and Rosalia Tufano and Emad Aghajani and Gabriele Bavota},
  journal= {arXiv preprint arXiv:2402.00519},
  year   = {2024}
}