大多数已有的研究是以抽象语法树来表示源码信息,还有一些研究是向AST中添加额外的边把源码转换成图的形式,然后利用神经网络学习程序图的表示。尽管这些工作提供了额外的控制或数据流信息向AST发送任务,但他们忽略了AST本身结构信息的重要方面:节点和边的不同类型。
为了解决节点和边类型的信息,考虑使用异构图学习源码,提出一个新的构建公式,从带有额外节点和边的类型信息的AST中建立异构图。使用程序语言的ASDL语法定义程序图的节点和边类型,然后使用异构图神经网络训练这些图。在两项任务上评估我们的方法:代码注释生成和方法命名。(两个不同领域的Python数据集)这两个任务都需要理解完整代码段的语义。
很多研究使用AST表明代码结构信息,但AST的一个问题是,它们不能明确反映语法依赖之外的结构信息,如控制和数据流。一个可行的解决方案是在AST上添加不同类型的控制和数据流的边以生成程序图,并在程序图上应用图神经网络(GNN)来学习它们的表示。然而,这些方法不考虑除了控制或数据流的边之外,原始AST的节点和边的类型也不同。
我们的向AST中添加节点和边的类型的想法与异构图的概念是一致的。使用抽象语法描述语言获取AST上的节点和类型信息。
在获取到代码段的异构图之后,需要找到一种图神经网络(GNN)去表示这些图。我们把目光转向图嵌入领域。异构图神经网络被广泛使用在图嵌入中,不像传统的图神经网络,异构图神经网络能够在消息传递节点集成节点和边的类型信息并把节点的不同类型映射到不同的特征空间。在异构图上使用异构图转换器(HGT)计算程序表示。
贡献如下:1)使用异构图表示程序,并在源代码段上使用异构图神经网络
2)使用ASDL语法从程序的AST上建立异构程序图
3)在两个不同的任务上评估此方法,这两个任务涉及对源代码片段的图形级预测。我们的方法在注释生成和方法命名任务这两方面都优于其他GNN模型
方法
从源码中创建异构程序图(HPG),如何在异构图上应用异构图神经网络
异构程序图