数据集
为了支持快速方便地开始使用 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. 空手道俱乐部
一个由 Zachary 引入的著名社交网络。默认情况下,空手道俱乐部以 undirected = False
的方式加载。
名称 | 值 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3. IMDB
一个异构图,用于对节点分类或链接预测模型进行基准测试,例如 异构图注意力网络、MAGNN:用于异构图嵌入的元路径聚合图神经网络 和 图 Transformer 网络。该图包含演员 (Actors)、导演 (Directors)、电影 (Movies)(和未分类电影 (UnclassifiedMovies))作为节点,以及演员与他们参演的电影之间的关系,以及导演与他们执导的电影之间的关系。
默认情况下,IMDB 数据集以 undirected = True
的方式加载。如果以有向方式加载,其关系数量将减半。
名称 | 值 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.4. LastFM
一个异构图,用于对链接预测模型进行基准测试,例如由 MAGNN:用于异构图嵌入的元路径聚合图神经网络使用。数据和许可来自 HetRec 2011。原始数据来自 LastFM。
该图包含用户 (User) 和艺术家 (Artists) 作为节点,每个节点都有一个 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 数据集的便捷方法。为了使用这些方法,必须为 graphdatascience
库安装 OGB 支持。
pip install graphdatascience[ogb]
公开 OGB 数据集加载功能的两个方法是
这些方法都返回一个 Graph
对象,并接受四个参数
名称 | 类型 | |
---|---|---|
|
|
OGB 数据集的名称 |
|
|
用于存储下载的 OGB 数据集的可选路径 |
|
|
创建的图的可选名称。默认为 |
|
|
要使用的可选线程数 |
OGB 加载方法在底层使用 OGB 库。因此,在加载新的 OGB 数据集时,数据集将从互联网下载,因此需要互联网连接。但是,如果数据集已存在于 |
所有 OGB 数据集都以 |
如果目标 GDS 服务器具有企业许可证并启用了 Arrow Flight 服务器,则 OGB 数据集加载性能将非常好。否则,性能会差很多。加载将花费数倍的时间,并需要更多的内存。事实上,可能需要增加托管 GDS 的 Neo4j 数据库的最大堆大小,以确保加载有足够的内存。 |
目前,加载方法不支持加载 OGB 数据集中包含的关系特征。当加载包含关系特征的数据集时,这些特征将不包含在投影中,并且会发出警告。 |
根据数据集和任务的不同,投影到服务器端 GDS 中的图会略有不同。
2.1. OGBN 图
用于节点属性预测的数据集。
2.1.1. 同构图
这些图在投影到服务器端 GDS 时,将具有
-
最多三个不相交的节点标签,表示数据集划分:“训练”、“验证”和“测试”
-
所有关系的一种关系类型“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. 异构图
这些图是异构的,因此根据定义将具有多个节点标签和关系类型。这些标签和类型将根据其在原始数据集中的名称在图投影中命名。此外,投影的图将具有
-
最多三个不相交的节点标签,表示数据集划分:“训练”、“验证”和“测试”。这意味着节点可能具有多个标签
-
目标预测节点上的“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"]
根据 OGB API,ogbl-wikikg2 是一个同构数据集,但它具有多种关系类型。因此,我们以与异构数据集相同的方式加载它。例如,我们在关系后缀加上数据集划分类型(见下文)。另请注意,由于此特定数据集中的负关系数量非常大,因此仅加载正关系。 |
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"]
2.3. 社区版限制
对于 GDS 社区版用户,大型图的性能可能会受到影响。与数据库的套接字连接可能会超时。如果发生这种情况,一个可能的解决方法是修改服务器配置 server.bolt.connection_keep_alive
或 server.bolt.connection_keep_alive_probes
。但是,请注意其副作用,例如真正的连接问题现在需要更长时间才能被检测到。