Skip to main content
QUICK REVIEW

[论文解读] TreeCaps: Tree-Structured Capsule Networks for Program Source Code Processing

Vinoj Jayasundara, Nghi D. Q. Bui|arXiv (Cornell University)|Oct 27, 2019
Software Engineering Research被引用 9
一句话总结

本文提出 TreeCaps,一种新型树状结构胶囊网络,通过使用抽象语法树(AST)对程序源代码进行建模,以捕捉语法结构和长程语义依赖关系。通过引入主变量胶囊层和静态胶囊层,以及一种新颖的变量到静态胶囊路由算法,TreeCaps 在多种编程语言的程序功能分类任务中实现了最先进性能,显著优于 TBCNN、GGNN 和 ASTNN 模型。

ABSTRACT

Program comprehension is a fundamental task in software development and maintenance processes. Software developers often need to understand a large amount of existing code before they can develop new features or fix bugs in existing programs. Being able to process programming language code automatically and provide summaries of code functionality accurately can significantly help developers to reduce time spent in code navigation and understanding, and thus increase productivity. Different from natural language articles, source code in programming languages often follows rigid syntactical structures and there can exist dependencies among code elements that are located far away from each other through complex control flows and data flows. Existing studies on tree-based convolutional neural networks (TBCNN) and gated graph neural networks (GGNN) are not able to capture essential semantic dependencies among code elements accurately. In this paper, we propose novel tree-based capsule networks (TreeCaps) and relevant techniques for processing program code in an automated way that encodes code syntactical structures and captures code dependencies more accurately. Based on evaluation on programs written in different programming languages, we show that our TreeCaps-based approach can outperform other approaches in classifying the functionalities of many programs.

研究动机与目标

  • 解决现有模型(如 TBCNN 和 GGNN)在捕捉源代码中长程依赖关系和语义关系方面的局限性。
  • 开发一种专为树状结构 AST 设计的胶囊网络架构,以保留代码元素之间的层次与空间关系。
  • 通过建模语法结构和复杂代码依赖关系,提升程序功能分类的准确性,且无需依赖手动添加的边或 AST 分解。
  • 评估新型组件(如变量到静态胶囊路由和额外胶囊层)在提升模型性能方面的有效性。

提出的方法

  • TreeCaps 以抽象语法树(AST)作为输入,引入主变量胶囊(PVC)层和主静态胶囊(PSC)层,以处理大小可变的代码树。
  • 提出一种新颖的变量到静态胶囊路由算法,可将可变数量的胶囊动态路由至固定数量的静态胶囊,从而保留远距离代码元素之间的语义依赖关系。
  • 模型在胶囊层之间采用动态路由机制以学习层次化表示,路由决策基于胶囊之间的注意力式一致性。
  • 最终的代码胶囊(CC)层生成用于分类的固定维度潜在表示,其实例化参数经过调优以实现最优语义编码。
  • 该架构通过胶囊路由端到端学习依赖关系,避免了显式构建依赖图,从而减少了启发式添加边所带来的噪声。
  • 模型通过交叉熵损失进行端到端训练,用于程序功能分类,并对路由机制、维度和额外层进行了消融研究。

实验结果

研究问题

  • RQ1胶囊网络架构能否有效建模以 AST 表示的程序源代码中的层次与结构关系?
  • RQ2所提出的变量到静态胶囊路由算法与动态最大池化等替代方法相比,在保留代码语义和提升分类准确率方面表现如何?
  • RQ3代码胶囊实例化参数的最优维度是多少,才能实现有效的程序分类?
  • RQ4尽管计算成本增加,添加中间二级胶囊层是否能提升分类性能?
  • RQ5TreeCaps 在多种编程语言的程序功能分类任务中,与现有模型(如 TBCNN、GGNN 和 ASTNN)相比表现如何?

主要发现

  • TreeCaps 在程序功能分类任务中优于 TBCNN、GGNN 和 ASTNN 模型,在消融研究中相比动态最大池化(DMP)实现了 8.68% 的显著准确率提升。
  • 所提出的变量到静态胶囊路由算法实现了 92.11% 的分类准确率,显著高于动态最大池化方法的 83.43%,证明其在保留语义依赖关系方面的有效性。
  • 代码胶囊实例化参数(D_cc)的最优维度在 B 数据集中被确定为 8,表明在表示能力与泛化能力之间达到了良好平衡。
  • 添加二级胶囊层虽小幅提升了准确率,但使推理时间增加了 16%,表明性能与效率之间存在权衡,需进一步研究。
  • 消融研究证实,主变量胶囊层、主静态胶囊层以及路由机制对模型高性能至关重要,各组件均对分类准确率有显著贡献。

更好的研究,从现在开始

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

无需绑定信用卡

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