从0到1用PyG创建异构图
在现实中需要对 多种类型的节点以及这些 节点之间多种类型的边进行处理,这就需要
异构图的概念,在异构图中,
不同类型的边描述不同类型节点之间
不同的关系,
异构图神经网络的任务就是在这种图结构上学习出节点或者整个异构图的特征表示。
异构图
异构图的准确定义如下:异构图(Heterogeneous Graphs):一个异构图 G G G有一组节点 V = v 1 , v 2 , . . . , v n V=v_1,v_2,...,v_n V=v1,v2,...,vn和一组边 E = e 1 , e 2 , . . . , e m E=e_1,e_2,...,e_m E=e1,e2,...,em组成,其中每个节点和每条边都对应着一种类型,用 T v T_v Tv表示节点类型的集合, T e T_e Te表示边类型的集合,一个异构图有两个映射函数,分别将每个节点映射到其对应的类型 ϕ v : V → T v \phi_v:V\rightarrow T_v ϕv:V→Tv,每条边映射到其对应的类型: ϕ e : E → T e \phi_e:E\rightarrow T_e ϕe:E→Te。
创建异构图
电影评分数据集MovieLens
这里以一个电影评分数据集MovieLens为例,逐行示例如何创建异构图。MovieLens包含了600个用户对于电影的评分,利用这个数据集构建一个二分图,包含电影、用户两种类型的节点,一种类型的边(含有多种类型节点,所以可以看作一个异质图)。
- MovieLens中的
movies.csv文件描述了电影的信息,包括电影在数据集中唯一的ID,电影名,电影所属的类型:

- MovieLens中的ratings.csv包含了用户对于电影的评分:

建立二分图数据集
首先下载一个Python库:sentence_transformers。SentenceTransformers 是一个可以用于句子、文本和图像嵌入的Python库。 可以为 100 多种语言计算文本的嵌入并且可以轻松地将它们用于语义文本相似性、语义搜索和同义词挖掘等常见任务。该框架基于 PyTorch 和 Transformers,并提供了大量针对各种任务的预训练模型。 还可以很容易根据自己的模型进行微调。
pip install -U sentence-transformers
首先,导入依赖库:
import os.path as osp
import torch
import pandas as pd
from sentence_transformers import SentenceTransformer
from torch_geometric.data import HeteroData, download_url, extract_zip
from torch_geometric.transforms import ToUndirected, RandomLinkSplit
然后,设定数据集:

利用Pandas查看数据集

(1)利用嵌入模型将每个电影名用向量表示(Embedding)

本文介绍了如何使用PyG库从零开始创建异构图,以MovieLens数据集为例展示了如何处理包含多种节点类型和边类型的图。通过SentenceTransformers库对节点进行嵌入表示,然后构建二分图数据集。接着,将数据集转换为可训练的形式,使用ToUndirected和RandomLinkSplit进行无向图转换和数据集划分。最后,介绍了如何建立异构图神经网络,特别是通过OGB数据集展示了异构图的构建,并提到了HeteroData中常用函数以及如何将简单图神经网络转换为异构形式。此外,还提及了GraphGym库在图神经网络设计和评估中的应用。
最低0.47元/天 解锁文章
2225

被折叠的 条评论
为什么被折叠?



