Skip to content

Latest commit

 

History

History
458 lines (336 loc) · 17.8 KB

File metadata and controls

458 lines (336 loc) · 17.8 KB

锚点作者系统

信息源锚点模型:理论建模、实施设计与实施计划。


第一部分:理论模型 — 形式化建模与系统设计

从噪声信息流中发现高质量锚点,建模信息源之间的权威性传播关系,并个性化标定锚点价值。

1. 本质问题

这是一个异构信息网络中的权威性发现与传播问题(Authority Discovery in Heterogeneous Information Networks)。

它结合了三个经典问题:

  1. 信号检测(Signal Detection)— 从噪声中识别高质量信号
  2. 权威性传播(Authority Propagation)— PageRank/HITS 的核心思想:权威性不是孤立的属性,而是通过关系网络传播的
  3. 锚点标定(Anchor Calibration)— 锚点不是绝对的,是相对于观察者(用户研究方向)和时间的

1.1 信号检测:从噪声中找锚点

每天面对的信息流本质是一个低信噪比信道。arXiv 每天 ~500 篇 CS 论文,绝大多数是噪声(对特定研究方向而言)。锚点就是这个信道中的高信噪比节点 — 它们不只是自身有价值,而且它们的存在能帮你校准其他信号的价值

一个好的锚点的本质特征是:它能减少你评估其他信息时的不确定性。

例:当你知道 Dawn Song 在做 AI Safety,她的新论文就是一个锚点 — 不只因为这篇论文好,而是因为它帮你快速判断:

  • 这个方向是活跃的
  • 这些合作者值得关注
  • 这些 venue 是相关的
  • 这些被引论文可能是基础工作

锚点的信息论定义:锚点是观测到后能最大程度降低你对信息空间不确定性的节点

H(信息空间 | 观测到锚点) << H(信息空间)

其中 H 是信息熵。锚点的质量 ∝ 互信息 I(锚点; 信息空间)

1.2 权威传播:锚点之间的关系

这就是 PageRank 的核心洞察:权威性不是孤立属性,而是通过关系网络传播的

锚点学者 ──发表于──→ 锚点 venue
    │                    │
    └──引用──→ 锚点论文 ──被引用──→ 新论文(被锚点网络"背书")
    │
    └──合作──→ 新学者(通过合作关系获得"锚点传播")

关键:锚点不是单个实体的属性,是整个网络中相对位置的函数。

1.3 个性化标定:锚点是相对的

同一个学者,对研究 NLP 的人和研究 Systems 的人是完全不同的锚点。锚点评分实际上是一个四元函数

anchor_score(source, domain, time, observer) → [0, 1]
  • source: 信息源实体(学者/venue/网站/repo)
  • domain: 领域上下文(安全/ML/系统/SE)
  • time: 时间窗口(最近 6 个月 vs 历史全量)
  • observer: 用户的研究方向和偏好

2. 形式化建模

2.1 异构信息网络定义

定义异构信息网络 $G = (V, E, \phi, \psi)$,其中:

  • $V$ 是节点集合
  • $E \subseteq V \times V$ 是边集合
  • $\phi: V \rightarrow T_V$ 是节点类型映射函数
  • $\psi: E \rightarrow T_E$ 是边类型映射函数
  • $|T_V| + |T_E| &gt; 2$(异构性条件)

节点类型 $T_V$

T_V = {Scholar, Paper, Venue, Website, Topic, Repo}
节点类型 属性集 内在质量信号
Scholar id, name, h_index, citation_count, paper_count, fields, affiliations h-index, 总引用, 论文产出率
Paper id, title, year, citations, venue, judge_scores, abstract 引用数, Judge 综合分, venue tier
Venue name, domain, tier, acceptance_rate, impact_factor 领域排名, 接收率, 影响因子
Website url, type, freshness, coverage 覆盖率, 更新频率, 数据质量
Topic keyword, field, trending_score 论文量增速, 引用集中度
Repo url, stars, forks, language, last_commit, contributors stars, 活跃度, 贡献者数

边类型 $T_E$

T_E = {authors, published_at, cites, coauthors, belongs_to, listed_on, has_repo, researches}
边类型 源节点 → 目标节点 权威传播含义 权重来源
authors Scholar → Paper 学者为论文背书 作者排序位置
published_at Paper → Venue Venue 为论文背书(接收=认可) 接收年份
cites Paper → Paper 被引论文获得引用方的传播 引用上下文(正/负/中性)
coauthors Scholar ↔ Scholar 合作者之间的信任传递 合作频次, 合作年限
belongs_to Paper → Topic 论文质量反哺主题热度 主题匹配置信度
listed_on Paper → Website 数据源的覆盖质量 上线时间
has_repo Paper → Repo 代码实现增强论文可信度 代码与论文匹配度
researches Scholar → Topic 学者定义研究方向的权威性 该方向的论文数占比

