数据集
为了支持快速、便捷地使用 graphdatascience,该库提供了一些功能,可以非常轻松地将一些有趣的数据集投影到服务器端的 GDS 中。其中一些数据集较小且内置于库中,另一些则较大并托管在其他地方,在加载时会自动在后台获取。
1. 内置数据集
为方便起见,该库附带了一些较小的内置数据集,加载速度非常快。这些数据集可以轻松导入 GDS,以获取表示该数据集的图对象。
这些数据集带有一个加载器方法,该方法接受两个可选参数:graph_name(用于指定图名称)和 undirected(接收布尔值,如果设置为 true,则将图作为无向图加载)。
如果图以 undirected = True 加载,则其关系数量将是有向版本的两倍。undirected 的默认值因数据集而异。
例如:
G = gds.graph.load_cora()
assert G.node_count() == 2_708
assert G.node_labels() == ["Paper"]
1.1. Cora
一个著名的引文网络,由《使用机器学习自动化构建互联网门户》一文引入,并被用于许多节点分类或链接预测出版物中。
默认情况下,Cora 以 undirected = False 加载。
| 名称 | 值 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.2. 空手道俱乐部 (Karate club)
一个由 Zachary 引入的著名社交网络。默认情况下,空手道俱乐部数据集以 undirected = False 加载。
| 名称 | 值 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3. IMDB
一个异构图,用于对节点分类或链接预测模型进行基准测试,例如 异构图注意力网络 (Heterogeneous Graph Attention Network)、MAGNN:用于异构图嵌入的元路径聚合图神经网络 和 图变换网络 (Graph Transformer Networks)。该图包含演员、导演、电影(以及未分类电影)作为节点,以及演员与其参演电影之间、导演与其执导电影之间的关系。
默认情况下,IMDB 数据集以 undirected = True 加载。如果以有向方式加载,其关系数量将减半。
| 名称 | 值 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.4. LastFM
一个用于链接预测模型基准测试的异构图,例如被 MAGNN 使用:用于异构图嵌入的元路径聚合图神经网络。数据和许可来自 HetRec 2011。原始数据来自 LastFM。
该图包含 User(用户)和 Artist(艺术家)作为节点,每个节点都有一个 rawId 字段,对应于原始数据中的 ID。rawId 可用于(例如)通过参考 HetRec'11 .dat 文件来查询艺术家名称。
有三种类型的关系:
-
IS_FRIEND存在于User节点之间,表示用户与用户之间的好友关系。 -
LISTEN_TO存在于User和Artist节点之间,表示用户收听的艺术家。 -
weight属性表示用户收听该艺术家的次数。 -
TAGGED存在于User和Artist节点之间,表示用户标记过的艺术家。 -
tagID属性代表一个流派。 -
day、month和year属性代表标记创建的时间。 -
timestamp代表与上述日期相同的毫秒数(自 EPOCH 起)。
请注意,用户可以使用不同的 tagID 多次标记同一位艺术家。
默认情况下,LastFM 数据集以 undirected = True 加载。如果以有向方式加载,其关系数量将减半。
| 名称 | 值 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2. 来自开放图基准 (Open Graph Benchmark) 的数据集
库中提供了加载 Open Graph Benchmark (OGB) 数据集的便利方法。为了使用这些方法,必须为 graphdatascience 库安装 OGB 支持。
pip install graphdatascience[ogb]
用于公开 OGB 数据集加载功能的两个方法是:
这两个方法都返回一个 Graph 对象,并接受四个参数:
| 名称 | 类型 | |
|---|---|---|
|
|
OGB 数据集的名称 |
|
|
下载的 OGB 数据集的存储路径(可选) |
|
|
创建的图的可选名称。默认为 |
|
|
可使用的可选线程数 |
|
OGB 加载方法在后台使用 OGB 库。因此,在加载新的 OGB 数据集时,数据集将从互联网下载,因此需要互联网连接。但是,如果 |
|
所有 OGB 数据集都以 |
|
如果目标 GDS 服务器拥有企业版许可证并启用了 Arrow Flight Server,则 OGB 数据集的加载性能会非常好。如果不是,性能会差很多。加载时间将延长几个数量级,并需要占用更多的内存。事实上,可能需要增加 承载 GDS 的 Neo4j 数据库的最大堆大小,以便为加载提供足够的内存。 |
|
目前,加载方法不支持加载 OGB 数据集中的关系特征。每当加载包含关系特征的数据集时,这些特征将不会包含在投影中,并会发出警告。 |
根据数据集和任务的不同,投影到服务器端 GDS 中的图看起来会有所不同。
2.1. OGBN 图
用于节点属性预测的数据集。
2.1.1. 同构图
这些图在投影到服务器端 GDS 时将具有:
-
最多三个表示数据集拆分的不相交节点标签:“Train”、“Valid” 和 “Test”
-
所有关系共用一个关系类型 “R”
-
所有节点上都有一个 “classLabel” 属性,由单个数字表示
-
如果数据集提供,则所有节点上都有一个节点属性 “features”,由数字数组表示
让我们看一个加载并检查这些数据集之一的示例
G = gds.graph.ogbn.load("ogbn-arxiv")
assert G.name() == "ogbn-arxiv"
assert G.node_count() == 169_343
assert G.node_labels() == ["Train", "Valid", "Test"]
assert G.node_properties()["Train"] == ["features", "classLabel"]
assert G.relationship_count() == 1_166_243
assert G.relationship_types() == ["R"]
assert G.relationship_properties()["R"] == []
2.1.2. 异构图
这些图是异构的,因此根据定义,它们将具有多个节点标签和关系类型。这些标签和类型将在图投影中根据其在原始数据集中的名称来命名。此外,投影出的图还将具有:
-
最多三个表示数据集拆分的不相交节点标签:“Train”、“Valid” 和 “Test”。这意味着节点可能具有多个标签
-
目标预测节点上的 “classLabel” 属性,由单个数字表示
-
如果数据集提供,则部分或全部节点上都有一个节点属性 “features”,由数字数组表示
让我们看一个加载并检查这些数据集之一的示例
G = gds.graph.ogbn.load("ogbn-mag")
assert G.name() == "ogbn-mag"
assert G.node_count() == 1_939_743
assert set(G.node_labels()) == {
"Train",
"Test",
"Valid",
"institution",
"field_of_study",
"paper",
"author",
}
assert G.node_properties()["paper"] == ["features", "classLabel"]
assert G.node_properties()["institution"] == []
assert G.relationship_count() == 21_111_007
assert G.relationship_types() == ["cites", "writes", "affiliated_with", "has_topic"]
2.2. OGBL 图
用于链接属性预测的数据集。
2.2.1. 同构图
这些图用于链接预测。当投影到服务器端 GDS 时,它们将具有:
-
所有节点共用一个节点标签 “N”
-
最多六个表示数据集拆分的不相交关系类型:“TRAIN_POS”、“TRAIN_NEG”、“VALID_POS”、“VALID_NEG”、“TEST_POS”、“TEST_NEG”
-
如果数据集提供,则所有节点上都有一个节点属性 “features”,由数字数组表示
让我们看一个加载并检查这些数据集之一的示例
G = gds.graph.ogbl.load("ogbl-ddi")
assert G.name() == "ogbl-ddi"
assert G.node_count() == 4_267
assert G.node_labels() == ["N"]
assert G.node_properties()["N"] == []
assert G.relationship_count() == 1_334_889 + 197_481 # Positive + negative counts
assert G.relationship_types() == ["TRAIN_POS", "VALID_POS", "VALID_NEG", "TEST_POS", "TEST_NEG"]
|
ogbl-wikikg2 根据 OGB API 是一个同构数据集,但它有多种关系类型。因此,我们以与异构数据集相同的方式加载它。例如,我们将关系名称加上数据集拆分类型的后缀(见下文)。另请注意,由于该特定数据集中的负关系数量非常大,因此只会加载正关系。 |
2.2.2. 异构图
这些是用于知识图谱补全的异构图,因此根据定义,它们将具有多个节点标签和关系类型。节点标签将在图投影中根据其在原始数据集中的名称命名。作为对原始数据集命名的补充,关系类型名称将加上后缀(下划线加上数据集拆分中出现的集合类型:“TRAIN”、“VALID” 或 “TEST”)。
此外,投影出的图还将具有:
-
所有关系上的 “classLabel” 属性,由单个非负整数表示。此整数与原始数据集的关系类型一一对应
-
如果数据集提供,则部分或全部节点上都有一个节点属性 “features”,由数字数组表示
让我们看一个加载并检查这些数据集之一的示例
G = gds.graph.ogbl.load("ogbl-biokg")
assert G.name() == "ogbl-biokg"
assert G.node_count() == 93_773
assert G.node_labels() == ["disease", "protein", "drug", "sideeffect", "function"]
assert G.node_properties()["protein"] == []
assert G.relationship_count() == 5_088_434
# For each of the train, valid and test sets: number of rel types
assert len(G.relationship_types()) == 51 * 3
assert G.relationship_properties()["drug-drug_polycystic_ovary_syndrome_TRAIN"] == ["classLabel"]