-
Notifications
You must be signed in to change notification settings - Fork 558
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的工具完成分布式图的构建和读取实现完成大规模图学习算法。