元路径(Meta-path)

Scholar Authority Paths:
  P1: Scholar ──authors──→ Paper ──published_at──→ Venue
  P2: Scholar ──authors──→ Paper ──cites──→ Paper ──authors──→ Scholar
  P3: Scholar ──coauthors──→ Scholar ──authors──→ Paper

Venue Authority Paths:
  P4: Venue ←──published_at── Paper ──cites──→ Paper ──published_at──→ Venue

Topic Authority Paths:
  P5: Topic ←──belongs_to── Paper ──authors──→ Scholar ──researches──→ Topic

Emerging Source Detection:
  P6: Scholar ──coauthors──→ Scholar(anchor) ──researches──→ Topic

2.2 锚点评分公式

对一个 source 节点 $s$,其锚点评分是四个分量的组合:

$$ \text{AnchorScore}(s) = \alpha \cdot Q(s) + \beta \cdot N(s) + \gamma \cdot T(s) + \delta \cdot R(s, o) $$

其中 $\alpha + \beta + \gamma + \delta = 1$,建议初始权重:

分量 权重 说明
$\alpha$ (内在质量) 0.30 基础门槛,但不应主导
$\beta$ (网络位置) 0.35 最重要的信号 — 网络效应
$\gamma$ (时间动态) 0.15 区分活跃 vs 历史锚点
$\delta$ (观察者相关) 0.20 个性化校准

Q(s) — 内在质量

Scholar 内在质量:

Q_scholar(s) = normalize(
    w_h · log(1 + h_index) +
    w_c · log(1 + citation_count) +
    w_p · min(paper_count / 50, 1.0) +
    w_v · avg_venue_tier
)

Paper 内在质量:

Q_paper(s) = normalize(
    w_cite · citation_score(citations) +
    w_venue · venue_tier_score(venue) +
    w_judge · judge_overall / 5.0 +
    w_code · has_code_score
)

N(s) — 网络位置(异构 PageRank)

$$ N(v) = \frac{1 - d}{|V|} + d \sum_{u \in \text{in}(v)} \frac{w_{\psi(u,v)} \cdot N(u)}{Z(u)} $$

边类型传播权重:

EDGE_PROPAGATION_WEIGHTS = {
    "cites":        0.30,   # 引用传播最强
    "coauthors":    0.25,   # 合作关系
    "published_at": 0.20,   # venue 背书
    "has_repo":     0.15,   # 代码关联
    "belongs_to":   0.10,   # 主题归属
}

T(s) — 时间动态

T_scholar(s) = w_rec · recency(s) + w_vel · velocity(s) + w_trend · trend(s)

recency(s) = exp(-λ · months_since_last_paper)    λ = 0.693 / 12
velocity(s) = min(papers_last_12_months / 5, 1.0)

R(s, o) — 观察者相关性

R(s, o) = cosine_similarity(embed(source_profile), embed(observer_profile))

2.3 锚点层级判定

层级 AnchorScore 区间 含义 系统行为
核心锚点 (Core Anchor) >= 0.8 领域奠基者/顶会常客 主动追踪,新论文自动推送,搜索结果置顶
活跃锚点 (Active Anchor) 0.5 ~ 0.8 当前产出高、引用增速快 纳入 DailyPaper 优先排序
潜力锚点 (Emerging Anchor) 0.3 ~ 0.5 新兴学者/新趋势 标记关注,定期复查
普通源 (Background) < 0.3 背景噪声 仅在搜索命中时展示

2.4 潜力锚点检测

特征定义:内在质量不高,但动态信号异常强。

Scholar 潜力信号:

信号 检测方法 示例
顶会突破 首次在 tier1 venue 发表 博士生的第一篇 NeurIPS
锚点合作 首次与核心锚点合作 新学者与 Dawn Song 合著
引用爆发 近 6 个月引用增速 > 同年龄段 2σ 一篇论文突然被广泛引用
跨领域迁移 原本在 A 领域,开始在 B 领域发表 Systems 学者开始做 ML Security
代码影响力 关联 repo stars 快速增长 论文 repo 一月内 1000+ stars

