Skip to content

Euler 2.0 进阶教程总览

origin edited this page Jun 30, 2020 · 3 revisions

在进阶教程这一大章,我们将介绍如何利用Euler-2.0来构建图表示学习算法来处理不同的图场景和介绍如何利用Euler2.0的新功能(点和边的属性索引)来满足用户的个性化需求。

在本章将介绍以下几部分内容:

总共介绍六钟不同的图场景以及一个利用属性索引的个性化需求场景。

每一部分内容分别用一个或几个实际例子来介绍如何使用Euler2.0来处理对应的场景。

各种图应用总结

为了让用户能够更好的理解如何Euler2.0来构建图模型,这里对本章所介绍的六种不同图场景下,使用例子之间联系和区别做一个总结。

数据准备与生成

数据集 图json文件 索引meta文件 图数据二进制文件生成
无属性图 Cora(不考虑节点属性) 节点除了类别以外没有其他的属性 由于是无属性图,无需构建属性索引 使用Euler2.0 python工具进行转化
有属性图 Cora 节点有丰富的属性特征 可以构建索引 使用Euler2.0 python工具进行转化
异质图 Wn18 节点和边的种类多样,其中节点无属性,边的属性为节点对的关系类型 可以构建索引 使用Euler2.0 python工具进行转化
知识图谱 fb15k 节点和边的种类多样,其中节点无属性,边的属性为节点对的关系类型 可以构建索引 使用Euler2.0 python工具进行转化
图分类 MUTAG 将多张图合成一张大图,在生成大图的JSON文件的时候,在JSON中添加每一个节点属于哪一张图的标识属性(即graph_label)来区分不同图中的节点 定义基于graph_label来建立属性索引,以此来快速找到同一个图中的所有节点 使用Euler2.0 python工具进行转化
大规模图 可以用于不同类型图 将多张图合成一张大图,在生成大图的JSON文件的时候,在JSON中添加每一个节点属于哪一张图的标识属性(即graph_label)来区分不同图中的节点 所有的JSON文件共用一个meta文件,无需切分 利用项目根目录下的euler/tools/gen_partitioned_data.sh进行转化

模型实现方式

典型的无属性图,有属性图,异质图和图分类问题都可以通过Message Passing接口实现模型,下表介绍了这些问题在实现模型时的异同点。

示例算法 示例算法子图采样 示例算法卷积方式 H0层embedding表达 继承基类 输出节点embedding表达
无属性图 GraphSAGE sage sage 节点id 映射的embedding table得到 BaseGNNNet
SuperviseModel
通过GNN encoder 获取节点embedding
有属性图 GraphSAGE sage sage 通过节点dense属性得到 BaseGNNNet
SuperviseModel
通过GNN encoder 获取节点embedding
异质图 R-GCN relation relation 通过节点id 映射的embedding table得到,边初始化embedding通过边的dense属性得到 BaseGNNNet
UnsuperviseModel
通过GNN encoder 获取节点以及context的embedding
图分类 GatedGraph full gcn 通过节点sparse 特征映射的embedding table得到 BaseGNNNet
GraphModel
通过GNN encoder 获取节点embeding
再通过graph pool获取graph embedding

对于知识图谱问题,Euler-2.0提供了TransX基类帮助完成Trans系列知识图谱的算法实现。

示例算法 继承基类 模型实现方式 H0层embedding表达 输出embedding表达
知识图谱 TransE TransX generate_embedding()和loss_fn()方法的实现 节点id 和边id 映射的embedding table得到 节点和边的embedding结果

对于大规模图问题来说,模型实现方式与其他图问题完全相同,只是在构造图数据时,通过Euler的工具完成分布式图的构建和读取实现完成大规模图学习算法。

Clone this wiki locally