HTGformer(Heterogeneous Temporal Graph Transformer)复现/实验代码:将异质图按时间快照组织,并使用 本地 LLM(LLaMA3/Qwen 等) 生成“节点类型语义嵌入”,用于节点级预测任务(节点分类/链路预测)。
说明
- 本仓库是自己读到一篇论文《HTGformer: Heterogeneous Temporal Graph Transformer》发现没有源码,根据自己对论文的理解复现了代码,只在OGBN-MAG数据上进行了测试,原文链接附上:https://doi.org/10.1145/3726302.3730209
scripts/preprocess.py:将原始数据转换为时间快照(snapshot_{t}.pt)scripts/train.py:基础训练脚本(单次训练)scripts/experiment.py:完整实验脚本(多次运行、早停、节点分类/链路预测等)scripts/evaluate.py:评估脚本(当前包含 dummy label 的占位逻辑,更多用于检查流程)data/:快照格式与数据加载models/、trainer/、utils/:模型与训练/评估逻辑
建议使用 Conda / venv(Python 3.9+)。
- 安装基础依赖
pip install -r requirements.txt- 安装 PyTorch(按你的 CUDA 版本选择)
# 示例:CUDA 11.8
pip install --index-url https://download.pytorch.org/whl/cu118 torch torchvision torchaudio- 可选:安装 PyG 相关扩展(如你使用 OGBN-MAG/torch_geometric)
注意:
torch-scatter/torch-sparse/torch-cluster必须与torch/CUDA 匹配,否则会出现undefined symbol。
python scripts/preprocess.py --dataset ogbn-mag --num_snapshots 10生成目录(示例):
data/processed/ogbn-mag/metadata.ptdata/processed/ogbn-mag/snapshots/snapshot_0.pt ... snapshot_9.pt
python scripts/train.py \
--config configs/ogbn_mag.yaml \
--epochs 100 \
--gpu 0 \
--llm_model /path/to/your/local_llm \
--force_regenerate说明:
--llm_model:本地 LLM 路径或 HuggingFace 兼容模型名(默认见llm/llm_encoder.py)- 类型嵌入会缓存到
llm/cache/,重复训练可复用(除非--force_regenerate)
scripts/experiment.py 集成了多次运行/早停/输出日志等,适合复现实验与做消融。
python scripts/experiment.py --config configs/ogbn_mag.yaml --gpu 0 --epochs 500(如需后台运行)
nohup python scripts/experiment.py --config configs/ogbn_mag.yaml --gpu 0 --epochs 500 \
> log_$(date +%Y%m%d_%H%M%S).log 2>&1 &
disown见 DATASETS.md,当前内置:
ogbn-mag(原论文数据集,带年份,可按 2010–2019 生成快照)
每个 snapshot_{t}.pt(字典)包含:
node_features:{node_type: FloatTensor[num_nodes, feature_dim]}adjacency:{relation: LongTensor[2, num_edges]}labels(可选):{target_node_type: LongTensor[num_nodes]}
更多细节见 DATASETS.md / NEW_DATASET_GUIDE.md。
按 NEW_DATASET_GUIDE.md 的步骤:
- 在
scripts/preprocess.py添加preprocess_your_dataset() - 在
data/dataset_loader.py:get_dataset_config()注册元信息 - 新建
configs/your_dataset.yaml
如你有文本日志并希望同步到 W&B,可用:
python scripts/upload_log_to_wandb.py \
--logfile path/to/your.log \
--project your_project \
--entity your_entity- 导入 PyG 扩展报
undefined symbol:通常是torch与torch-scatter/torch-sparse/torch-cluster版本不匹配;请按你的torch==...+cuXXX重新安装匹配 wheel。