3. 与经典算法的关系

  • vs. PageRank: N(s) 分量是 PageRank 在异构图上的扩展,增加边类型权重和 Q(s) 先验初始化
  • vs. HITS: 可更好区分"综述型学者"(hub 分高)和"原创型学者"(authority 分高),建议 Phase 2 考虑
  • vs. TrustRank: scholar_subscriptions.yamltop_venues.yaml 是天然的种子锚点
  • vs. Metapath2Vec / HAN: 对 PaperBot 规模,显式 PageRank 比深度图模型更实用

4. 与 PaperBot 现有基础的对接

4.1 已有基础设施

已有组件 对应锚点模型分量 当前限制
InfluenceCalculator (PIS) Q(s) — Paper 内在质量 仅评估 Paper,未扩展到 Scholar/Venue
DynamicPISCalculator T(s) — 时间动态 仅估算引用速度,无真实引用历史
top_venues.yaml (tier1/tier2) Q(s) — Venue 内在质量 静态配置,无自动发现新 venue
Scholar domain model Q(s) — Scholar 内在质量 h-index 无领域归一化
Scholar Network API (coauthor graph) N(s) — 网络位置输入 已有 coauthor 数据,但未计算传播分数
Judge 5 维评分 Q(s) — Paper 细粒度质量 独立评分,未反哺 source 权威
TrackRouter (keyword matching) R(s,o) — 观察者相关性 基于 keyword overlap,非语义嵌入
EmbeddingProvider (OpenAI) R(s,o) — 语义计算 已有基础设施,但未用于 source 评分

4.2 关键缺口

  1. 无 Source 统一注册 — Scholar/Venue/Repo 是独立的,没有统一的 Source 抽象
  2. 无网络级评分 — 所有评分都是实体级的,没有权威传播
  3. 无 Source 间关系建模 — coauthor 数据已有但未用于评分
  4. Judge 评分单向流 — Judge 评完论文后分数不反哺到学者/venue 的权威
  5. 搜索排序忽略 source_score_record() 不考虑论文作者/venue 的锚点地位

4.3 反哺回路

Source Authority Layer
    │
    ├──→ DailyPaper: global_top 排序时加入 anchor_boost
    ├──→ Topic Search: _score_record() 中加入 source_authority_factor
    ├──→ Judge: 评分上下文中注入 anchor_level 信息
    ├──→ Scholar Tracking: 自动发现潜力锚点,建议订阅
    ├──→ Trending: trending_score 中加入 source_authority 权重
    └──→ 推荐系统: 基于用户锚点偏好推荐新论文

第二部分:实施设计

从理论模型到可运行代码的落地方案。

5. 数据层:authors + paper_authors

5.1 新表设计

-- 作者实体表
CREATE TABLE authors (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name_normalized TEXT NOT NULL,
    display_name TEXT NOT NULL,
    semantic_scholar_id TEXT,
    affiliation TEXT,
    h_index INTEGER,
    citation_count INTEGER DEFAULT 0,
    paper_count INTEGER DEFAULT 0,
    resolved_at DATETIME,
    created_at DATETIME NOT NULL,
    UNIQUE(name_normalized)
);

-- 论文-作者多对多关联
CREATE TABLE paper_authors (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    paper_id INTEGER NOT NULL REFERENCES papers(id) ON DELETE CASCADE,
    author_id INTEGER NOT NULL REFERENCES authors(id) ON DELETE CASCADE,
    position INTEGER NOT NULL DEFAULT 0,
    UNIQUE(paper_id, author_id)
);

5.2 Name Normalization

def normalize_author_name(name: str) -> str:
    name = name.strip().lower()
    name = re.sub(r'\s+', ' ', name)
    name = re.sub(r'\b[a-z]\.\s*', '', name)
    if ',' in name:
        parts = [p.strip() for p in name.split(',', 1)]
        name = f"{parts[1]} {parts[0]}"
    return name.strip()

6. 双轨评分:防过拟合

anchor_score = α × subjective_score + (1 - α) × objective_score

α 随用户成熟度动态调整(α 范围 [0.1, 0.7],客观分永远至少占 30%):

  • 新用户 (saves < 10): α ≈ 0.1 → 客观质量主导
  • 成熟用户 (saves > 30) + 高校准: α ≈ 0.5 → 主观客观各半

Objective Score 信号:judge_score_avg (0.35) + citation_velocity (0.25) + venue_tier_avg (0.20) + h_index_norm (0.20)

Subjective Score 信号:save_count (0.40) + recency (0.25) + track_spread (0.20) + first_author_ratio (0.15)

锚点分层:Core Anchor (>= 0.7) / Rising (0.4 ~ 0.7) / Background (< 0.4)

7. Search Hit Overlay

搜索结果中标注锚点作者命中,提供 anchor_hits summary + by_author 结构。

