| % !TeX program = xelatex |
| \documentclass[11pt,a4paper]{article} |
|
|
| \usepackage{xeCJK} |
| \usepackage{fontspec} |
| \usepackage[a4paper,margin=2.35cm]{geometry} |
| \usepackage{graphicx} |
| \usepackage{booktabs} |
| \usepackage{longtable} |
| \usepackage{array} |
| \usepackage{amsmath,amssymb,bm} |
| \usepackage{xcolor} |
| \usepackage{tcolorbox} |
| \usepackage{enumitem} |
| \usepackage{hyperref} |
| \usepackage{fancyhdr} |
| \usepackage{listings} |
| \usepackage{caption} |
| \usepackage{subcaption} |
| \usepackage{float} |
|
|
| \IfFontExistsTF{SimSun}{ |
| \setCJKmainfont{SimSun} |
| \setCJKsansfont{Microsoft YaHei} |
| \setCJKmonofont{FangSong} |
| }{ |
| \setCJKmainfont[BoldFont=FandolHei-Regular, ItalicFont=FandolKai-Regular]{FandolSong-Regular} |
| \setCJKsansfont[BoldFont=FandolHei-Bold]{FandolHei-Regular} |
| \setCJKmonofont{FandolFang-Regular} |
| } |
|
|
| \graphicspath{{../figures_v2/pdf/}{../figures_v2/png/}} |
|
|
| \definecolor{sjtured}{RGB}{167,32,56} |
| \definecolor{theoryblue}{RGB}{0,51,102} |
| \definecolor{softgreen}{RGB}{29,119,91} |
| \definecolor{graybg}{RGB}{248,249,250} |
| \definecolor{codebg}{RGB}{246,248,250} |
|
|
| \hypersetup{ |
| colorlinks=true, |
| linkcolor=theoryblue, |
| citecolor=theoryblue, |
| urlcolor=sjtured, |
| pdftitle={CS3319 推荐系统项目详细讲义}, |
| pdfauthor={李昭成, 何可} |
| } |
|
|
| \pagestyle{fancy} |
| \fancyhf{} |
| \lhead{\small CS3319 推荐系统项目详细讲义} |
| \rhead{\small Citation-Aware High-Order Graph Recommendation} |
| \cfoot{\small \thepage} |
| \setlength{\headheight}{14pt} |
|
|
| \setlist[itemize]{leftmargin=2em,itemsep=0.25em,topsep=0.25em} |
| \setlist[enumerate]{leftmargin=2.2em,itemsep=0.25em,topsep=0.25em} |
| \captionsetup{font=small,labelfont=bf} |
| \linespread{1.16} |
| \sloppy |
|
|
| \newcommand{\Fone}{\ensuremath{\mathrm{F1}}} |
| \newcommand{\AUC}{\ensuremath{\mathrm{AUC}}} |
| \newcommand{\code}[1]{\texttt{\detokenize{#1}}} |
| \newcommand{\pathcode}[1]{\texttt{\nolinkurl{#1}}} |
| \newcommand{\key}[1]{\textcolor{sjtured}{\textbf{#1}}} |
| \newcommand{\term}[1]{\textcolor{theoryblue}{\textbf{#1}}} |
| \newcommand{\Rmat}{\mathbf{R}} |
| \newcommand{\Cmat}{\mathbf{C}} |
| \newcommand{\Smat}{\mathbf{S}} |
|
|
| \lstdefinestyle{handout}{ |
| basicstyle=\ttfamily\small, |
| backgroundcolor=\color{codebg}, |
| frame=single, |
| rulecolor=\color{black!15}, |
| breaklines=true, |
| columns=fullflexible, |
| keepspaces=true, |
| xleftmargin=0.5em, |
| xrightmargin=0.5em |
| } |
| \lstset{style=handout} |
|
|
| \title{ |
| \vspace{-0.8cm} |
| \textbf{\textcolor{sjtured}{CS3319 推荐系统项目详细讲义}}\\ |
| \large 面向学术论文推荐的引用感知高阶图推荐方法 |
| } |
| \author{李昭成 \quad 何可\\ |
| \small Shanghai Jiao Tong University} |
| \date{\small 详细讲义版:项目背景、架构设计、优化路径与实现说明} |
|
|
| \begin{document} |
| \maketitle |
|
|
| \begin{abstract} |
| 本文档是一份面向汇报准备、项目复盘和代码理解的详细讲义。它不是 5 分钟 PPT 的逐字稿,而是围绕 CS3319 推荐系统竞赛项目给出完整解释:任务为什么可以建模为异构图链接预测,数据为什么困难,系统为什么选择 LightGCN + 多源图特征 + LightGBM OOF 堆叠,而不是盲目堆叠更复杂的 GNN;同时说明内容特征、BPR-MF、DeepWalk/Node2Vec、高阶引用传播、rank cutoff 提交策略分别解决了什么问题。最终系统使用约 259 维特征,在 dynamic seed202 本地验证上达到 \textbf{0.966874 \Fone},public leaderboard 达到 \textbf{0.96626 \Fone}。本文档的重点是解释“性能水平是如何一步步提升的”,并给出可复现的文件路径和命令。 |
| \end{abstract} |
|
|
| \tableofcontents |
| \newpage |
|
|
| \section{如何阅读这份讲义} |
|
|
| 如果目标是快速准备汇报,优先阅读第~\ref{sec:executive}、第~\ref{sec:architecture}、第~\ref{sec:improvement} 和第~\ref{sec:qa} 节。它们对应“项目做了什么、为什么这样做、结果怎么来的、答辩怎么讲”。如果目标是理解实现细节,则重点阅读第~\ref{sec:lgcn} 到第~\ref{sec:highorder} 节,再结合第~\ref{sec:filemap} 的代码文件地图。若目标是复现实验或检查最终提交,则重点看第~\ref{sec:reproduce} 节。 |
|
|
| \begin{tcolorbox}[colback=graybg,colframe=theoryblue,title=一句话总览] |
| 本项目把学术论文推荐任务建模为作者-论文异构图上的链接预测:先用 LightGCN 取得强协同过滤排序信号,再显式加入结构路径、内容语义、BPR-MF、随机游走和高阶引用传播特征,最后用 LightGBM 做 5 折 OOF 堆叠,并通过 rank cutoff 而不是原始概率阈值生成最终提交。 |
| \end{tcolorbox} |
|
|
| \section{执行摘要:最终系统做了什么} |
| \label{sec:executive} |
|
|
| 项目任务来自 CS3319-02 Project 2: Recommendation Systems。官方数据提供作者、论文、作者-论文历史交互、作者-作者合著、论文-论文引用和论文内容向量。测试集包含约 2,047,262 个作者-论文候选对,要求输出二分类推荐标签,评价指标为 \Fone。 |
|
|
| 最终系统的核心结构如下: |
|
|
| \begin{enumerate} |
| \item \term{LightGCN 协同过滤主干}:在作者-论文交互二部图上学习作者和论文 embedding,产出 raw score、global rank、author-wise rank、percentile、多模型 ensemble 分数等强排序特征。 |
| \item \term{显式图结构和 meta-path 特征}:从合著图、引用图、作者历史论文集合和候选论文邻域中构造 A-A-P、A-P-P、A-P-A-P、度数、overlap、Jaccard、局部证据等可解释特征。 |
| \item \term{内容和矩阵分解补充信号}:使用官方 512 维论文内容向量构造作者兴趣画像和 top-k cosine 相似度;同时加入 BPR-MF 分数作为另一种低秩协同过滤视角。 |
| \item \term{DeepWalk / Node2Vec 随机游走特征}:在混合学术图上训练多个随机游走 embedding block,捕捉全局社区接近性和长路径邻近性。 |
| \item \term{引用感知高阶传播特征}:显式计算 \(H_k=\Rmat\Cmat^k\) 和 \(G_k=\Smat\Rmat\Cmat^k\),表达作者本人和合作者历史论文经引用图到达候选论文的高阶可达性。 |
| \item \term{LightGBM OOF stacking}:用 5 折 out-of-fold 方式训练二阶段表格模型,降低二阶段过拟合,并让模型自动学习多源特征的非线性组合。 |
| \item \term{Rank cutoff 提交策略}:由于验证集是人工 1:1 正负样本,概率阈值不宜直接迁移到测试集;最终按分数排序取 top 50\%,并强制 known positives 为 1。 |
| \end{enumerate} |
|
|
| 最终确认结果: |
|
|
| \begin{table}[H] |
| \centering |
| \caption{最终确认结果} |
| \small |
| \begin{tabular}{@{}p{3.2cm}p{5.5cm}p{5.2cm}@{}} |
| \toprule |
| 项目 & 数值或路径 & 说明 \\ |
| \midrule |
| 本地验证 \Fone & 0.966874 & dynamic seed202, rich\_rw7\_highorder\_directed \\ |
| 本地验证 \AUC & 0.994918 & 同一最终模型 \\ |
| Public leaderboard \Fone & 0.96626 & 最终 public-best 提交 \\ |
| 最终特征数 & 259 & LightGBM 二阶段输入维度 \\ |
| 最终提交 & \pathcode{submission_rich_rw7_highorder_directed_r0.500000.csv} & rank top 50\% \\ |
| \bottomrule |
| \end{tabular} |
| \end{table} |
|
|
| \section{问题背景:为什么这是异构图推荐问题} |
| \label{sec:background} |
|
|
| 学术论文推荐不同于普通商品推荐。普通推荐系统常见输入是用户点击、购买、评分和时间序列;而学术论文推荐天然处在一个多关系网络中。作者之间会合著,论文之间会引用,作者历史阅读或写作过的论文代表研究兴趣,候选论文与这些历史论文之间的引用关系反映学术相关性。 |
|
|
| 因此,不能只把这个任务看成“作者是否喜欢某篇论文”的孤立二分类任务。更合理的建模是:在一个由作者节点、论文节点和多种边组成的异构图中,预测作者节点与论文节点之间是否存在目标关系。 |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.88\textwidth]{fig1_task_graph.pdf} |
| \caption{任务图结构示意:作者、论文、作者-论文交互、作者合著和论文引用共同构成异构学术图。} |
| \end{figure} |
|
|
| \subsection{节点与边的语义} |
|
|
| \begin{itemize} |
| \item 作者节点 \(a\in\mathcal{A}\):表示推荐对象。作者过去关联过的论文集合可视为兴趣历史。 |
| \item 论文节点 \(p\in\mathcal{P}\):表示被推荐物品。论文有内容向量,也有引用入度、出度和图邻域。 |
| \item 作者-论文边 \(E_{AP}\):历史正反馈,构成最直接的协同过滤信号。 |
| \item 作者-作者边 \(E_{AA}\):合著关系,代表研究共同体或兴趣邻近性。 |
| \item 论文-论文边 \(E_{PP}\):引用关系,代表知识依赖、主题传播和研究脉络。 |
| \end{itemize} |
|
|
| 如果只使用作者-论文边,模型只能学习“哪些作者和哪些论文共同出现过”。但学术推荐往往需要回答更细的问题:候选论文是否被作者过去的论文引用过?候选论文是否引用了作者研究领域的核心论文?候选论文是否在合作者的研究路径上?这些问题必须通过引用图和合著图表达。 |
|
|
| \subsection{评价指标和建模目标} |
|
|
| 测试候选集合记为 \(\mathcal{Q}\subset \mathcal{A}\times\mathcal{P}\)。模型对每个 pair \((a,p)\) 输出分数 \(s(a,p)\),最终二值化为 \(\hat{y}_{a,p}\in\{0,1\}\)。评价指标是 \Fone: |
|
|
| \[ |
| \Fone=\frac{2\cdot \mathrm{Precision}\cdot \mathrm{Recall}}{\mathrm{Precision}+\mathrm{Recall}}. |
| \] |
|
|
| 这意味着模型不能只追求排序 AUC,也不能只追求概率校准。最终提交必须在 precision 和 recall 之间达到合适平衡。因此,项目后期的一个重点是阈值或比例的选择:模型分数排序能力很强,但验证集概率未必能直接代表测试集概率。 |
|
|
| \section{数据挑战:稀疏、长尾和冷启动} |
| \label{sec:data} |
|
|
| 官方数据包含 6,611 位作者、约 79,937 篇论文和约 2.05M 个测试候选对。图~\ref{fig:sparsity} 展示了关键度分布。作者合著度、论文引用入度、作者-论文交互度均呈现明显长尾:少数作者或论文拥有大量连接,大量节点只有很少边。 |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.95\textwidth]{fig2_dataset_sparsity.pdf} |
| \caption{数据集长尾稀疏结构。低度节点数量大,说明模型必须处理冷启动和弱证据候选。} |
| \label{fig:sparsity} |
| \end{figure} |
|
|
| 长尾结构直接影响模型设计: |
|
|
| \begin{enumerate} |
| \item 对高活跃作者,LightGCN 等协同过滤方法可以从大量历史边中学到稳定 embedding。 |
| \item 对低活跃作者,协同过滤信号弱,需要依赖合作者、内容相似和引用邻域补充。 |
| \item 对高引用论文,简单 popularity 特征容易过拟合,需要归一化以避免所有热门论文都被高估。 |
| \item 对冷门论文,内容向量和高阶路径可能比直接交互更重要。 |
| \end{enumerate} |
|
|
| 这也是为什么最终方案不是单一模型,而是多源证据堆叠:不同证据负责覆盖不同难度区域。 |
|
|
| \section{总体架构设计} |
| \label{sec:architecture} |
|
|
| 最终架构是两阶段系统。第一阶段生成多组候选 pair 特征;第二阶段用 LightGBM 学习这些特征与标签之间的非线性关系。系统图如图~\ref{fig:pipeline}。 |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.96\textwidth]{fig4_method_pipeline.pdf} |
| \caption{最终两阶段堆叠架构。第一阶段产生多源分数与结构特征,第二阶段进行 OOF LightGBM 融合并输出最终排序分数。} |
| \label{fig:pipeline} |
| \end{figure} |
|
|
| \subsection{为什么采用两阶段堆叠} |
|
|
| 两阶段堆叠的核心动机是:不同特征源的性质差异很大,强行塞进一个端到端 GNN 不一定稳定。 |
|
|
| \begin{itemize} |
| \item LightGCN 分数是 dense score,表达协同过滤相似性。 |
| \item 度数和 meta-path 是 sparse count 或 ratio,表达局部图证据。 |
| \item 内容相似度是 cosine,表达语义空间接近性。 |
| \item 随机游走 embedding 是全局结构表示,表达社区邻近。 |
| \item 高阶传播是稀疏矩阵乘法结果,表达 typed path reachability。 |
| \end{itemize} |
|
|
| LightGBM 对这类混合表格特征非常合适:它不要求所有特征同分布,也能自动学习阈值、分段和非线性交互。例如当 LightGCN 分数中等但 \(A-P-P\) 引用路径很强时,LightGBM 可以把样本上调;当某候选论文仅因热门而分数高但缺少作者局部证据时,模型可以把它下调。 |
|
|
| \subsection{系统信息流} |
|
|
| 可以把最终系统理解成以下信息流: |
|
|
| \begin{enumerate} |
| \item 原始文件读入:训练边、测试候选、合著边、引用边、内容向量。 |
| \item 训练 LightGCN 与相关 ensemble,产生基础协同过滤分数。 |
| \item 构建验证集 OOF 协议,避免二阶段模型看到自己的验证目标。 |
| \item 生成结构特征、内容特征、BPR-MF 特征、随机游走特征、高阶传播特征。 |
| \item 用 LightGBM 在 OOF 方式下学习特征融合。 |
| \item 在测试集上用相同特征工程生成最终分数。 |
| \item 不直接迁移验证最优概率阈值,而是按 rank top 50\% 输出正例。 |
| \end{enumerate} |
|
|
| \section{性能提升路径:从 0.885 到 0.96626} |
| \label{sec:improvement} |
|
|
| 图~\ref{fig:progression} 是理解项目“如何实现水平提升”的关键。每一步提升都对应一个明确的工程判断:不是盲目增加模型规模,而是补充新的、互补的证据类型。 |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.95\textwidth]{fig3_performance_evolution.pdf} |
| \caption{方法演进与性能提升。LightGCN 建立强基线,graph/meta-path stacking 形成第一次大跃迁,随机游走和高阶引用传播提供后期增益。} |
| \label{fig:progression} |
| \end{figure} |
|
|
| \begin{longtable}{@{}p{3.5cm}p{2.2cm}p{2.2cm}p{6.0cm}@{}} |
| \caption{主要阶段与性能提升逻辑}\\ |
| \toprule |
| 阶段 & 验证 \Fone & Public \Fone & 为什么有提升 \\ |
| \midrule |
| \endfirsthead |
| \toprule |
| 阶段 & 验证 \Fone & Public \Fone & 为什么有提升 \\ |
| \midrule |
| \endhead |
| Early GNN baseline & 0.8850 & -- & 早期异构 GNN 可以学习图结构,但训练稳定性和排序能力不足。 \\ |
| LightGCN ensemble & 0.9386 & 0.9304 & LightGCN 更匹配隐式反馈推荐,BPR 排序目标比 BCE 更稳定。 \\ |
| Graph/meta-path stack & 0.9560 & 0.9576 & 显式加入合著、引用、度数和路径证据,补齐纯协同过滤盲点。 \\ |
| Content + BPR-MF & 0.9593 & 0.9600 & 内容向量缓解冷启动,BPR-MF 提供另一种低秩协同过滤视角。 \\ |
| DeepWalk/Node2Vec & 0.9621 & 0.9625 & 随机游走 embedding 捕捉全局社区接近性和长路径邻近性。 \\ |
| 7 random-walk blocks & 0.9649 & -- & 多种 walk length、dimension、图构造和 seed 之间存在互补。 \\ |
| High-order citation & \textbf{0.9669} & \textbf{0.9663} & 显式建模作者历史论文和合作者历史论文在引用图上的高阶可达性。 \\ |
| \bottomrule |
| \end{longtable} |
|
|
| \section{早期路线和关键判断} |
| \label{sec:early} |
|
|
| 早期尝试包括 SAGEConv 异构 GNN、HGT/GAT 类更复杂结构、BCE loss、BPR ranking loss、LightGBM 结构基线、BPR-MF 和多个 LightGCN 变体。实验经验可以概括为三点。 |
|
|
| \subsection{更复杂的 GNN 不一定更好} |
|
|
| 在推荐系统里,图神经网络的复杂度不等于推荐性能。复杂 GNN 包含特征变换、非线性、注意力或关系类型参数,理论表达能力更强,但也带来更高过拟合风险、更难调参和更强数据需求。当前任务的主要信号来自作者-论文隐式反馈和稀疏图结构,LightGCN 的简化传播反而更稳。 |
|
|
| \subsection{排序目标比普通二分类更合适} |
|
|
| 最终任务关心候选论文排序和二值截断。BPR loss 直接优化正样本分数高于负样本的相对顺序,比 BCE 的点式概率建模更贴近推荐任务。早期经验显示 BCE 版本较弱,而 BPR LightGCN 是后续所有改进的稳定基础。 |
|
|
| \subsection{验证协议必须可靠} |
|
|
| 二阶段模型如果直接在同一验证集上训练和评价,很容易高估性能。因此后期使用 5 折 OOF:每一折的验证预测都来自没有见过该折标签的模型。这样得到的 validation \Fone 更接近真实泛化能力,也能更可靠地比较特征组。 |
|
|
| \section{LightGCN 主干} |
| \label{sec:lgcn} |
|
|
| LightGCN 是最终系统的第一根支柱。它只保留邻居聚合和层间平均,去除复杂 MLP、非线性和特征变换。对于作者-论文隐式反馈二部图,这种结构有两个优点:一是排序稳定,二是容易 ensemble。 |
|
|
| 设 \(u\) 是作者或论文节点,\(\mathcal{N}(u)\) 是其邻居。第 \(l\) 层传播为: |
|
|
| \[ |
| \mathbf{e}_u^{(l+1)} |
| =\sum_{v\in \mathcal{N}(u)} |
| \frac{1}{\sqrt{|\mathcal{N}(u)|}\sqrt{|\mathcal{N}(v)|}}\mathbf{e}_v^{(l)}. |
| \] |
|
|
| 最终表示取各层平均: |
|
|
| \[ |
| \bar{\mathbf{e}}_u=\frac{1}{L+1}\sum_{l=0}^{L}\mathbf{e}_u^{(l)}. |
| \] |
|
|
| 作者 \(a\) 和论文 \(p\) 的协同过滤分数为: |
|
|
| \[ |
| s_{\mathrm{lgcn}}(a,p)=\bar{\mathbf{e}}_a^\top \bar{\mathbf{e}}_p. |
| \] |
|
|
| \subsection{LightGCN 提供哪些特征} |
|
|
| 最终二阶段模型并不只使用一个 LightGCN 分数,而是使用一组派生特征: |
|
|
| \begin{itemize} |
| \item raw score:作者和论文 embedding 点积。 |
| \item global rank:候选 pair 在全局测试集中的排序。 |
| \item author-wise rank:同一作者候选论文内部的排序。 |
| \item percentile:将 rank 转为比例,便于跨作者比较。 |
| \item ensemble mean:多个 checkpoint 或 seed 的平均分。 |
| \item ensemble variance:多个模型意见是否一致,反映置信度。 |
| \end{itemize} |
|
|
| 这些 rank 特征非常重要。原因是不同作者的候选集分数尺度可能不同,raw score 不能完全比较。author-wise rank 告诉模型“这篇论文对当前作者来说是不是靠前”,比全局分数更贴近推荐决策。 |
|
|
| \section{显式图结构和 Meta-path 特征} |
| \label{sec:metapath} |
|
|
| LightGCN 会把路径语义压缩进 embedding,但二阶段模型仍需要明确知道某些结构事实。例如: |
|
|
| \begin{itemize} |
| \item 候选论文是否被作者历史论文引用过? |
| \item 候选论文是否引用了作者历史论文? |
| \item 作者合作者是否读过或关联过该论文? |
| \item 候选论文是否只是全局热门,但和作者局部兴趣关系弱? |
| \end{itemize} |
|
|
| 因此,项目构造了一批显式图结构特征。 |
|
|
| \begin{longtable}{@{}p{3.2cm}p{4.2cm}p{6.2cm}@{}} |
| \caption{显式结构特征的含义}\\ |
| \toprule |
| 特征类型 & 例子 & 解释 \\ |
| \midrule |
| \endfirsthead |
| \toprule |
| 特征类型 & 例子 & 解释 \\ |
| \midrule |
| \endhead |
| 节点度数 & author degree, paper degree, citation in/out degree & 捕捉作者活跃度、论文热度和引用影响力。 \\ |
| 合著路径 & A-A-P & 如果作者合作者关联过候选论文,该候选可能更相关。 \\ |
| 引用路径 & A-P-P, A-P-P-P & 作者历史论文与候选论文是否在引用网络中相连。 \\ |
| 集合 overlap & history papers vs citation neighbors & 作者历史集合与候选论文邻域的交集强度。 \\ |
| 比例特征 & overlap / degree, normalized count & 降低高热度论文带来的虚高计数。 \\ |
| rank 特征 & global rank, author rank, percentile & 将模型分数转换为更稳定的排序位置。 \\ |
| \bottomrule |
| \end{longtable} |
|
|
| 这一阶段带来的提升很大:从 LightGCN ensemble 的 public 0.93044 到 graph/meta-path stack 的 public 约 0.95760。直观解释是,LightGCN 已经知道“谁和谁像”,而显式结构特征进一步告诉模型“为什么像、通过哪条路径像、这个证据是否可靠”。 |
|
|
| \section{内容特征与 BPR-MF} |
| \label{sec:content} |
|
|
| 官方提供的 \code{feature.pkl} 是每篇论文的 512 维内容向量。内容特征的意义是解决协同过滤无法充分覆盖的冷启动和弱交互问题。若作者历史论文和候选论文内容向量高度相似,即使作者没有直接接触候选论文,它仍可能是正例。 |
|
|
| \subsection{内容画像如何构造} |
|
|
| 对作者 \(a\),设其历史论文集合为 \(\mathcal{P}_a\),每篇论文有内容向量 \(\mathbf{x}_p\)。可以构造作者内容画像: |
|
|
| \[ |
| \mathbf{c}_a=\frac{1}{|\mathcal{P}_a|}\sum_{q\in \mathcal{P}_a}\mathbf{x}_q. |
| \] |
|
|
| 候选论文 \(p\) 的基础内容相似度为: |
|
|
| \[ |
| s_{\mathrm{content}}(a,p) |
| = \cos(\mathbf{c}_a,\mathbf{x}_p). |
| \] |
|
|
| 后续 rich content profile 不只用 mean cosine,还加入: |
|
|
| \begin{itemize} |
| \item 候选论文与作者历史论文的 max/mean/std/median cosine。 |
| \item top-3、top-5、top-10 相似度均值。 |
| \item 相似度超过若干阈值的比例。 |
| \item 候选论文在同一作者候选集中的 content rank 和 percentile。 |
| \end{itemize} |
|
|
| \subsection{BPR-MF 的作用} |
|
|
| BPR-MF 是矩阵分解风格的协同过滤模型。它和 LightGCN 都是协同过滤,但归纳偏置不同:LightGCN 利用图传播平滑邻居信息,BPR-MF 更偏向低秩矩阵近似。单独看 BPR-MF 不一定最好,但作为二阶段分数源,它可以提供互补排序信号。 |
|
|
| \begin{table}[H] |
| \centering |
| \caption{内容与 BPR-MF 消融结果} |
| \begin{tabular}{@{}lcccc@{}} |
| \toprule |
| 阶段 & 验证 \Fone & \AUC & Precision & Recall \\ |
| \midrule |
| post95 baseline & 0.957110 & 0.992215 & 0.957742 & 0.956478 \\ |
| + content mean-cos & 0.957629 & 0.992198 & 0.954998 & 0.960274 \\ |
| + BPR-MF & 0.959308 & 0.992757 & 0.957718 & 0.960904 \\ |
| \bottomrule |
| \end{tabular} |
| \end{table} |
|
|
| 从表中可见,内容 mean-cos 带来小幅提升,BPR-MF 带来更明显的增益。二者的价值不在于单独取代 LightGCN,而在于给 LightGBM 提供新的判别维度。 |
|
|
| \section{DeepWalk 与 Node2Vec 随机游走特征} |
| \label{sec:rw} |
|
|
| DeepWalk 和 Node2Vec 将图上随机游走序列看成类似文本的上下文序列,再用 word2vec 思路学习节点 embedding。它们适合捕捉全局图社区和长路径邻近性。 |
|
|
| 在本项目中,随机游走图不是单纯的作者-论文图,而是混合学术图: |
|
|
| \begin{itemize} |
| \item 作者-论文边:推荐主任务的主连接。 |
| \item 论文-论文引用边:学术知识路径。 |
| \item 作者-作者合著边:研究共同体关系。 |
| \end{itemize} |
|
|
| 对每个候选 pair,可以从随机游走 embedding 构造: |
|
|
| \begin{itemize} |
| \item dot product 和 cosine similarity。 |
| \item Hadamard product 的统计量。 |
| \item absolute difference 和 L2 distance。 |
| \item global rank、author-wise rank、percentile。 |
| \end{itemize} |
|
|
| 7-block random-walk ensemble 使用多个配置:不同维度、walk length、窗口大小、seed、图构造方式,以及 Node2Vec 的 \(p,q\) 参数。最终 7-block 版本验证 \Fone 约为 0.9649,为高阶传播之前的最强中间系统。 |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.75\textwidth]{figA2_rw_ensemble.pdf} |
| \caption{随机游走 ensemble size 消融:多个 walk block 之间存在互补。} |
| \end{figure} |
|
|
| \section{核心创新:引用感知高阶传播} |
| \label{sec:highorder} |
|
|
| 高阶引用传播是最终系统最有辨识度的部分。它的目标是显式回答一个学术推荐问题:候选论文是否位于作者历史研究兴趣的引用邻域中? |
|
|
| \subsection{矩阵定义} |
|
|
| 定义三类稀疏矩阵: |
|
|
| \begin{itemize} |
| \item \(\Rmat\in\mathbb{R}^{|\mathcal{A}|\times|\mathcal{P}|}\):作者-论文交互矩阵。 |
| \item \(\Cmat\in\mathbb{R}^{|\mathcal{P}|\times|\mathcal{P}|}\):论文-论文引用矩阵。 |
| \item \(\Smat\in\mathbb{R}^{|\mathcal{A}|\times|\mathcal{A}|}\):作者-作者合著矩阵。 |
| \end{itemize} |
|
|
| 矩阵先做行归一化,使传播分数不被高出度节点无控制放大。作者本人历史论文经 \(k\) 跳引用传播到候选论文的强度为: |
|
|
| \[ |
| H_k = \Rmat \Cmat^k. |
| \] |
|
|
| 合作者历史论文经引用图传播到候选论文的强度为: |
|
|
| \[ |
| G_k = \Smat \Rmat \Cmat^k. |
| \] |
|
|
| \(H_k[a,p]\) 表示作者 \(a\) 的历史论文经过 \(k\) 跳 citation 到达论文 \(p\) 的强度;\(G_k[a,p]\) 表示作者 \(a\) 的合作者历史论文经过 \(k\) 跳 citation 到达论文 \(p\) 的强度。 |
|
|
| \subsection{为什么它有效} |
|
|
| LightGCN 和随机游走 embedding 都可以间接学习图邻近性,但它们很难显式告诉二阶段模型“这是从作者历史论文沿引用方向传过来的证据”。高阶传播直接保留路径类型: |
|
|
| \begin{itemize} |
| \item \(A-P-P^k\):作者自己的历史论文与候选论文之间的引用路径。 |
| \item \(A-A-P-P^k\):合作者历史论文与候选论文之间的引用路径。 |
| \item forward citation:从历史论文沿引用方向到达候选论文。 |
| \item backward citation:候选论文反向连接到作者历史论文邻域。 |
| \item undirected citation:忽略方向的主题邻域近似。 |
| \end{itemize} |
|
|
| 这类特征尤其适合学术推荐,因为论文引用本身就是学术知识传播和主题关联的主要载体。 |
|
|
| \subsection{伪代码} |
|
|
| \begin{lstlisting} |
| Input: |
| R: row-normalized author-paper interaction matrix |
| S: row-normalized coauthor matrix |
| C_d: row-normalized citation matrix for each direction d |
| Q: candidate author-paper pairs |
| K: maximum citation propagation order |
|
|
| For each citation direction d: |
| T = R |
| For k = 1 ... K: |
| T = T * C_d |
| For each candidate (a, p) in Q: |
| record T[a, p] |
| record normalized variants |
|
|
| U = S * R |
| For k = 1 ... K: |
| U = U * C_d |
| For each candidate (a, p) in Q: |
| record U[a, p] |
| record normalized variants |
|
|
| Return all high-order propagation features |
| \end{lstlisting} |
|
|
| \subsection{消融结果} |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.92\textwidth]{fig5_highorder_ablation.pdf} |
| \caption{高阶传播消融:在 rich content 和 7 个随机游走 block 之后,高阶传播继续提供稳定增益。} |
| \end{figure} |
|
|
| \begin{table}[H] |
| \centering |
| \caption{高阶传播阶段消融} |
| \begin{tabular}{@{}lcccc@{}} |
| \toprule |
| 阶段 & 验证 \Fone & 阈值 & \AUC & 特征数 \\ |
| \midrule |
| base high-order & 0.964270 & 0.455478 & 0.994052 & 108 \\ |
| rich + 7 RW & 0.964947 & 0.490447 & 0.994555 & 190 \\ |
| + undirected high-order & 0.966556 & 0.469339 & 0.994890 & 214 \\ |
| + directed citation propagation & \textbf{0.966874} & 0.461731 & \textbf{0.994918} & 259 \\ |
| \bottomrule |
| \end{tabular} |
| \end{table} |
|
|
| 从 0.964947 到 0.966874 的提升看似数值不大,但在后期高分段非常关键。它说明高阶 citation features 与随机游走并非完全重复:随机游走提供软社区邻近,高阶传播提供 typed citation reachability。 |
|
|
| \section{LightGBM OOF 堆叠} |
| \label{sec:oof} |
|
|
| 二阶段模型使用 LightGBM。它的作用不是替代前面的模型,而是学习多源特征之间的组合规律。 |
|
|
| \subsection{为什么需要 OOF} |
|
|
| 如果在完整验证集上训练 LightGBM,再在同一验证集上评价,会产生信息泄漏。OOF 的做法是: |
|
|
| \begin{enumerate} |
| \item 将验证样本分成 5 折。 |
| \item 每次用 4 折训练 LightGBM,在剩余 1 折预测。 |
| \item 拼接 5 次预测,得到所有验证样本的 out-of-fold 分数。 |
| \item 用 OOF 分数计算 \Fone、\AUC、precision 和 recall。 |
| \end{enumerate} |
|
|
| 这样每个验证样本的预测都来自没有见过它标签的模型,评估更可信。 |
|
|
| \subsection{LightGBM 学到什么} |
|
|
| LightGBM 实际学的是条件决策规则。例如: |
|
|
| \begin{itemize} |
| \item 当 LightGCN rank 很靠前且 content top-k similarity 高时,强烈提高正例概率。 |
| \item 当候选论文很热门但和作者历史没有 citation overlap 时,降低对 popularity 的依赖。 |
| \item 当 author-wise rank 中等但 \(H_1\) 或 \(G_2\) 高时,将样本上调。 |
| \item 当随机游走和 LightGCN 意见不一致时,根据其他结构证据决定可信来源。 |
| \end{itemize} |
|
|
| 这就是为什么最终方案强调“多源互补”。不同特征不需要单独完美,只要它们在不同样本区域补充彼此,二阶段模型就能获得提升。 |
|
|
| \section{提交校准:为什么不用验证最优概率阈值} |
| \label{sec:calibration} |
|
|
| 最终模型的验证最优概率阈值约为 0.461731。但直接把该阈值应用到 test,会得到约 0.524 的 predicted-positive ratio。最终 public-best 采用 rank top 50\%。原因在于验证集构造与测试集分布不同。 |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.9\textwidth]{fig6_calibration_rank_cutoff.pdf} |
| \caption{Rank cutoff 与概率阈值迁移。验证集是人工平衡样本,LightGBM 概率不应直接当作测试集真实概率。} |
| \end{figure} |
|
|
| \subsection{核心判断} |
|
|
| 验证集是人工 1:1 正负样本,因此验证概率的类别先验与测试集候选分布不一致。LightGBM 输出分数的排序能力强,但概率校准不一定可靠。对于 \Fone 提交,更重要的是选择合适的正例比例。 |
|
|
| 最终规则: |
|
|
| \begin{lstlisting} |
| sort all test candidate pairs by final LightGBM score |
| predict top 50.0 |
| force train/test-overlap known positives to 1 |
| write Index, Predicted |
| \end{lstlisting} |
|
|
| 这个策略的优势是稳定控制测试正例比例,避免验证概率阈值迁移造成分布漂移。 |
|
|
| \section{错误分析:剩余问题在哪里} |
| \label{sec:error} |
|
|
| 错误分桶分析用于回答:模型已经很强之后,剩余错误主要集中在哪里?图~\ref{fig:error} 显示,低度数、弱证据和中间分数区域仍然最难。 |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.95\textwidth]{figA4_error_buckets.pdf} |
| \caption{错误分桶分析:困难样本集中在冷启动、弱局部证据和中间 score/rank 区间。} |
| \label{fig:error} |
| \end{figure} |
|
|
| 主要结论如下: |
|
|
| \begin{itemize} |
| \item \term{低度数论文和低活跃作者}:缺少历史交互,协同过滤 embedding 不稳定。 |
| \item \term{中间 LightGCN 分数区间}:极高分和极低分较容易,中间区域最需要结构和内容 reranking。 |
| \item \term{local evidence 缺失样本}:没有明确合著、引用或内容支持时,模型更容易犯错。 |
| \end{itemize} |
|
|
| 因此,如果继续优化,优先方向不是整体加深 GNN,而是针对边界样本构建更细的 reranker 或校准策略。 |
|
|
| \section{项目文件地图} |
| \label{sec:filemap} |
|
|
| 理解仓库时,可以按以下路径阅读: |
|
|
| \begin{longtable}{@{}p{6.4cm}p{7.6cm}@{}} |
| \caption{核心文件和目录说明}\\ |
| \toprule |
| 路径 & 作用 \\ |
| \midrule |
| \endfirsthead |
| \toprule |
| 路径 & 作用 \\ |
| \midrule |
| \endhead |
| \pathcode{README.md} & 最终 deliverable 总览,记录 best public result、主要脚本和复现命令。 \\ |
| \pathcode{reports/final_report.md} & 最终方法总结,适合先读。 \\ |
| \pathcode{code/train_val_lgcn_ensemble.py} & LightGCN 训练、验证和分数生成。 \\ |
| \pathcode{code/generate_post95_submission.py} & post95 LightGCN + graph/content feature submission generator。 \\ |
| \pathcode{code/extra_score_sources_ablation.py} & content mean-cos、BPR-MF 和 ranker score source 消融。 \\ |
| \pathcode{code/node2vec_deepwalk_ablation.py} & DeepWalk/Node2Vec 初始消融。 \\ |
| \pathcode{code/randomwalk_systematic_ablation.py} & 系统化随机游走特征实验。 \\ |
| \pathcode{code/generate_randomwalk_ensemble_submission.py} & 随机游走 ensemble 提交生成。 \\ |
| \pathcode{code/content_rich_ablation.py} & rich content 特征构造和消融。 \\ |
| \pathcode{code/high_order_graph_stack.py} & 最终高阶引用传播实验和提交生成。 \\ |
| \pathcode{code/error_group_calibration.py} & 错误分桶、阈值 sweep 和校准分析。 \\ |
| \pathcode{validation_runs/dynamic_seed202/} & 主要 OOF 分数、test 分数、模型权重、summary 和 submissions。 \\ |
| \pathcode{figures_v2/} & 论文和讲义使用的高质量图表。 \\ |
| \bottomrule |
| \end{longtable} |
|
|
| \section{复现和检查命令} |
| \label{sec:reproduce} |
|
|
| 最快的检查方式是读取最终 summary 文件: |
|
|
| \begin{lstlisting}[language=bash] |
| cd D:/reps/26H1_cs3319_final_deliverable |
|
|
| cat validation_runs/dynamic_seed202/high_order_graph_stack/validation_summary.csv |
| cat validation_runs/dynamic_seed202/high_order_graph_stack/submission_summary.csv |
| \end{lstlisting} |
|
|
| 重建最终 high-order stack 的命令是: |
|
|
| \begin{lstlisting}[language=bash] |
| python code/high_order_graph_stack.py \ |
| --package-root . \ |
| --split-seed 202 \ |
| --seed 202 \ |
| --n-splits 5 \ |
| --make-submission |
| \end{lstlisting} |
|
|
| 该命令会重写: |
|
|
| \begin{itemize} |
| \item \pathcode{validation_runs/dynamic_seed202/high_order_graph_stack/validation_summary.csv} |
| \item \pathcode{validation_runs/dynamic_seed202/high_order_graph_stack/rich_rw7_highorder_directed_test_pred.npy} |
| \item \pathcode{validation_runs/dynamic_seed202/high_order_graph_stack/submissions/} |
| \item \pathcode{validation_runs/dynamic_seed202/high_order_graph_stack/submission_summary.csv} |
| \end{itemize} |
|
|
| 最终 public-best 文件是: |
|
|
| \begin{lstlisting} |
| validation_runs/dynamic_seed202/high_order_graph_stack/submissions/ |
| submission_rich_rw7_highorder_directed_r0.500000.csv |
| \end{lstlisting} |
|
|
| \section{汇报时可以怎么讲} |
| \label{sec:qa} |
|
|
| \subsection{开场 30 秒} |
|
|
| 可以这样概括: |
|
|
| \begin{quote} |
| 我们的任务是预测作者是否应该被推荐某篇论文。这个问题不是普通二分类,而是一个异构学术图上的作者-论文链接预测。图里有作者-论文交互、作者合著、论文引用和论文内容向量。最终我们没有只依赖一个复杂 GNN,而是构建了 LightGCN 主干、多源图特征、高阶引用传播和 LightGBM OOF 堆叠的系统,最终 public \Fone 达到 0.96626。 |
| \end{quote} |
|
|
| \subsection{解释为什么不是更深 GNN} |
|
|
| 可回答: |
|
|
| \begin{quote} |
| 更深或更复杂的 GNN 在这个数据上不一定更好。数据长尾稀疏,很多节点局部证据很少;复杂模型更容易过拟合或过平滑。LightGCN 对隐式反馈推荐更稳。我们的提升主要来自把不同证据显式表达出来:合著路径、引用路径、内容相似、随机游走社区、高阶 citation reachability,然后让 LightGBM 学习组合。 |
| \end{quote} |
|
|
| \subsection{解释高阶传播创新} |
|
|
| 可回答: |
|
|
| \begin{quote} |
| 学术推荐里,引用图非常重要。我们用 \(H_k=RC^k\) 表示作者历史论文沿引用图传播 \(k\) 步后到达候选论文的强度,用 \(G_k=SRC^k\) 表示合作者历史论文的对应传播强度。这样模型直接知道候选论文是否处在作者本人或合作者研究兴趣的引用邻域中。这比单纯 embedding 更可解释,也在消融中带来最终提升。 |
| \end{quote} |
|
|
| \subsection{解释 rank cutoff} |
|
|
| 可回答: |
|
|
| \begin{quote} |
| 验证集是人工构造的 1:1 正负样本,LightGBM 概率在测试集上并不一定校准。直接迁移验证最优阈值会让测试正例比例漂移到约 0.524。我们发现按最终分数排序取 top 50\%,再强制 known positives 为 1,更稳定,也对应最终 public-best。 |
| \end{quote} |
|
|
| \section{局限与后续优化方向} |
|
|
| 最终系统虽然取得较高分数,但仍有几个局限: |
|
|
| \begin{itemize} |
| \item 高阶传播目前主要依赖稀疏矩阵特征,没有端到端学习 citation direction 的权重。 |
| \item 冷启动作者和冷门论文仍然困难,尤其是缺少局部结构证据时。 |
| \item rank cutoff 是实用校准策略,但不是严格概率校准;若有更真实的验证分布,可以做更细的 calibration。 |
| \item LightGBM feature importance 因环境中 LightGBM metadata 不完整,没有生成可靠的重要性图。 |
| \end{itemize} |
|
|
| 后续可尝试: |
|
|
| \begin{enumerate} |
| \item 针对边界样本训练专门 reranker。 |
| \item 使用 citation-aware neural reranking,但必须保持 OOF 协议。 |
| \item 对不同作者活跃度分组使用不同 cutoff。 |
| \item 对内容向量做聚类主题特征,补充冷启动语义。 |
| \item 对高阶传播做 path-type attention,将 \(A-P-P\)、\(A-A-P-P\)、forward/backward/undirected 的权重自动化。 |
| \end{enumerate} |
|
|
| \section{结论} |
|
|
| 本项目的核心经验是:在稀疏异构学术推荐任务中,稳定的协同过滤 backbone 比复杂但不稳定的端到端 GNN 更重要;真正带来持续提升的是多源证据的互补融合。LightGCN 提供强排序基础,显式结构特征补充局部路径语义,内容向量缓解冷启动,BPR-MF 提供低秩协同过滤补充,DeepWalk/Node2Vec 捕捉全局社区,高阶引用传播显式建模学术引用路径,LightGBM OOF stacking 则负责把这些信号组合为最终排序。 |
|
|
| 最终 public \Fone=0.96626 的提升路径不是单点技巧,而是一套完整工程方法:先建立可靠验证协议,再逐步加入可解释特征,持续做消融和错误分析,最后根据验证-测试分布差异选择 rank cutoff 提交策略。这个过程比单纯追求某个模型名字更重要,也更能解释为什么最终系统能稳定提升。 |
|
|
| \appendix |
| \section{附录:关键图表索引} |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.9\textwidth]{figA3_feature_group_contribution.pdf} |
| \caption{特征组增量贡献总结。} |
| \end{figure} |
|
|
| \begin{figure}[H] |
| \centering |
| \includegraphics[width=0.9\textwidth]{figA5_oof_pr_score.pdf} |
| \caption{OOF precision-recall 曲线和最终分数 ECDF。} |
| \end{figure} |
|
|
| \end{document} |
|
|