# 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` 记录,或按以下核心依赖手动安装: ```bash # Python 3.10 pip install numpy pandas scipy scikit-learn lightgbm xgboost \ torch torch-geometric gensim node2vec networkx ``` ### 3.2 快速验证最终结果(只读) ```bash 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 复现最终高阶堆叠方法(⚠️ 依赖缺失,当前可能不可运行) ```bash 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 集成(⚠️ 权重缺失) ```bash 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 风格数据划分 | --- ## 六、建议阅读顺序(熟悉项目) 1. `README.md` —— 全局概览与复现命令 2. `data_and_docs/dataset.md` + `project_description.md` —— 任务与数据定义 3. `notes/experiment_history.md` —— 完整方法演进史(强烈推荐) 4. `reports/final_report.md` —— 最终方案与结论 5. `reports/preliminary_report.md` + `exploration_summary.md` —— 早期探索