【图神经网络】从0到1使用PyG手把手创建异构图

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


在现实中需要对 多种类型的节点以及这些 节点之间多种类型的边进行处理,这就需要 异构图的概念,在异构图中, 不同类型的边描述不同类型节点之间 不同的关系异构图神经网络的任务就是在这种图结构上学习出节点或者整个异构图的特征表示

异构图

异构图的准确定义如下:异构图(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:VTv,每条边映射到其对应的类型: ϕ e : E → T e \phi_e:E\rightarrow T_e ϕe:ETe

创建异构图

电影评分数据集MovieLens

这里以一个电影评分数据集MovieLens为例,逐行示例如何创建异构图。MovieLens包含了600个用户对于电影的评分,利用这个数据集构建一个二分图,包含电影用户两种类型的节点,一种类型的边(含有多种类型节点,所以可以看作一个异质图)。

  • MovieLens中的movies.csv文件描述了电影的信息,包括电影在数据集中唯一的ID电影名电影所属的类型
    movies.csv
  • MovieLens中的ratings.csv包含了用户对于电影的评分:
    ratings.csv

建立二分图数据集

首先下载一个Python库:sentence_transformersSentenceTransformers 是一个可以用于句子、文本和图像嵌入的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)

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

镰刀韭菜

看在我不断努力的份上,支持我吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值