信息源锚点模型:理论建模、实施设计与实施计划。
从噪声信息流中发现高质量锚点,建模信息源之间的权威性传播关系,并个性化标定锚点价值。
这是一个异构信息网络中的权威性发现与传播问题(Authority Discovery in Heterogeneous Information Networks)。
它结合了三个经典问题:
- 信号检测(Signal Detection)— 从噪声中识别高质量信号
- 权威性传播(Authority Propagation)— PageRank/HITS 的核心思想:权威性不是孤立的属性,而是通过关系网络传播的
- 锚点标定(Anchor Calibration)— 锚点不是绝对的,是相对于观察者(用户研究方向)和时间的
每天面对的信息流本质是一个低信噪比信道。arXiv 每天 ~500 篇 CS 论文,绝大多数是噪声(对特定研究方向而言)。锚点就是这个信道中的高信噪比节点 — 它们不只是自身有价值,而且它们的存在能帮你校准其他信号的价值。
一个好的锚点的本质特征是:它能减少你评估其他信息时的不确定性。
例:当你知道 Dawn Song 在做 AI Safety,她的新论文就是一个锚点 — 不只因为这篇论文好,而是因为它帮你快速判断:
- 这个方向是活跃的
- 这些合作者值得关注
- 这些 venue 是相关的
- 这些被引论文可能是基础工作
锚点的信息论定义:锚点是观测到后能最大程度降低你对信息空间不确定性的节点。
H(信息空间 | 观测到锚点) << H(信息空间)
其中 H 是信息熵。锚点的质量 ∝ 互信息 I(锚点; 信息空间)
这就是 PageRank 的核心洞察:权威性不是孤立属性,而是通过关系网络传播的。
锚点学者 ──发表于──→ 锚点 venue
│ │
└──引用──→ 锚点论文 ──被引用──→ 新论文(被锚点网络"背书")
│
└──合作──→ 新学者(通过合作关系获得"锚点传播")
关键:锚点不是单个实体的属性,是整个网络中相对位置的函数。
同一个学者,对研究 NLP 的人和研究 Systems 的人是完全不同的锚点。锚点评分实际上是一个四元函数:
anchor_score(source, domain, time, observer) → [0, 1]
- source: 信息源实体(学者/venue/网站/repo)
- domain: 领域上下文(安全/ML/系统/SE)
- time: 时间窗口(最近 6 个月 vs 历史全量)
- observer: 用户的研究方向和偏好
定义异构信息网络
-
$V$ 是节点集合 -
$E \subseteq V \times V$ 是边集合 -
$\phi: V \rightarrow T_V$ 是节点类型映射函数 -
$\psi: E \rightarrow T_E$ 是边类型映射函数 -
$|T_V| + |T_E| > 2$ (异构性条件)
节点类型
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 = {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
对一个 source 节点
其中
| 分量 | 权重 | 说明 |
|---|---|---|
|
|
0.30 | 基础门槛,但不应主导 |
|
|
0.35 | 最重要的信号 — 网络效应 |
|
|
0.15 | 区分活跃 vs 历史锚点 |
|
|
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)
边类型传播权重:
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))
| 层级 | AnchorScore 区间 | 含义 | 系统行为 |
|---|---|---|---|
| 核心锚点 (Core Anchor) | >= 0.8 | 领域奠基者/顶会常客 | 主动追踪,新论文自动推送,搜索结果置顶 |
| 活跃锚点 (Active Anchor) | 0.5 ~ 0.8 | 当前产出高、引用增速快 | 纳入 DailyPaper 优先排序 |
| 潜力锚点 (Emerging Anchor) | 0.3 ~ 0.5 | 新兴学者/新趋势 | 标记关注,定期复查 |
| 普通源 (Background) | < 0.3 | 背景噪声 | 仅在搜索命中时展示 |
特征定义:内在质量不高,但动态信号异常强。
Scholar 潜力信号:
| 信号 | 检测方法 | 示例 |
|---|---|---|
| 顶会突破 | 首次在 tier1 venue 发表 | 博士生的第一篇 NeurIPS |
| 锚点合作 | 首次与核心锚点合作 | 新学者与 Dawn Song 合著 |
| 引用爆发 | 近 6 个月引用增速 > 同年龄段 2σ | 一篇论文突然被广泛引用 |
| 跨领域迁移 | 原本在 A 领域,开始在 B 领域发表 | Systems 学者开始做 ML Security |
| 代码影响力 | 关联 repo stars 快速增长 | 论文 repo 一月内 1000+ stars |
- vs. PageRank: N(s) 分量是 PageRank 在异构图上的扩展,增加边类型权重和 Q(s) 先验初始化
- vs. HITS: 可更好区分"综述型学者"(hub 分高)和"原创型学者"(authority 分高),建议 Phase 2 考虑
- vs. TrustRank:
scholar_subscriptions.yaml和top_venues.yaml是天然的种子锚点 - vs. Metapath2Vec / HAN: 对 PaperBot 规模,显式 PageRank 比深度图模型更实用
| 已有组件 | 对应锚点模型分量 | 当前限制 |
|---|---|---|
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 评分 |
- 无 Source 统一注册 — Scholar/Venue/Repo 是独立的,没有统一的
Source抽象 - 无网络级评分 — 所有评分都是实体级的,没有权威传播
- 无 Source 间关系建模 — coauthor 数据已有但未用于评分
- Judge 评分单向流 — Judge 评完论文后分数不反哺到学者/venue 的权威
- 搜索排序忽略 source —
_score_record()不考虑论文作者/venue 的锚点地位
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 权重
└──→ 推荐系统: 基于用户锚点偏好推荐新论文
从理论模型到可运行代码的落地方案。
-- 作者实体表
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)
);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()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)
搜索结果中标注锚点作者命中,提供 anchor_hits summary + by_author 结构。
前端展示:
- PaperCard 作者名旁显示锚点 badge + track 计数
- 搜索结果顶部统计栏显示命中率
从 paper_authors 构建 co-author 共现图,按 authors.affiliation 分组做机构聚类。
- Community Picks: 纯客观质量推荐,不依赖用户行为
- Blind Spot Detection: 检测用户哪些 track 缺少锚点覆盖
- Serendipity Injection: 搜索结果中混入 10-15% 非锚点但客观质量高的论文
| 方法 | 路径 | 说明 |
|---|---|---|
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 解析 |
┌─────────────────────────────────┐
│ Source Authority Layer │
│ │
│ 1. Source Registry │
│ 2. Relation Graph │
│ 3. Authority Propagation │
│ 4. Anchor Classifier │
│ 5. Observer Projection │
└─────────────────┬─────────────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
DailyPaper Scholar Tracking 推荐系统
数据层
-
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
-
compute_anchor_hits()— 搜索结果与用户锚点交叉匹配 - 搜索端点附加
anchor_hits - PaperCard 作者名旁显示锚点 badge
- AnchorCoverageBanner 组件
-
build_coauthor_network()— nodes + edges + clusters -
resolve_author_profile()— S2 API 解析补全 -
GET /research/scholars/network -
POST /research/scholars/{author_id}/resolve - 前端 Network tab
-
AnchorBoostStep— 锚点作者论文 judge score boost -
detect_blind_spots()+serendipity_injection() - Context Engine 搜索排序加入 anchor_boost
- 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.
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— 种子锚点配置