数据集

为了支持快速方便地开始使用 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. Cora 图统计信息
名称

name

cora

节点数量

2_708

关系数量

5_429

节点标签

['Paper']

关系类型

['CITES']

节点属性

Paper: [features, subject]

关系属性

CITES: []

1.2. 空手道俱乐部

一个由 Zachary 引入的著名社交网络。默认情况下,空手道俱乐部以 undirected = False 的方式加载。

表 2. 空手道俱乐部图统计信息
名称

name

karate_club

节点数量

34

关系数量

78

节点标签

['Person']

关系类型

['KNOWS']

节点属性

Person: []

关系属性

KNOWS: []

1.3. IMDB

一个异构图,用于对节点分类或链接预测模型进行基准测试,例如 异构图注意力网络MAGNN:用于异构图嵌入的元路径聚合图神经网络图 Transformer 网络。该图包含演员 (Actors)、导演 (Directors)、电影 (Movies)(和未分类电影 (UnclassifiedMovies))作为节点,以及演员与他们参演的电影之间的关系,以及导演与他们执导的电影之间的关系。

默认情况下,IMDB 数据集以 undirected = True 的方式加载。如果以有向方式加载,其关系数量将减半。

表 3. IMDB 图统计信息
名称

name

imdb

节点数量

12_772

关系数量

37_288

节点标签

['Movie', 'Actor', 'Director', 'UnclassifiedMovie']

关系类型

['ACTED_IN', 'DIRECTED_IN']

节点属性

Movie: [plot_keywords, genre], Actor: [plot_keywords], Director: [plot_keywords], UnclassifiedMovie: [plot_keywords]

关系属性

ACTED_IN: [], DIRECTED_IN: []

1.4. LastFM

一个异构图,用于对链接预测模型进行基准测试,例如由 MAGNN:用于异构图嵌入的元路径聚合图神经网络使用。数据和许可来自 HetRec 2011。原始数据来自 LastFM

该图包含用户 (User) 和艺术家 (Artists) 作为节点,每个节点都有一个 rawId 字段,对应于原始数据中的 ID。例如,可以使用 rawId 通过参考 HetRec'11 .dat 文件来检查艺术家姓名。

有三种类型的关系

  • IS_FRIEND 存在于 User 节点之间,表示用户对用户的友情关系。

  • LISTEN_TO 存在于 UserArtist 节点之间,表示用户听过的艺术家。

  • weight 属性表示用户听该艺术家的次数。

  • TAGGED 存在于 UserArtist 节点之间,表示用户已标记的艺术家。

  • tagID 属性表示一个流派

  • daymonthyear 属性表示标签创建的时间

  • timestamp 表示自 EPOCH 以来的毫秒数,与日期相同

请注意,用户可以使用不同的 tagID 多次标记同一位艺术家。

默认情况下,LastFM 数据集以 undirected = True 的方式加载。如果以有向方式加载,其关系数量将减半。

表 4. 默认 LastFM 图统计信息
名称

name

lastfm

节点数量

19_914

关系数量

584_060

节点标签

['Artist', 'User']

关系类型

['TAGGED', 'LISTEN_TO', 'IS_FRIEND']

节点属性

Artist: [rawId], User: [rawId]

关系属性

TAGGED: [year, month, day, tagID, timestamp], LISTEN_TO: [weight], IS_FRIEND: []

2. 来自 Open Graph Benchmark 的数据集

该库中提供了加载 Open Graph Benchmark 数据集的便捷方法。为了使用这些方法,必须为 graphdatascience 库安装 OGB 支持。

pip install graphdatascience[ogb]

公开 OGB 数据集加载功能的两个方法是

这些方法都返回一个 Graph 对象,并接受四个参数

表 5. OGB 数据集加载方法参数
名称 类型

dataset_name

str

OGB 数据集的名称

dataset_root_path

str = "./dataset"

用于存储下载的 OGB 数据集的可选路径

graph_name

Optional[str]

创建的图的可选名称。默认为 dataset_name

concurrency

int = 4

要使用的可选线程数

OGB 加载方法在底层使用 OGB 库。因此,在加载新的 OGB 数据集时,数据集将从互联网下载,因此需要互联网连接。但是,如果数据集已存在于 dataset_root_path 中,则不需要互联网连接。

所有 OGB 数据集都以 DIRECTED 方向加载到 GDS 中。然而,有些数据集在某种意义上是实际上无向的,即对于每个关系,在相同节点之间也存在一个反向关系。Open Graph Benchmark 网站告知我们哪些数据集属于这种情况。如果您希望投影的图在 Neo4j GDS 的意义上是 UNDIRECTED 的,您可以使用 gds.graph.relationships.toUndirected 进行修改。

如果目标 GDS 服务器具有企业许可证并启用了 Arrow Flight 服务器,则 OGB 数据集加载性能将非常好。否则,性能会差很多。加载将花费数倍的时间,并需要更多的内存。事实上,可能需要增加托管 GDS 的 Neo4j 数据库的最大堆大小,以确保加载有足够的内存。

目前,加载方法不支持加载 OGB 数据集中包含的关系特征。当加载包含关系特征的数据集时,这些特征将不包含在投影中,并且会发出警告。

根据数据集和任务的不同,投影到服务器端 GDS 中的图会略有不同。

2.1. OGBN 图

用于节点属性预测的数据集。

2.1.1. 同构图

这些图在投影到服务器端 GDS 时,将具有

  • 最多三个不相交的节点标签,表示数据集划分:“训练”、“验证”和“测试”

  • 所有关系的一种关系类型“R”

  • 所有节点上的“classLabel”属性,由单个数字表示

  • 如果数据集提供,一个节点属性“features”,由所有节点的数字数组表示

让我们看一个加载和检查这些数据集的示例

加载 'ogbn-arxiv' 数据集的示例
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”,由部分或所有节点的数字数组表示

让我们看一个加载和检查这些数据集的示例

加载 'ogbn-mag' 数据集的示例
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”,由所有节点的数字数组表示

让我们看一个加载和检查这些数据集的示例

加载 'ogbl-ddi' 数据集的示例
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”,由部分或所有节点的数字数组表示

让我们看一个加载和检查这些数据集的示例

加载 'ogbl-biokg' 数据集的示例
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_aliveserver.bolt.connection_keep_alive_probes。但是,请注意其副作用,例如真正的连接问题现在需要更长时间才能被检测到。