Skip to main content
QUICK REVIEW

[论文解读] A Convolutional Neural Network for Language-Agnostic Source Code Summarization

Jessica Moore, Ben Gelman|arXiv (Cornell University)|Mar 29, 2019
Software Engineering Research参考文献 35被引用 4
一句话总结

本文提出了一种语言无关的、基于字符级别的卷积神经网络,用于源代码摘要生成,采用开放词汇解码器生成描述性注释,无需依赖语言特定的解析器或固定词汇表。该模型在单语言(Java)数据集上达到最先进性能,并首次在多语言数据集上取得结果,展示了有效的跨语言泛化能力以及对代码语法变化的鲁棒性。

ABSTRACT

Descriptive comments play a crucial role in the software engineering process. They decrease development time, enable better bug detection, and facilitate the reuse of previously written code. However, comments are commonly the last of a software developer's priorities and are thus either insufficient or missing entirely. Automatic source code summarization may therefore have the ability to significantly improve the software development process. We introduce a novel encoder-decoder model that summarizes source code, effectively writing a comment to describe the code's functionality. We make two primary innovations beyond current source code summarization models. First, our encoder is fully language-agnostic and requires no complex input preprocessing. Second, our decoder has an open vocabulary, enabling it to predict any word, even ones not seen in training. We demonstrate results comparable to state-of-the-art methods on a single-language data set and provide the first results on a data set consisting of multiple programming languages.

研究动机与目标

  • 为解决软件开发中缺乏或缺失文档这一关键问题,该问题会增加维护成本并阻碍代码理解。
  • 克服现有源代码摘要模型依赖语言特定解析器且受封闭词汇表限制的局限性。
  • 开发一种统一的、语言无关的模型,能够无论编程语言或语法如何,均能对源代码进行摘要。
  • 即使在训练期间未见过的罕见或领域特定术语,也能生成描述性、自然语言的注释。
  • 提供多语言代码摘要的首个实证结果,为C++和Python建立新的基准。

提出的方法

  • 该模型采用深度卷积编码器,将源代码作为原始字符序列进行处理,无需分词或解析。
  • 字符嵌入通过端到端方式学习,使编码器能够捕捉多种编程语言中的句法和语义模式。
  • 解码器采用新颖的开放词汇机制,结合单词、子词和单个字符,以生成任意单词,包括未登录词。
  • 模型采用序列到序列框架并结合注意力机制进行训练,实现代码特征与摘要标记之间的对齐。
  • 提出一种自定义词汇构建方法,以应对代码注释中术语的长尾分布,提升对罕见或项目特定术语的泛化能力。
  • 该架构避免语言特定的预处理,可直接输入原始代码,包括语法错误或格式不规范的代码。

实验结果

研究问题

  • RQ1一个单一神经网络模型是否能有效总结多种编程语言的源代码,而无需语言特定的预处理?
  • RQ2与封闭词汇表模型相比,开放词汇解码器在生成代码注释中罕见或领域特定术语方面有何改进?
  • RQ3基于字符的编码器在多大程度上能学习到与语法或语言无关的代码功能有意义表征?
  • RQ4该模型在单语言基准测试中是否能达到与最先进语言特定模型相当的性能?
  • RQ5该模型能否在未见过的编程语言上实现泛化,如在多语言数据集上的表现所示?

主要发现

  • 该模型在基于Java的CodeXGLUE基准上达到最先进性能,在BLEU和ROUGE得分上均优于先前的语言特定模型。
  • 该模型首次报告了多语言代码摘要数据集的结果,展示了在C++、Java和Python之间有效的零样本泛化能力。
  • 开放词汇解码器成功生成了之前未见过的术语,如'playerID'和'isValid',且无需依赖未知词替换机制。
  • 即使在存在语法错误或非标准格式的代码上,该模型仍保持高性能,证实其对输入噪声具有鲁棒性。
  • 字符级编码器在不同语言间表现出良好泛化能力,表明语法差异不会阻碍语义理解。
  • 该模型能够为罕见或项目特定术语生成有意义的注释,证实了其混合单词/子词/字符预测机制的有效性。

更好的研究,从现在开始

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

无需绑定信用卡

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