WORKSPACE STATUS — CS3319 Project 2 Final Deliverable
本文件由代码仓库快速勘察生成,用于帮助后续开发者快速熟悉本目录。 最后更新:2026-06-17
一、项目简介
1.1 项目定位
本项目是 CS3319 推荐系统课程(Project 2)的最终交付物。
- 业务目标:构建学术论文阅读推荐系统——在学术平台上为学者推荐其可能感兴趣/应阅读的论文。
- 建模方式:形式化为**异构学术网络中的链路预测(Link Prediction)**问题。
- 网络结构:
- 节点:作者(author,0–6610)、论文(paper,0–79936)
- 边:作者-论文阅读/引用关系(二部图)、作者-作者合著关系(无向)、论文-论文引用关系(有向)
- 预测任务:对测试集中的每个
(author, paper)对,输出1(推荐)/0(不推荐)。 - 评估指标:Public Leaderboard F1。
- 最佳确认成绩:Public F1 = 0.96626
- 方法:rich content + 7 个随机游走块 + 有向高阶引用传播 + LightGBM,rank top 50% 决策。
1.2 核心技术栈
- 语言:Python 3.10
- 数据处理:
numpy、pandas、scipy - 传统机器学习:
scikit-learn、lightgbm、xgboost - 深度学习 / GNN:
torch、torch-geometric - 图嵌入 / 随机游走:
gensim、node2vec、networkx - 核心模型族:LightGCN 风格异构图卷积推荐器(BPR loss + hard negatives),最终方案为多源特征 + LightGBM 二阶段堆叠。
1.3 数据来源
数据由 Acemap group 提供,采集自 GeoScience 领域顶刊:
- 6,611 位作者、79,937 篇论文及其引用信息。
- 论文节点附带预训练特征
feature.pkl。
二、目录结构解析
26H1_cs3319_final_deliverable/
├── README.md 项目总览、最佳成绩、复现命令
├── WORKSPACE_STATUS.md 本文件(项目现状日志)
│
├── code/ 核心:全部训练与提交生成脚本(详见第五节)
│
├── data_and_docs/ 官方数据 + 课程文档
│ ├── bipartite_train_ann.txt 训练集二部网络(author-paper)
│ ├── bipartite_test_ann.txt 测试集待预测对
│ ├── author_file_ann.txt 作者合著网络(无向)
│ ├── paper_file_ann.txt 论文引用网络(有向)
│ ├── feature.pkl 论文预训练特征(约 156 MB)
│ ├── dataset.md / project_description.md / advice.md 数据/项目说明
│ ├── proposal.md 开题提案
│ ├── references.md 参考文献
│ ├── project_evaluation.md 评估说明
│ ├── project-example-2026-pygver.ipynb 官方示例 Notebook(PyG 版)
│ └── project2_ recmendation systems.pdf 课程项目书
│
├── checkpoints/ LightGCN 模型权重(⚠️ 当前为空,见第四节)
│ ├── extra_models/
│ └── final_ens6/
│
├── cached_scores/ 早期缓存的分数/模型
│ ├── lgb_model.pkl / lgb_v2_model.pkl
│ ├── test_bpr_cos.npy / test_bpr_dot.npy
│ ├── test_lgb_scores.npy / test_lgb_v2_scores.npy
│ ├── test_known_mask.npy
│ ├── dot_full/
│ └── large_ensemble/
│
├── validation_runs/ 验证运行结果
│ ├── dynamic_summary.csv
│ ├── stack_ratio_analysis.csv
│ ├── stack_threshold_summary.csv
│ ├── dynamic_seed202/ (⚠️ 仅目录壳,内容缺失)
│ └── feature_cache/ (⚠️ 仅目录壳,内容缺失)
│
├── submissions/ 已确认的提交文件
│ ├── sub_ens6_t0.35.csv
│ ├── sub_ens6_t0.36.csv ← 纯 LightGCN 路线最佳(公开 0.93044)
│ └── sub_ens6_t0.37.csv
│
├── reports/ 报告
│ ├── preliminary_report.md
│ ├── exploration_summary.md
│ └── final_report.md
│
├── notes/
│ └── experiment_history.md 完整实验历史(10 个阶段)
│
└── manifests/ 原始传输包的文件清单
├── package_manifest.txt 完整交付包文件+大小清单
├── final_deliverable_filelist.tsv
├── home_artifacts_manifest.txt
└── key_files_sha256.txt
三、运行与配置
3.1 环境配置(⚠️ 配置文件当前缺失)
README 引用的环境文件位于 env/ 目录:
env/environment-cs3319.yml
env/requirements-minimal.txt
注意:本目录下 env/ 文件夹不存在(本副本为精简包,详见第四节)。如需重建环境,可参照 manifests/package_manifest.txt 与 manifests/home_artifacts_manifest.txt 中的 conda-list-cs3319.txt 记录,或按以下核心依赖手动安装:
# Python 3.10
pip install numpy pandas scipy scikit-learn lightgbm xgboost \
torch torch-geometric gensim node2vec networkx
3.2 快速验证最终结果(只读)
cd cs3319_final_deliverable
# 查看最终验证指标(注:依赖 validation_runs/dynamic_seed202/,当前缺失)
cat validation_runs/dynamic_seed202/high_order_graph_stack/validation_summary.csv
# 查看最终提交生成摘要(注:同上,当前缺失)
cat validation_runs/dynamic_seed202/high_order_graph_stack/submission_summary.csv
预期关键验证行(README 记录):
rich_rw7_highorder_directed validation F1 = 0.966873736337297
3.3 复现最终高阶堆叠方法(⚠️ 依赖缺失,当前可能不可运行)
python code/high_order_graph_stack.py \
--package-root . \
--split-seed 202 \
--seed 202 \
--n-splits 5 \
--make-submission
依赖前提:需要 validation_runs/dynamic_seed202/(OOF/test 分数、随机游走权重)与 validation_runs/feature_cache/(高阶/富内容特征)。当前两者内容均缺失,直接运行大概率会因找不到输入文件而失败。
3.4 复现早期 6 模型 LightGCN 集成(⚠️ 权重缺失)
python code/generate_ens6_submission.py \
--package-root . \
--device cuda:0 # 或 cpu
依赖前提:需要 checkpoints/final_ens6/model_lgcn_*.pt。当前该目录为空,无法直接运行。
四、当前状态与进度
4.1 开发阶段(已完成,据 notes/experiment_history.md)
项目经历了 10 个实验阶段,可归为四条主线:
| 阶段 | 方法 | 代表脚本 | 结果 |
|---|---|---|---|
| A. GNN 基线 | 异构 GNN(SAGEConv/HeteroMeanConv + BCE/BPR) | run_baseline.py、run_improved.py、run_v2.py |
验证 F1 ≈ 0.885–0.92 |
| B. LightGCN 主线 | 原生 LightGCN + BPR + hard negatives + 多 seed 集成 | run_final.py、run_lgcn_final.py、generate_ens6_submission.py |
公开 0.93044 |
| C. 特征模型 | LightGBM 结构特征 / BPR-MF / 随机游走 | run_graph_features.py、extra_score_sources_ablation.py |
公开 0.95760–0.96252 |
| D. 高阶堆叠(最终) | rich content + 7 RW 块 + 高阶引用传播 + LightGBM | high_order_graph_stack.py |
公开 0.96626 |
最终方法:LightGBM 二阶段堆叠,特征包括 LightGCN 分数/排名、图与元路径特征、内容余弦相似度、BPR-MF、富作者内容画像、7 个 DeepWalk/Node2Vec 块、随机游走一致性、高阶引用传播(A-P-P^k、A-A-P-P^k 等)。决策规则为 rank top 50%(而非概率阈值,更鲁棒地应对验证-测试分布偏移)。
4.2 ⚠️ 仓库当前状态(重要)
1) 非 Git 仓库
- 本目录
.git不存在,无法查看分支、未提交改动或提交历史。 - 所有版本管理信息不可用,无法通过 git 追溯变更。
2) 精简/部分副本
与 README 及 manifests/package_manifest.txt 描述的完整交付包相比,本目录缺失多项关键产物:
| 缺失项 | 影响 |
|---|---|
env/(环境配置目录) |
无法直接还原 conda/pip 环境 |
checkpoints/extra_models/、checkpoints/final_ens6/(权重 .pt) |
无法复现任何 LightGCN 推理/集成 |
validation_runs/dynamic_seed202/(OOF/test 分数、RW 权重、最终提交) |
无法复现/验证最终高阶堆叠方法 |
validation_runs/feature_cache/(高阶/富内容特征) |
同上 |
submissions/ 中 sub_final3_*、sub_noforce_*、sub_forced_* |
早期对比提交缺失 |
结论:当前目录本质是代码 + 数据 + 文档 + 部分早期缓存的快照,不包含最终方法所需的权重与缓存特征,因此无法直接复现最终成绩 0.96626。如需完整复现,需从原始传输包(参见 manifests/)重新获取缺失的大体积产物。
4.3 未完成 / 受限事项
- 恢复
env/环境配置文件,或补全依赖清单以便重建运行环境。 - 恢复
checkpoints/下的 LightGCN 权重,以支持推理/集成复现。 - 恢复
validation_runs/dynamic_seed202/与feature_cache/,以支持最终高阶方法的复现与验证。 - (可选)初始化 Git 仓库以启用版本管理:
git init。
五、核心脚本速查表
训练 / 基线类
| 脚本 | 用途 |
|---|---|
run_baseline.py |
官方 Notebook 基线(HeteroMeanConv + cosine + 阈值搜索) |
run_improved.py |
改进异构 GNN(HeteroConv+SAGEConv + 残差/LN + MLP 解码 + hard negatives) |
run_v2.py |
SAGEConv + BPR 排序变体 |
run_final.py |
原生 LightGCN 最终版(早期) |
run_lgcn_final.py |
原生 LightGCN(主线稳定版) |
run_lgcn_v2.py |
L2 归一化 LightGCN 变体(效果劣于原生) |
run_graph_features.py |
手工图特征 + LightGBM |
run_ultimate.py |
Ultimate 综合实验 |
compare_gnn.py |
GNN 架构搜索(可学习层权/GAT/SAGE/Deep/Wide LightGCN) |
动态验证 / 集成训练类(README 核心)
| 脚本 | 用途 |
|---|---|
train_val_lgcn_ensemble.py |
动态验证 LightGCN 训练与分数生成(核心) |
train_dynamic_feature_fusion.py |
动态特征融合训练 |
train_val_mf_bpr.py |
MF + BPR 训练 |
train_val_sage_bpr.py |
SAGE + BPR 训练 |
train_val_hgt_bpr.py |
HGT + BPR 训练 |
evaluate_val_checkpoints.py |
验证 checkpoint 评估 |
消融 / 特征构建类
| 脚本 | 用途 |
|---|---|
extra_score_sources_ablation.py |
Content-mean-cos / BPR-MF / ranker 分数源消融 |
node2vec_deepwalk_ablation.py |
DeepWalk / Node2Vec 初始消融 |
randomwalk_systematic_ablation.py |
系统随机游走特征实验(产出最终 7 块) |
randomwalk_ensemble_ablation.py / randomwalk_one_ablation.py |
RW 集成/单块消融 |
content_rich_ablation.py |
Rich feature.pkl 内容特征构建 |
post95_ablation.py |
Post95 消融 |
high_order_model_compare.py |
高阶模型对比 |
提交生成类
| 脚本 | 用途 |
|---|---|
high_order_graph_stack.py |
最终:高阶引用传播实验 + 提交生成(产出 0.96626) |
generate_ens6_submission.py |
6 模型 LightGCN 集成提交 |
generate_post95_submission.py |
Post95 LightGCN + 图/内容特征提交 |
generate_extra_bprmf_submission.py |
BPR-MF 提交 |
generate_node2vec_deepwalk_submission.py |
DeepWalk/Node2Vec 提交 |
generate_randomwalk_ensemble_submission.py |
随机游走集成提交(喂入最终阶段) |
generate_randomwalk_single_submission.py |
单随机游走提交 |
generate_content_rich_submission.py |
Content-rich 提交 |
generate_dot_submission.py |
Dot 内积提交 |
generate_large_ensemble_submission.py |
大型集成提交 |
generate_conservative_rw_blends.py |
保守随机游走混合 |
堆叠 / 校准 / 搜索类
| 脚本 | 用途 |
|---|---|
rich_randomwalk_stack.py |
Rich 随机游走堆叠 |
score_level_meta_stack.py |
分数级元堆叠 |
stack_rank_calibration.py |
堆叠排序校准 |
error_group_calibration.py |
错误分析/阈值扫描/分组校准/边界模型 |
search_dynamic_fusion.py / search_val_fusion.py |
动态/验证融合搜索 |
make_notebook_style_split.py |
Notebook 风格数据划分 |
六、建议阅读顺序(熟悉项目)
README.md—— 全局概览与复现命令data_and_docs/dataset.md+project_description.md—— 任务与数据定义notes/experiment_history.md—— 完整方法演进史(强烈推荐)reports/final_report.md—— 最终方案与结论reports/preliminary_report.md+exploration_summary.md—— 早期探索