前端展示:

  • PaperCard 作者名旁显示锚点 badge + track 计数
  • 搜索结果顶部统计栏显示命中率

8. 合作网络 + 机构关系

paper_authors 构建 co-author 共现图,按 authors.affiliation 分组做机构聚类。

9. 探索机制

  • Community Picks: 纯客观质量推荐,不依赖用户行为
  • Blind Spot Detection: 检测用户哪些 track 缺少锚点覆盖
  • Serendipity Injection: 搜索结果中混入 10-15% 非锚点但客观质量高的论文

10. API 端点

方法 路径 说明
GET /research/scholars/discover 锚点发现
GET /research/scholars/community Community Picks
GET /research/scholars/network 合作网络图
GET /research/scholars/blind-spots 盲区检测
POST /research/scholars/{author_id}/resolve 触发 S2 API 解析

11. 系统架构

                    ┌─────────────────────────────────┐
                    │     Source Authority Layer        │
                    │                                   │
                    │  1. Source Registry                │
                    │  2. Relation Graph                 │
                    │  3. Authority Propagation          │
                    │  4. Anchor Classifier              │
                    │  5. Observer Projection             │
                    └─────────────────┬─────────────────┘
                                      │
              ┌───────────────────────┼───────────────────────┐
              ▼                       ▼                       ▼
        DailyPaper              Scholar Tracking        推荐系统

第三部分:实施计划 (TODO)

P0 — 最小闭环:建表 → 回填 → 发现 → 展示

数据层

  • models.py: 新增 AuthorModel + PaperAuthorModel
  • Alembic 迁移脚本,创建 authors + paper_authors 表
  • paper_store.py: normalize_author_name() + get_or_create_author() + link_paper_authors()
  • paper_store.py: 修改 upsert_paper() 同步写入 paper_authors
  • 回填脚本: scripts/backfill_paper_authors.py

评分服务

  • anchor_service.py: objective_score / subjective_score / compute_calibration / compute_alpha / anchor_score / discover_anchors / community_picks

API 端点

  • GET /research/scholars/discover

前端

  • 替换 mock 数据为真实锚点列表
  • AuthorCard 组件 + Community Picks + Blind Spots

P1 — 搜索增强:Search Hit Overlay

  • compute_anchor_hits() — 搜索结果与用户锚点交叉匹配
  • 搜索端点附加 anchor_hits
  • PaperCard 作者名旁显示锚点 badge
  • AnchorCoverageBanner 组件

P2 — 合作网络 + S2 解析

  • build_coauthor_network() — nodes + edges + clusters
  • resolve_author_profile() — S2 API 解析补全
  • GET /research/scholars/network
  • POST /research/scholars/{author_id}/resolve
  • 前端 Network tab

P3 — 智能推荐 + Context Engine 集成

  • AnchorBoostStep — 锚点作者论文 judge score boost
  • detect_blind_spots() + serendipity_injection()
  • Context Engine 搜索排序加入 anchor_boost

P4 — 高级功能(远期)

  • Author Momentum: 锚点分数随时间变化追踪
  • Citation Chain Discovery: 锚点作者频繁引用的作者 → 潜在新锚点
  • Track-Author Matrix / Institutional Heatmap / Anchor Alert / Diversity Warning

参考文献

算法基础

  • Page, L., et al. (1999). The PageRank Citation Ranking.
  • Kleinberg, J. M. (1999). Authoritative Sources in a Hyperlinked Environment. JACM.
  • Gyöngyi, Z., et al. (2004). Combating Web Spam with TrustRank. VLDB.
  • Sun, Y., et al. (2011). PathSim: Meta Path-Based Top-K Similarity Search. VLDB.
  • Dong, Y., et al. (2017). metapath2vec: Scalable Representation Learning. KDD.
  • Wang, X., et al. (2019). Heterogeneous Graph Attention Network. WWW.

学术影响力度量

  • Hirsch, J. E. (2005). An index to quantify scientific research output. PNAS.
  • Radicchi, F., et al. (2008). Universality of citation distributions. PNAS.
  • Wang, D., et al. (2013). Quantifying Long-Term Scientific Impact. Science.

PaperBot 现有实现

  • src/paperbot/domain/influence/calculator.py — PIS 评分计算器
  • src/paperbot/domain/influence/analyzers/dynamic_pis.py — 引用速度分析
  • src/paperbot/domain/influence/weights.py — 评分权重配置
  • src/paperbot/domain/scholar.py — Scholar 领域模型
  • config/top_venues.yaml — Venue tier 配置
  • config/scholar_subscriptions.yaml — 种子锚点配置