Skip to main content
QUICK REVIEW

[论文解读] Inferring Javascript types using Graph Neural Networks

Jessica Schrouff, Kai Wohlfahrt|arXiv (Cornell University)|May 16, 2019
Software Engineering Research参考文献 15被引用 4
一句话总结

本文提出了一种图神经网络(GNN)模型,通过将源代码表示为包含语法和语义边的图,来推断JavaScript标记类型。该模型在预测八种JavaScript类型时准确率超过90%,优于先前的工作,展现出在代码编辑器或静态分析工具中集成的强大潜力。

ABSTRACT

The recent use of `Big Code' with state-of-the-art deep learning methods offers promising avenues to ease program source code writing and correction. As a first step towards automatic code repair, we implemented a graph neural network model that predicts token types for Javascript programs. The predictions achieve an accuracy above $90\%$, which improves on previous similar work.

研究动机与目标

  • 为解决动态类型JavaScript中类型错误在执行期间可能未被检测到的挑战。
  • 开发一种深度学习模型,无需依赖静态类型注解即可预测标记级别的类型。
  • 通过在抽象语法树(AST)上使用基于图的神经网络,改进现有类型推断方法。
  • 构建一个可部署的系统,适用于集成到实时开发环境(如在线代码编辑器或代码审查工具)中。
  • 评估图神经网络在建模程序结构以用于JavaScript类型预测方面的有效性。

提出的方法

  • 每个JavaScript源文件被解析为抽象语法树(AST),其中节点表示AST标记,边编码语法关系(例如'子节点')和语义关系(例如'由...定义')。
  • 节点特征包括AST节点类型(144种类别)、属性(107种类型)和字符串值(限制为16个字符),每类特征均通过专用嵌入层处理。
  • 将节点嵌入组合后,输入具有批量归一化、dropout和ReLU激活的前馈神经网络。
  • 评估了两种GNN架构:图卷积网络(GCN)和门控图神经网络(GGNN),两者均使用消息传递机制聚合邻域信息。
  • GCN为每种边类型使用独立的线性层,对消息求和后应用ReLU;GGNN使用GRU单元进行状态更新,且各层间权重共享。
  • 在GGNN中探索了引入主节点以建模长距离依赖关系,但在最终配置中未显示性能提升。

实验结果

研究问题

  • RQ1图神经网络能否在不依赖静态类型信息的前提下,有效从基于AST的程序表示中推断JavaScript标记类型?
  • RQ2在真实代码上,不同GNN架构(GCN与GGNN)在JavaScript类型推断任务中的性能表现如何比较?
  • RQ3在该上下文中,哪些超参数配置能为GNN实现最优的类型预测准确率?
  • RQ4在AST图上训练的GNN中,引入主节点是否能提升类型预测性能?
  • RQ5该模型在未见代码库上的泛化能力如何?能否在真实开发环境中实现高准确率?

主要发现

  • 所提出的GNN模型在类型预测准确率上超过90%,显著优于同一任务中的先前方法。
  • GCN模型在无编码前馈块、隐藏层大小为64、dropout率为0.1、消息传递层为7至10层、解码层为1层时表现最佳。
  • GGNN模型在1个编码层、隐藏层大小为128、无dropout、5个消息传递层、无主节点、1个解码层时表现最佳。
  • 主节点的引入未提升性能,因此被排除在最终GGNN配置之外,表明在AST图上长距离连接并无益处。
  • 超参数搜索表明,更多的消息传递层和解码层通常能提升性能,尤其在GCN中表现明显。
  • 该模型在未见代码库上泛化良好,因训练与测试数据按仓库级别划分,避免了数据泄露。

更好的研究,从现在开始

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

无需绑定信用卡

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