跳转到内容

HITS — 给网页同时打两个分:权威页 + 索引页

是什么

HITS(Hyperlink-Induced Topic Search)是一套给网页打两个分的算法:一个分叫 authority(权威分),一个分叫 hub(索引分)。日常类比:

  • authority = 某领域的”专家本人”——比如『相对论』话题里的爱因斯坦个人主页
  • hub = 某领域的”好导航页”——把所有相关专家页都列出来的一个目录

HITS 的关键洞见:这两个分相互定义。一个页面是好 hub,因为它指向了很多好 authority;一个页面是好 authority,因为它被很多好 hub 指向。两边像照镜子,互相校准。

1998 年 Cornell 教授 Jon Kleinberg 在 SODA 投了早期版,1999 年 JACM 上发表完整版。和同期的 PageRank(1998)并称链接分析两大流派

为什么重要

不理解 HITS,下面这些事都没法解释:

  • 为什么 1998-1999 是搜索引擎的分水岭——之前靠”关键词出现次数”排序,被垃圾页面刷爆;之后转向”看链接结构”
  • 为什么后来 Google 的 PageRank 赢了,但 HITS 的”双向迭代”思想没死,反而活在今天的图神经网络(GNN)和推荐系统里
  • 为什么”权威”和”导航”该分两个分而不是一个分——很多场景下两者根本不是同一批节点
  • 为什么学术圈里”高引论文”(authority)和”好综述”(hub)是两种不同贡献

核心要点

HITS 算法分四步:

  1. 拿种子集(root set):用关键词从普通搜索引擎拿前 200 个页面。这一步借力关键词搜索,HITS 自己不做文本匹配。

  2. 扩展成基集(base set):把 root set 里每个页面的入链和出链页都拉进来。这样从 200 个膨胀到几千个,但仍然是和查询相关的小图。

  3. 迭代两个分数:每个页面 p 有 hub 分 h(p) 和 authority 分 a(p)。规则是:

    • a(p) = 所有指向 p 的页面的 h 分之和(被好 hub 指 → 你是好 authority)
    • h(p) = 所有 p 指向的页面的 a 分之和(你指了好 authority → 你是好 hub)
    • 两组分数交替更新,每轮归一化(除以总和),跑几十轮就收敛
  4. 取主特征向量:数学上看,第 3 步是矩阵的”幂法”。用 A 表示链接矩阵(A[i,j]=1 表示 i 指向 j),算下来 a 是 A^T A 的主特征向量、h 是 A A^T 的主特征向量。

整个过程针对每个查询单独跑——这是和 PageRank 最根本的区别。

实践案例

案例 1:搜”机器学习”会浮出谁

跑 HITS 在”machine learning”的小图上:

  • authority:Andrew Ng 的 CS229 课程页、scikit-learn 文档、PyTorch 官网——内容本体
  • hub:awesome-machine-learning(GitHub 上的精选列表)、Reddit 的 r/MachineLearning 月度推荐贴——把好内容串起来的导航页

注意:hub 和 authority 几乎不重叠。这正是 HITS 的价值——用一个分(PageRank)把这两类节点压扁就丢失了信息。

案例 2:手算一个三页面小图

三个页面 A、B、C,链接关系:A → C,B → C,C → A。

初始 a = h = (1, 1, 1),跑一轮:

  • a(C) 收到 A 和 B 的 h,所以 a(C) = h(A)+h(B) = 2;a(A) 收到 C 的 h = 1;a(B) = 0
  • h(A) = a(C) = 1(A 指向 C);h(B) = a(C) = 1;h(C) = a(A) = 1

继续迭代几轮,C 在 authority 上稳定胜出,A 和 B 在 hub 上并列。这就是双向特征向量在小图上的样子。

案例 3:HITS 思想在现代的化身

  • 学术评价:Eigenfactor 算法给期刊打分,思路就是 PageRank+HITS 的混合
  • GNN 消息传递:每个节点既”发”自己的特征给邻居(hub 行为)也”收”邻居的特征(authority 行为),多轮聚合到收敛
  • 推荐系统冷启动:用户-商品二部图,用户分(hub)和商品分(authority)交替更新——直接把 HITS 搬过来
  • 影响力建模:Twitter 早期的”大 V 识别”里,转推者(hub)和被转推者(authority)就是天然的 HITS 结构

案例 4:HITS 与 PageRank 同图对比

同一个 100 节点的小图(一个学术领域),分别跑两套算法:

