Skip to main content
QUICK REVIEW

[论文解读] SmartPaste: Learning to Adapt Source Code

Miltiadis Allamanis, Marc Brockschmidt|arXiv (Cornell University)|May 22, 2017
Web Data Mining and Analysis参考文献 16被引用 14
一句话总结

SmartPaste 提出了一项新颖的结构化预测任务,通过学习变量使用的数据流敏感表示,实现将复制的代码片段适配到现有代码中。利用通过代码数据流和执行路径编码变量语义的深度神经网络模型,该方法在变量重命名任务中实现了 58.6% 的准确率,展示了在程序适配中对有意义变量表示进行有效无监督学习的能力。

ABSTRACT

Deep Neural Networks have been shown to succeed at a range of natural language tasks such as machine translation and text summarization. While tasks on source code (ie, formal languages) have been considered recently, most work in this area does not attempt to capitalize on the unique opportunities offered by its known syntax and structure. In this work, we introduce SmartPaste, a first task that requires to use such information. The task is a variant of the program repair problem that requires to adapt a given (pasted) snippet of code to surrounding, existing source code. As first solutions, we design a set of deep neural models that learn to represent the context of each variable location and variable usage in a data flow-sensitive way. Our evaluation suggests that our models can learn to solve the SmartPaste task in many cases, achieving 58.6% accuracy, while learning meaningful representation of variable usages.

研究动机与目标

  • 为解决将复制的代码片段适配到新上下文的挑战,其中变量标识符必须重命名为匹配周围代码。
  • 在不完全依赖表面级标记序列的情况下,学习变量使用的数据流敏感表示。
  • 提出一项新的结构化预测任务——SmartPaste,以捕捉复制代码与宿主上下文之间的语义对齐。
  • 通过学习的变量嵌入,实现智能代码补全、错误检测和代码摘要等实际软件工程应用。
  • 证明显式建模程序语义可降低对数据量和模型容量的需求,同时提升代码适配任务的性能。

提出的方法

  • SmartPaste 任务被形式化为结构化预测问题,模型预测表示代码片段与宿主上下文之间变量对齐的图结构。
  • 设计了五种深度神经网络模型,通过代码的控制流和数据流结构作为输入,以数据流敏感的方式表示变量使用。
  • 模型通过预测变量的语义角色(例如,计数器、文件名)和使用上下文(例如,预期文件名的位置),学习变量的分布式表示。
  • 在来自开源项目的 480 万行真实世界 C# 代码的大规模数据集上端到端训练模型。
  • 使用编码数据流和控制依赖关系的图结构作为输入,以建模变量之间的关系和约束。
  • 该方法受到 Word2Vec 和 GLoVe 启发,但将其扩展到正式的程序语法和语义,实现变量使用嵌入的无监督学习。

实验结果

研究问题

  • RQ1深度神经网络能否通过建模数据流和变量使用语义,学习将复制的代码片段适配到新上下文中?
  • RQ2与纯语法模型相比,数据流和执行路径信息在多大程度上能提升变量重命名的准确率?
  • RQ3变量表示的无监督学习能否在不同代码库之间泛化,并支持代码补全或错误检测等下游任务?
  • RQ4与自回归或标记级预测相比,结构化预测方法在处理相互依赖的变量重命名时表现如何?
  • RQ5在大规模真实世界代码环境中,学习变量语义表示的性能上限是什么?

主要发现

  • 表现最佳的模型在 SmartPaste 任务中实现了 58.6% 的准确率,表明数据流感知表示显著提升了变量重命名性能。
  • 学习到的表示能够捕捉变量的有意义语义角色,例如区分计数器、文件路径和数据源。
  • 模型在包括编译器、库和框架在内的多样化代码库中具有泛化能力,这在 4,824kLOC 的真实世界 C# 代码评估中得到验证。
  • 通过利用源代码中固有的结构信息,该方法减少了对大量标注数据和复杂训练方案的依赖。
  • 该方法优于忽略数据流的基线模型,证实了语义结构在程序表示学习中的重要性。
  • 学习到的嵌入在识别不匹配的变量使用方面显示出在智能代码补全和自动化错误检测等更广泛应用中的潜力。

更好的研究,从现在开始

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

无需绑定信用卡

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