开发者学堂课程【PAL 平台学习路线:机器学习入门到应用:图神经网络 GNN 框架 Graph-Learn 技术分享】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/855/detail/14099
图神经网络 GNN 框架 Graph-Learn 技术分享
内容介绍:
一、图神经网络简介
二、Graph-Learn 的简单介绍
三、GNN 的一些应用场景
一、图神经网络简介
GNN 也就是图神经网络,是指图与深度学习的结合。图在生活中无处不在,社交网络、交通网络、电商关系网络都构成一张图,以电商关系网络为例来说明:
在电商场景有商品、用户、店铺、设备等多种实体经济,实体之间有多种不同类型的边,那对这样一个复杂的数据我们可以把它用一个图来描述,图包括一些,点和边,在这里点就是这些不同的实体,边就是实体之间的关系,所以可以看出图是一种用来建模,有关系的实体之间的数据的一种常用手段,那图神经网络是将图和深度学习进行结合,将一个图上的点或者边,映射到一个低维的向量空间中来进行表示,从来对整个图的结构以及属性关系进行建模,应用于下游任务,进行一些点的分类,边的预测或者图的回归。
图神经网络相比一般网络的好处,图的话他融合了多种关系,而且可以捕获一些二阶三阶等高阶的一些关系,此外由于是对整个的实体和关系进行联合的优化。因此可以做到一个全局优化,最后,有些图还可以做一些推理的任务。
二、Graph-Learn 的简单介绍
1、Graph-Learn 分布式图学习框架
如上图,最底层是由分布式的图存储和查询引擎构成,可以对一些异构的,有属性的,有权重的有标签的图进行分布式的存储,并提供了一些分布式查询的一些语法,包括采样、复采样、变异、属性查询等,同时兼容常用的深度学习框架比如 TensorFlow PyTorch,
在上层提供了一些简洁灵活的数据预处理模块,将复杂的特征以及不同的数据转换成深度学习框架所需要的数据格式来进行上层算法的搭建,在上层封装了一些常用的图卷积层,并且支持一些异构体,
顶层实现了常见的图神经网络 GNN 算法,以及 KG(如TransE)算法,同时支持自定义算法。
2、面向工业场景设计
Graph-Learn 主要是面向工业场景来进行设计,那工业场景的图有一些特点:
(1)超大规模:
边的规模可达百亿或千亿级边,点的规模可达十亿到百亿级点,是一种 TB 级存储
(2)点边异构
数据不规则,多种类型的点,多种类型的边
(3)属性多样
区别于学术场景的图工业场景的图点、边均有属性,类型多样,包括整型、浮点型、字符型
最常见的例子就是,一个用户或者一个物品他可能有一些连续的特征,也有一些离散的特征。比如说标签,用户年龄、性别等离散值特征。
3、一体化系统实现
Graph-Learn 使用了一体化的系统实现如下图所示:
最底下是一个图引擎,支持超大规模异构图和带属性的图,采用一个分布式内存的存储方式,然后机器之间使用 RPC的连接方式,上层提供一个 Python 的 API,可以进行构图、图采样复采样、图查询等功能;再往上层使用一些常见的深度学习引擎,比如 TensorFlow PyTorch 来构建一些算法模块,算法模块支持常见 GCN,SAGE,GAT 等算法,同时也就是一些自定义的算法
4、面向业务的端到端方案
提供了一个面向业务的端到端的一个方案,从数据算子算法到业务:
数据层首先需要准备点和边的数据,基于点和边的数据可以自动的去构造一个图,包括图的拓扑以及一些图的分析比如说,图的,点的出入,点的个数等,算子层主要是一些图操作算子,包括采样、复采样,图的一些融合或者聚合以及 Combiner 还有一些提供了一个查询语法。在往上是一个算法层,内置了像 GCN,GraphSAGE,GAT,GIN,SEAL,Trans X 多种算法,;最上层可以直接用应用于各种各样业务,比如说推荐场景、安全公共场景、知识图谱场景等
Graph-Learn 可以与 PAI 的云产品结合,PAI 的云生态包括 Data Works,Max Compute,NAS,OSS等,Graph-Learn 对这些都是完全支持的。在产品层面 PAI 有 DLC,DSW,STUDIO,EAS 等。在 DLC,DSW,STUDIO 产品上都可以用到 Graph-Learn。
5、兼容开源生态
同时也对框架进行了开源,以各种开源的一些生态,Graph-Learn 对外提供的 API 是 Python 格式。数据以 Numpy组织,我们将提供的数据转换成 TensFlow 或者 PyTorch 或者 pyG 的一些形式,基于这些数据转换后的结果,然后基于一些深度学习引擎可以方便地构建 GNN 的算法以及应用。
6、如何使用一 PAI 组件
如何使用 PAI 组件,已经在 PAI 上分装了若干算法组件,可以直接通过 PAI 命令进行调用,这些组件包括如下几个:
(1)无监督模型:包括同构图GraphSAGE、二部图 GraphSAGE ,这些组件通过用户提供的输入表,以及指定的参数,可以产出模型,或顶点的向量,也就是用户的向量,或者物品的向量,基于这些向量可以做到一个向量召回;
(2)同时提供了一个离线召回评估 hitrate 评估组件,这个组件可以对上述向量进行一个简单的评估,可以评估向量的相似度,并且计算一个 hitrate;
(3)此外还提供了有监督的 GraphSAGE 组件,这个模型主要用于点分类模型。
以二部图 GraphSAGE 为例说一下如何调用:
Pai-name bipartite_graphsage_ext
-Dps_count=2 -Dps_memory=20000 -Dworker-cout=10 -Dworker_memory=5000
-Dui_edge_table=’u2i_edge’ -Du_node_table=’u2i_node’ -Dinode_table=’u2i_node-1‘
-Depoch=2 -Dbatch_size=512 -Dlearning_rate=0.0001 -Ddeop_out=0.5......
调用方法就是直接用一个 PAI 的命令行,PAI 行内一个算法组件名称,后面是一些用户自定义的参数,包括机械的配置,输入语,输出表以及驱动过程中的配置,PAI 命令行可以通过 datawatch、PAI STUDIO 或者 DSW 等形式进行提交。
除了了内置的算法,还支持用户自定义算法。
7、如何使用一自定义算法:
首先是编写算法模型,使用 GraphLearn 提供的 python API 编写 GNN 算法;
第二步就是将 Graph - Learn wheel 包一起打包上传,将 GraphLearn wheel 包解压并和自己编写的算法一起打包上传;
第三步就是在 PAI 上运行,使用 PAI - Tensorflow 或者 PAI - PyTorch 命令运行。
在 dataworks 上打包上传后就可以用如下命令进行:
Pai-name tensorflow1120_ext
-Dscript=’odps://your_project/resources/your_tar_name.tar.gz’
-DentryFile=”your_train_file.py”......
提交一个 PAI 的 name 到 tensorflow 的任务,然后将自己上传的包提供一下,然后将自己的训练文件指定一下,进行一个分布式的运行。
三、GNN 的一些应用场景
1、应用场景1:推荐召回
把 u2i/i2i 推荐问题转换成顶点间的边连接预测问题。
构图很关键,尤其是构建 u2i/i2i 的图,图关系意味着模型学习的上限。
边的关系类型: user - item 关系(如用户点击物品、用户购买物品、用户评价或者评论物品等);item - item 关系(就是 item之间的相似度,该相似度可以用滑动窗等方式产生);还可以对 user 和 item 提供一些特征,最简单的就是使用用户或者物品的 ID 作为特征,还可以提供一些具有辨识度的统计特征,标签特征等。
以二部图为例进行一个算法的介绍:
在二部图 u2i 推进场景,我们对u和i这样一条边,首先会去对 u 采他的邻居,比如说我采 user 的一跳邻居,对 item来说,也会去采他的邻居。比如说我根据 item 到 item 的关系去采他的二跳邻居区,这样对 user 和 item 都有一个邻居的采样,此外因为是一个无监督学习场景,我们还需要对整个的训练采一个正样本和一个负样本。比如说采一个负的i,就是说user 没有交互过来,这个 item 也会去采他的二跳邻居,采样完成之后,我们使用 GraphSAGE 算法,对邻居进行一个聚合,最终学习到 u 和 i 的 Embedding。
GNN 算法的优点:不局限于行为历史序列,可供挖掘多类型高阶关系,对item来说我们挖掘了两跳的邻居关系;此外还可易捕捉数据的动态变化,运行效率高。
2、应用场景2:安全风控
以垃圾注册检测场景为例进行介绍,垃圾注册场景是指用户垃圾账户的一个检测,也就是说用户在注册的时候我们要判断他是不是潜在的垃圾账户,整个场景建模起来是一个点分类模型。
在构边的时候,通过同手机号关系,同设备关系,同注册 ip 前缀关系等,将账号之间的多种关系用图的边来进行表示。多种类型的边采用 RGCN 算法来进行建模。该算法如下图所示:用来建模多种类型边的关系,对多种类型的边进行一个学习转化取证然后进行一个加和,得到最终节点的向量表示,在接入一个分类器就可以完成一个点分类的模型。
优点:利用账号之间的多种关系,发掘团伙信息
在垃圾注册场景使用图的原因:因为垃圾注册检测的模型,经过多年的对抗,垃圾账号之间他们已经具有一些很强的对抗性,通过分析发现这些账号之间具有团伙信息,那自然想到图的话可以建模这种账号与账号之间的关系,然后发觉一些团伙信息,所以说使用GNN的话在这个场景就会比较有优势。
dataworks 使用 Graph-Learn 的例子:
首先已经提供的组件二部图 GraphSAGE,只需提供提交一个 PAI 命令的方式,提供一些输入输出表,配置一些参数,点击运行后即可运行算法,运行的时候会产生一些运行日志,其中打开这个 Log View 就可以看到运行过程中的一些信息输出,比如说 notes 的变化,以及保存向量的一些阶段信息。
对于自定义算法的话将自己开发的算法以及 GraphLearn wheel 包打包成一个资源,然后上传到 dataworks 上,然后通过命令行的方式提交,指定自己的打包算法以及指定自己的入口文件然后通过一些参数配置,点击运行也可以进行训练。
二部图的运行结果可以通过打开 Log View 进行查看,通过点开 Log View 里面的 worker 查看日志输出: