作者:北邮GAMMA Lab直博生 张中健
本文旨在调研近年异质信息网络在软件工程方向的应用。通过对本文的阅读,读者能了解到异质图在代码理解,软件检测,API推荐,缺陷报告检测等领域的应用。文章最后也对HIN在软件工程领域的应用场景、通用流程、面临挑战等方面做出了总结。
1 相关概念
图神经网络(Graph Neural Network,GNN):图神经网络是一种直接作用于图结构上的神经网络。
异质图(Heterogeneous Graphs,HetG):一个异质图 由一组节点 和一组边 构成。其中每个节点和每条边都对应着一种类型。用 表示节点类型的集合, 表示边类型的集合。一个异质图有两个映射函数,分别是将每个节点映射到对应类型的 ,及将每条边映射到对应类型的
元路径(Mate-path):元路径是在网络模式的图上定义的路径,表示为,在类型之间它定义了一个复合关系,其中表示关系上的合成算子。
异质图嵌入(Heterogeneous graph embedding):异质图嵌入的目标是学习一个函数 ,该函数能将异质图中的节点 嵌入到一个具有维的维欧式空间中表示。
2 HIN应用场景
2.1 代码安全
iDev: Enhancing Social Coding Security by Cross-platform User Identification Between GitHub and Stack Overflow [1]
通过GitHub和Stack overflow之间的跨平台用户识别来增强社交编码安全
背景与问题:随着GitHub与Stack Overflow等平台逐渐流行,潜在的安全问题也在上升,主要归因于风险与有害代码能很好地嵌入传播。下图为Github平台与Stack Overflow的一个交互应用,攻击者首先会在Github中创建一个具有攻击效果的风险项目,然后在Stack Overflow中将该项目的链接作为问题的答案。
本文贡献:自动跨平台【Github与Stack Overflow】用户识别,利用用户的属性与社交编码属性等进行用户标识,检测投毒攻击者。
方法与模型:
-
跨平台构造用户代码交互图。在Github中构造用户与项目的连接关系,在Stack Overflow中构造用户与问题的连接关系,通过Github与Stack Overflow之间的引用关系构造跨平台关系连接。最终形成Attributed Heterogeneous Information Network (AHIN)。 -
AHIN2vec。首先基于元路径将构建的 AHIN 映射到由一组单视图属性图组成的多视图网络;然后,通过对 Grassmann 流形的子空间分析有效地将这种单视图融合到一个统一的属性图中;之后,提出了一个图自动编码器模型来学习用于跨平台用户识别的用户嵌入。 -
Classifier。对每对 GitHub 和 Stack Overflow 用户嵌入应用平均池化,然后将其送到分类器 (SVM)进行跨平台用户识别。
2.2 API推荐
Poster: Group Preference Based API Recommendation via Heterogeneous Information Network [2]
基于组推荐的异质信息网络API推荐
背景与问题:异质信息网络(HIN)是一种能够包括多种类型的边与多种类型的节点关系的逻辑网络。先前的API推荐研究主要关注在同质信息网络以及很少种类的边,所以并没有利用异质图本身丰富的异质信息。
方法与模型:GPRec。输入:Mashup信息【tag、category、description】,API 信息【tag,category、description、provider】以及Mashups与API之间的历史调用记录。GPRec Model:利用Mashup、API、以及它们之间的相关属性构造异质信息网络。基于不同元路径连接Mashup来学习不同视图的语义表示。利用四种相似度度量方法来计算不同Mashups之间的相似度。采用贝叶斯群偏好个性化排序算法对每对Mashup-API排序。输出:个性化排序后的结果。
2.3 Andorid恶意软件检测
Out-of-sample Node Representation Learning for Heterogeneous Graph in Real-time Android Malware Detection [3]
Android 恶意软件实时检测中异质图的样本外节点表示学习
背景与问题:Android恶意软件的爆炸式增长和日益复杂,需要能够保护移动用户免受新威胁的新防御技术。。由于 Android 恶意软件检测是一个速度敏感的应用程序并且需要具有成本效益的解决方案,因此需要可扩展的 HG 表示学习方法,特别是对于样本外节点。下图是“TigerEyeing”木马的一个例子,“TigerEyeing”是一种新型的命令和控制(C&C)恶意软件,它假装是合法的应用程序(例如,移动游戏、系统工具),并且它只按需执行有利可图的任务。
方法与模型:
-
特征提取。包括动态行为特征提取与基于关系的特征提取。在动态欣慰特征提取中,从Android应用程序的运行执行中提取应用程序框架中的API调用序列,以捕获它们的行为。在基于关系的特征提取中,考虑6中异质关系:app-invoke-API、the appexist-IMEI、the appcertify-signature、app-associate-affiliation、IMEI-havesignature、IMEI-possessaffiliation。 -
异质图构造。为了使用提取的特征描述应用程序,引入异质图来以一种正确的方式建模,使得不同种类的实体和边都能得到最好的处理。 -
异质图表示学习。由于 Android 恶意软件检测是一个速度敏感的应用程序并且需要具有成本效益的解决方案,因此需要可扩展的 HG 表示学习方法,特别是对于样本外节点。提出了 HG 样本内节点嵌入模型(即 HGINE)来学习能够保留 HG 异质属性的样本内节点嵌入;然后设计了 HG2Img 模型来学习样本外节点表示,并使用学习的样本内节点嵌入来丰富样本内节点表示,而无需重新运行/调整 HG 嵌入。 -
深度神经网络分类器。将上一步Android应用程序的生成表示作为输入,利用CNN做恶意软件检测。
2.4 重复缺陷报告检测
HINDBR: Heterogeneous Information Network Based Duplicate Bug Report Prediction [4]
基于异质信息网络的重复Bug报告预测
背景与问题:Bug追踪系统中存在重复的Bug错误。现存的方法主要是基于文本相似度的方法来进行重复Bug识别,但是这个方法在JIT中变得不可行。
方法与模型:
构造的HIN:
-
节点:bug report (BID)【TextBID,unstructured features】, component (COM), product (PRO), version (VER), priority (PRI), and severity (SEV).【structured】 -
关系:Bug-Component,Component-Product,Bug-Version,Bug-Priority,Bug-Severity
特征表示与融合:
-
结构特征。HIN2Vec来预训练结构特征。 -
非结构特征。Word2Vec来预训练非结构特征text。 -
特征融合。对于某个节点,将其结构特征与非结构特征融合作为其最终的特征表示。
重复Bug检测:利用曼哈顿距离求两个向量之间的距离,当两个向量距离在潜在空间彼此接近时,就认为这两个向量表示的是一个重复错误。
2.5 程序理解与表示
Learning to Represent Programs with Heterogeneous Graphs [5]
使用异质图学习程序表示
背景与问题:代码表示将程序转换为具有语义的向量,对于源代码处理至关重要。Abstract Syntax Tree (AST)【抽象语法树】所构成的增强图,包含丰富的语义信息与结构信息。为了学习代码的表示,现存的方法主要是同质图,所以忽视了节点与边的类型信息。下图为对于一个名为foo的函数,其抽象语法树表示为图a,使用先前工作提出的同质图构造方法可将语法树构造成图b所示,使用本文提出的异质图构造方法可将语法树构造成图c所示。
方法与模型:提出的HPG+HGT框架概述:首先Heterogeneous Program Graph (HPG) 解析器根据 Abstract Syntax Description Language (ASDL) 语法从代码片段生成 HPG,其中不同颜色表示不同节点和边的类型。然后HGT 编码器采用两个步骤来处理 HPG 并产生表示——特征初始化和迭代消息传递,利用添加值的嵌入和每个节点的位置编码方法进行特征初始化,利用Heterogeneous Graph Transformer (HGT)方法进行迭代消息传递。最后,学习到的节点表示被送到下游任务模块中。
Heterogeneous Graph Transformer (HGT):
2.6 缺陷报告开发者分发
KSAP: An approach to bug report assignment using KNN search and heterogeneous proximity [6]
一种基于KNN搜索和异质邻近的Bug报告分配方法
背景与问题:及时的将Bug报告分配给开发人员,对软件质量保证至关重要。随着软件系统发展,将Bug分配给合适的开发人员是困难的。
模型与方法:
当一个新的Bug报告提交后,构造该Bug报告的异质图。下图展示了使用 Mozilla 错误报告 #333160 构建的异质图网络。
KSAP将使用一个二阶段程序分配该报告给开发者。第一个阶段是通过k -最近邻(KNN)方法将历史上已解决的类似Bug报告搜索到新的Bug报告。第二阶段是根据不同种类的邻近性对那些贡献了类似错误报告的开发人员进行排名。最总Bug报告优先分配给将排名较高的开发人员。
2.7 Smart Contract漏洞检测
MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract Vulnerabilities [7]
用于细粒度检测智能合约漏洞的多级异质图嵌入
背景与问题:学习由不同类型的节点和边组成的异质图增强了同质图技术的表现。控制流图这种异质图表示了软件代码的执行流过程。同时控制流图能表示更多代码、开发技术和工具的语义信息,从而有利于检测软件中存在的漏洞。现存的方法不能处理具有大量不同类型的边与节点的异质图。下图为一个简单示例,Part A为一个以太坊智能合约代码片段,Part B为代码片段对应的异质调用图,Part C为合同PrivateBank中函数CashOut的异质控制流图。
模型与方法:
异质合约图生成:首先,源代码由异质合同图生成器组件处理,并根据调用图与控制流图生成两个粒度级别(合同级别与语句级别)的异质图,即异质调用图和异质控制流图,然后将这个两个异质图进行融合,得到具有丰富信息的异质合约图。
多元路径提取器:根据每个节点的类型及其关联边的类型,组件提取其对应的元路径。
多级图神经网络:首先将来自前一个组件的合约图的元路径或图拓扑作为输入并生成节点嵌入。然后节点嵌入被用作节点特征,并在节点级使用异质注意机制与元路径融合。
二阶段漏洞检测器:最后一个组件使用上一步学到的嵌入训练多层感知器机(MLP) 来执行图分类或节点分类。
2.8 不安全代码片段检测
An Automatic System for Insecure Code Snippet Detection in Stack Overflow over Heterogeneous Information Network [8]
使用异质信息网络对Stack Overflow中的安全代码片段检测的自动化系统
背景与问题:随着现代社会编码范式【Stack Overflow】的流行,不安全的代码在系统中很简单嵌入与分布的安全隐患也在增加。
模型与方法:
-
利用代码内容【功能名称、函数、API】与社会编码属性来检测Stack Overflow中的不安全代码片段。社会编码属性包括用户、徽章、问题、答案、代码片段等。 -
利用HIN来学习丰富的语义关系,基于元路径的方法来融合更高层次的语义特征,从而建立代码段的相关性。 -
提出snippet2vec框架来学习HIN中丰富的语义知识与结构知识的表示。 -
多视图融合分类器来进行下游任务,即不安全代码片段的检测。
2.9 缺陷报告开发者分发
A Spatial-Temporal Graph Neural Network Framework for Automated Software Bug Triaging [9]
用于自动化软件Bug诊断分类的时空图神经网络
背景与问题:
为了高效分配Bug给指定开发人员,Bug诊断分类程序是非常重要的。现有的大部分方法只关注单个时间片的静态折叠图,缺乏动态性与扩展性。先前的工作都没考虑开发者的周期性交互。
模型与方法:
-
提出spatial-temporal dynamic graph neural network (ST-DGNN),时空动态图神经网络。包括Joint Random Walk (JRWalk)与Graph Recurrent Convolutional Neural Network (GRCNN)两部分。 -
JRWalk通过考虑节点(基于节点度)与边(基于边权重)的重要性,使用两种采样策略采样本地拓扑结构。 -
CRCNN有三个相同结构组件:每小时周期性、每日周期性、每周周期性。使用CNN与LSTM学习时空图上的动态Developer Collaboration Networks(DCN)特征。
2.10 代码审查推荐
Using Large-scale Heterogeneous Graph Representation Learning for Code Review Recommendations [10]
使用大规模异质图表示学习用于代码审查推荐
背景与问题:
代码审查是成熟软件发展一个重要的程序。大多数审查推荐系统主要依赖历史文件变化与评论信息。虽然这些方法能够识别并建议合格的审查员,但它们可能对那些拥有所需专业知识且从未与更改过的文件进行过交互的审查员视而不见。
模型与方法:
-
Coral。审查员推荐系统。从一组丰富的实体(包括开发者、存储库、文件、拉取请求、工作项目等)及其在现代源代码管理系统中的关系构建的社会技术图。
-
利用RGCN来进行异质图表示学习。采用inductive的学习范式。模型结构简单,适合于大规模异质图。
RGCN:
3 总结
HIN在软件工程领域中场景包括:应用较多的场景包括代码理解,软件检测,API推荐,缺陷报告检测。同时在软件社交网络分析、软件日志分析、开发者专业程度分析等方面也具有潜在的应用场景。
HIN应用的通用流程主要包括四个步骤:
-
收集并预处理相关业务场景数据集,其中爬虫技术可以有效收集网络上的数据资源。
-
基于收集到的数据集,构造具有丰富图结构和属性的异质图,并将数据集处理为对应图结构所需要的形式。
-
基于构造的异质图,设计一种合适的异质图表示学习方法,现存图表示学习方法可分为 结构保留的异质图嵌入、属性辅助异质图嵌入、面向应用的异质图嵌入、动态异质图嵌入四类 [11]。
-
将上一步通过异质图表示学习所得到的节点嵌入用作节点特征,选择一种适用于下游任务的机器学习算法,将节点特征输入到算法中,得到输出结果。
最后,总结现存的HIN所面临的一些挑战:
-
如何收集与清洗数据集,例如通过网络爬虫收集到的数据可能存在噪音过多、格式不一致、无标签等问题。 -
如何构造有效的异质图,设计出最适合特定业务场景的异质图,才能最大程度的包含丰富的图结构和属性信息。 -
如何基于下游任务设计合适的图表示学习方法学习节点表示。现存的异质图表示学习方法很多,每种方法适用的场景也不一致,如何基于先前的工作,设计出一种适合特定业务场景的异质图表示学习方法。 -
如何扩展到OOD场景与大规模图数据场景中,调研发现先前的工作是基于IID的假设,同时训练数据集都是在一定规模范围内的。但是实际的应用场景中往往面对的是OOD的场景于大规模的图数据场景。 -
随着隐私保护问题的出现,特别是对于实际应用场景,图上的安全问题亟待解决。
参考文献
[1] Yujie Fan, Yiming Zhang, Shifu Hou, Lingwei Chen, Yanfang Ye, Chuan Shi, Liang Zhao, & Shouhuai Xu (2019). iDev: Enhancing Social Coding Security by Cross-platform User Identification Between GitHub and Stack Overflow international joint conference on artificial intelligence.
[2] Fenfang Xie, Liang Chen, Dongding Lin, Chuan Chen, Zibin Zheng, & Xiaola Lin (2018). Poster: Group Preference Based API Recommendation via Heterogeneous Information Network international conference on software engineering.
[3] Yanfang Ye, Shifu Hou, Lingwei Chen, Jingwei Lei, Wenqiang Wan, Jiabin Wang, Qi Xiong, & Fudong Shao (2019). Out-of-sample Node Representation Learning for Heterogeneous Graph in Real-time Android Malware Detection international joint conference on artificial intelligence.
[4] Guanping Xiao, Xiaoting Du, Yulei Sui, & Tao Yue (2020). HINDBR: Heterogeneous Information Network Based Duplicate Bug Report Prediction international symposium on software reliability engineering.
[5] Wenhan Wang, Kechi Zhang, Ge Li, & Zhi Jin (2021). Learning to Represent Programs with Heterogeneous Graphs arXiv: Software Engineering.
[6] Wen Zhang, Song Wang, & Qing Wang (2016). KSAP: An approach to bug report assignment using KNN search and heterogeneous proximity Information & Software Technology.
[7] Hoang H. Nguyen, Nhat-Minh Nguyen, Chunyao Xie, Zahra Ahmadi, Daniel Kudendo, Thanh-Nam Doan, & Lingxiao Jiang (2022). MANDO: Multi-Level Heterogeneous Graph Embeddings for Fine-Grained Detection of Smart Contract Vulnerabilities
[8] Yanfang Ye, Shifu Hou, Lingwei Chen, Xin Li, Liang Zhao, Shouhuai Xu, Jiabin Wang, & Qi Xiong (2018). ICSD: An Automatic System for Insecure Code Snippet Detection in Stack Overflow over Heterogeneous Information Network annual computer security applications conference.
[9] Hongrun Wu, Yutao Ma, Zhenglong Xiang, Chen Yang, & Keqing He (2021). A Spatial-Temporal Graph Neural Network Framework for Automated Software Bug Triaging arXiv: Software Engineering.
[10] Jiyang Zhang, Chandra Maddila, Ram Bairi, Christian Bird, Ujjwal Raizada, Apoorva Agrawal, Yamini Jhawar, Kim Herzig, & Arie van Deursen (2022). Using Large-scale Heterogeneous Graph Representation Learning for Code Review Recommendations.
[11] Xiao Wang, Deyu Bo, Chuan Shi, Shaohua Fan, Yanfang Ye, & Philip S. Yu (2020). A Survey on Heterogeneous Graph Embedding: Methods, Techniques, Applications and Sources arXiv: Social and Information Networks.
长按下图并点击“识别图中二维码”
即可关注北邮 GAMMA Lab 公众号
原文始发于微信公众号(北邮 GAMMA Lab):异质信息网络在软件工程方向的应用调研
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论