SimGNN
- 简介:SimGNN 是一个深度学习模型,专门用于计算图之间的相似性。虽然它通常需要一些数据预处理步骤,但可以找到预训练的版本来使用。
- 使用库:SimGNN 有公开的实现和一些预训练模型,可以在 GitHub 等平台找到相关资源。
- 使用方法:加载预训练的 SimGNN 模型并输入图数据,模型会输出图相似度分数。
安装和使用 SimGNN
1. 安装 SimGNN
使用以下命令克隆 SimGNN 仓库并进入项目目录:
git clone https://github.com/benedekrozemberczki/SimGNN.git
cd SimGNN
2. 安装依赖
SimGNN 依赖于多个 Python 包。您可以使用以下命令安装所需的依赖:
pip install torch torchvision torchaudio
pip install networkx
pip install numpy
pip install scipy
pip install scikit-learn
pip install matplotlib
pip install tqdm
安装完成后,您可以通过以下命令验证是否成功安装了所有依赖库:
python -c "import torch, networkx, numpy, scipy, sklearn, matplotlib, tqdm"
如果没有报错,说明安装成功。
3. Readme.md文件阅读
阅读 Readme.md 文件,查看数据集的格式说明,按照要求进行数据集的准备和运行。
SimGNN
SimGNN: 一种快速图相似度计算的神经网络方法 (WSDM 2019) 的 PyTorch 实现。
摘要
图相似度搜索是最重要的基于图的应用之一,例如查找与查询化合物最相似的化学化合物。图相似度/距离计算,如图编辑距离(GED)和最大公共子图(MCS),是图相似度搜索和许多其他应用的核心操作,但实际上计算代价非常高。受到最近神经网络方法在节点或图分类等多个图应用中取得成功的启发,我们提出了一种新颖的基于神经网络的方法来解决这一经典而具有挑战性的图问题,旨在减轻计算负担,同时保持良好的性能。提出的方法称为 SimGNN,结合了两种策略。首先,我们设计了一个可学习的嵌入函数,将每个图映射到嵌入向量中,提供了图的全局摘要。提出了一种新颖的注意力机制来强调与特定相似性度量相关的重要节点。其次,我们设计了一种成对节点比较方法,以补充图级嵌入中精细的节点级信息。我们的模型在未见过的图上具有更好的泛化能力,并且在最坏的情况下,运行时间随着两个图中节点数量的平方成比例。以 GED 计算为例,三个实际图数据集上的实验结果证明了我们方法的有效性和高效性。具体而言,与一系列基线(包括多种 GED 计算的近似算法和现有的图神经网络模型)相比,我们的模型实现了较小的错误率和显著的时间缩减。我们的研究表明,SimGNN 为未来图相似度计算和图相似度搜索的研究提供了新的方向。
本代码库提供了论文中描述的 SimGNN 的 PyTorch 实现:
需求
代码库使用 Python 3.5.2 实现。开发中使用的包版本如下:
networkx 2.4
tqdm 4.28.1
numpy 1.15.4
pandas 0.23.4
texttable 1.5.0
scipy 1.1.0
argparse 1.1.0
torch 1.1.0
torch-scatter 1.4.0
torch-sparse 0.4.3
torch-cluster 1.4.5
torch-geometric 1.3.2
torchvision 0.3.0
scikit-learn 0.20.0
数据集
代码从输入文件夹中读取用于训练的图对,每对图存储为一个 JSON 文件。用于测试的图对也存储为 JSON 文件。每个节点 ID 和节点标签必须从 0 开始索引。字典的键存储为字符串,以便实现 JSON 序列化。
每个 JSON 文件的键值结构如下:
{"graph_1": [[0, 1], [1, 2], [2, 3], [3, 4]],
"graph_2": [[0, 1], [1, 2], [1, 3], [3, 4], [2, 4]],
"labels_1": [2, 2, 2, 2, 2],
"labels_2": [2, 3, 2, 2, 2],
"ged": 1}
graph_1 和 graph_2 键具有描述连接结构的边列表值。同样,labels_1 和 labels_2 键以列表形式存储每个节点的标签——列表中的位置对应节点标识符。ged 键的值是表示图对的原始图编辑距离的整数。
选项
训练 SimGNN 模型由 src/main.py 脚本处理,该脚本提供以下命令行参数。
输入和输出选项
--training-graphs STR 训练图文件夹。 默认值为 `dataset/train/`。
--testing-graphs STR 测试图文件夹。 默认值为 `dataset/test/`。
模型选项
--filters-1 INT 第一层 GCN 的滤波器数量。 默认值为 128。
--filters-2 INT 第二层 GCN 的滤波器数量。 默认值为 64。
--filters-3 INT 第三层 GCN 的滤波器数量。 默认值为 32。
--tensor-neurons INT 张量网络层的神经元数量。 默认值为 16。
--bottle-neck-neurons INT 瓶颈层神经元数量。 默认值为 16。
--bins INT 直方图桶的数量。 默认值为 16。
--batch-size INT 每批处理的图对数量。 默认值为 128。
--epochs INT SimGNN 的训练轮数。 默认值为 5。
--dropout FLOAT dropout 率。 默认值为 0.5。
--learning-rate FLOAT 学习率。 默认值为 0.001。
--weight-decay FLOAT 权重衰减。 默认值为 10^-5。
--histogram BOOL 包含直方图特征。 默认值为 False。
示例
以下命令用于训练神经网络并在测试集上进行评分。使用默认数据集训练 SimGNN 模型。
python src/main.py
使用 512 的批量大小训练 100 轮的 SimGNN 模型。
python src/main.py --epochs 100 --batch-size 512
使用直方图特征训练 SimGNN 模型。
python src/main.py --histogram
使用直方图特征和更大的桶数量训练 SimGNN。
python src/main.py --histogram --bins 32
增加学习率和 dropout。
python src/main.py --learning-rate 0.01 --dropout 0.9
使用 --save-path 参数保存训练好的模型。
python src/main.py --save-path /path/to/model-name
使用 --load-path 参数加载预训练模型;请注意,加载后模型将直接使用,不会进行训练。
python src/main.py --load-path /path/to/model-name