维度HITSPageRank
输出分数每节点两个分(h 和 a)每节点一个分
计算时机查询时(小图)离线(全图)
收敛对象A^T AA A^T 主特征向量转移矩阵主特征向量
抗操纵弱(小图易被互链拉爆)较强(阻尼系数 + 全网视角)
工程代价每查询百毫秒到秒离线一次,查询时 O(1) 查表

读到这里就明白:算法本身没有谁更对,是工程约束决定了谁能上线

踩过的坑

  1. TKC 效应(Tightly-Knit Community):一小群页面互相链接,分数会一起冲到顶,挤走真正的权威。比如几个垃圾博客互相引用,HITS 会把它们误判成”领域专家”。后来 SALSA(2000)用随机游走修正这个问题。

  2. 主题漂移(topic drift):base set 扩展时把强势但不相关的页面拉进来——比如查”jaguar 美洲豹”,扩展后 base set 里全是 Jaguar 汽车官网。Yahoo!、维基百科首页等”大节点”会污染结果。

  3. 查询时实时算:HITS 必须每次查询都跑特征向量。1999 年的硬件下,这意味着百毫秒到秒级延迟——商业搜索引擎吃不消。这是 PageRank(离线算一次全网)在工程上胜出的关键。

  4. 对操纵脆弱:建几百个假 hub 全部指向你的目标页,authority 分立刻拉高。PageRank 用阻尼系数和全局视角部分缓解;HITS 在小图上对这种攻击几乎没招。

适用 vs 不适用场景

适用

  • 主题特定的小图链接分析(领域内文献、特定话题的博客圈)
  • 二部图打分(用户-商品、读者-作者,天然 hub/authority 分离)
  • 需要”内容方”和”导航方”分别识别的场景

不适用

  • 全网 Web 搜索(贵 + 易污染)→ 用 PageRank
  • 节点之间没有明确”指向”关系的网络(比如纯无向社交图)
  • 极稀疏图(迭代收敛到 trivial 解)

历史小故事(可跳过)

  • 1997-1998:Kleinberg 在 IBM Almaden 访问时做出 HITS,IBM 起项目叫 CLEVER,目标是干掉关键词搜索
  • 1998:HITS 早版投 SODA;同年 Brin 和 Page 发 PageRank、成立 Google。两套算法同年同月对外,思路对偶
  • 1999:HITS 完整版上 JACM;IBM 一度认为 CLEVER 会赢
  • 2000-2002:Google 用 PageRank 商业化大获成功;CLEVER 项目低调收尾。HITS 输在工程而不是算法
  • 2010s+:双向迭代思想在 GNN(图神经网络)、知识图谱嵌入里复活——这次是 HITS 的孙辈

学到什么

  1. 同一时刻可以有两套对偶的好答案——PageRank 单分全图,HITS 双分子图,谁也不能说更”对”
  2. 算法漂亮 ≠ 工程胜出——HITS 数学优雅但每查询都要算,PageRank 粗暴离线但能扩展
  3. 递归互定义是图分析的基本招式——hub 和 authority 互相支持,本质就是矩阵的幂法
  4. 思想会以变形回来——HITS 死在搜索,活在 GNN
  5. 拆分一个标量为两个标量是设计算法的常用招——不是所有节点都同时是”内容”和”导航”,强行压成一个分会丢信息

回看:为什么 PageRank 赢了 HITS

很多人以为是算法优劣分胜负,其实四点工程因素:

  • 离线 vs 在线:PageRank 一次算完全网,查询时只查表;HITS 每查询都得跑特征向量
  • 数据规模:PageRank 越大越稳;HITS 在小图上易被互链小圈子拉偏
  • 可解释性:单分容易给广告主、给运营解释;双分难讲清楚
  • 抗作弊:早期 HITS 链接农场(link farm)就能击垮,PageRank 用阻尼系数抵御

但反过来在今天的 GNN 和推荐系统里,HITS 的”双向迭代”思想几乎是默认起点——因为这些场景里每查询重算是允许的,而 hub/authority 分离恰好契合二部图、知识图谱的结构。

延伸阅读

关联

  • pagerank-1998 —— 双胞胎对手;理解链接分析必须把这两篇放一起看
  • graph-neural-networks —— 现代图深度学习里的消息传递就是 HITS 双向迭代的连续化版
  • recommendation-systems —— 二部图打分场景天然适合 HITS 的 hub/authority 分离

反向链接

  • pagerank-1998 —— PageRank — 用随机游走给整个网络的页面打分
  • trustrank-2004 —— TrustRank — 用一小撮可信种子把整张 Web 的信誉算出来