PulseAugur
实时
方法 · 聚类

PulseAugur 的 AI 新闻聚类原理

从 200+ 来源到每日约 100 个聚类 —— 决定哪些故事进入简报的去重、评分与把关流程。

作者: Chris Valentine · 更新于

为什么要聚类

挑过去一周的任意一条 AI 新闻 —— OpenAI 的发布、Anthropic 的研究投放、 某项政策文件、一份外泄的路线图。然后清点写过它的渠道:厂商博客、 纽约时报稿、Stratechery 的后续、与之同时发布的 arXiv 论文、Hacker News 帖子、三个 subreddit 的 Reddit 反响、四条来自 实验室人士的 Bluesky 短贴、两条 Mastodon 线程、TLDR AI 的一条要点、 Smol AI 的一段摘要,再加上不可避免的 Substack 热议。 针对同一事件,共有十六个来源

全部读完,你就把同一个故事吸收了十六次。只浏览算法推送给你的那几条, 则会看到同一个标题三次,反而漏掉了那位真正建造此物的工程师写的最有趣 的 Bluesky 线程。无论哪种方式,真正的问题都是去重失灵 —— 而写下那 十六篇稿件的任何一方都没有动机去解决这个问题,因为每家媒体都希望你停 留在它自己的那一篇上。

PulseAugur 的判断:AI 新闻的最小单元不是文章,而是事件。把一个事件 的所有角度聚合到同一个页面,按权威性给来源列表排序,先链接到原始的 arXiv 论文或厂商博客,新闻媒体的转述放在第二位。这一改动意味着读者 能以事件的节奏推进对行业的阅读,而不是被标题的节奏牵着走。

抓取管线

每十五分钟一个 worker 轮询来源列表 —— RSS、Atom、JSON 信息流、 联合发布端点,以及开放接口的社交平台时间线。每条候选项目都被归一化为 统一的结构:idtitletitle_en (来源非英语时机器翻译)、bodyurl_originallangpublished_atsource_idraw_json。翻译只对标题执行 —— 正文内容保留源语言, 我们在标题空间上跨语言聚类。

项目归一化之后,重复检测器决定该项目应归入现有聚类还是开启一个新聚类。 检测器使用下一节所述的多信号栈。新聚类会触发一次 LLM 富化处理, 写入聚类摘要、AI 影响简述以及新闻价值分级。已有聚类则追加新成员 并重算其分数;若聚类越过加倍阈值(成员数自上次摘要以来翻倍),则 LLM 富化处理会对扩展后的语料重跑一次。

整个端到端循环从一次新的源轮询到聚类出现在实时简报上,大约耗时 两到四分钟。聚类分数按滑动窗口对语料每小时重算。

去重

重复检测器对现有聚类集合依次运行四组信号栈:

  1. 规范 URL 匹配。小写化主机名,剥离 UTM 与跟踪参数, 遵守页面的 <link rel="canonical"> 标签,解析短链接。 若两个项目解析到相同的规范 URL,则视为同一份成品,简单聚类。这一层 干净地捕捉了联合发布图谱。
  2. 标题 shingling。在归一化后的标题空间做 N-gram 重叠。 即便 URL 不同,"OpenAI Announces GPT-5" 与 "GPT-5: OpenAI's Latest Model" 也会被识为同一故事。shingle 阈值调得足够高,避免将关于同一 实体的不同故事(同一天 Anthropic 两篇互无关联的文章)聚到一起。
  3. 跨语言匹配。非英语标题在抓取时翻译为英语后,翻译后 的标题空间走同一套 shingling。一篇世界报关于 OpenAI 发布的 稿件会与纽约时报的稿件聚到同一个聚类,即便源语言不同。 这一层正是聚类页上跨语言报道的来源 —— 法语、德语、日语、中文与 西班牙语的报道都和英语原文同处一个聚类。
  4. 向量相似度。兜底层。对最近聚类集合计算标题与首段的 嵌入,余弦相似度高于阈值则触发标题-shingle 层未捕获的聚类候选 (改写的标题、关于同一底层事件的观点稿)。

每一层要么命中(项目加入已有聚类),要么放行(项目移到下一层)。 若四层都放行,则该项目成为新聚类。该信号栈已在 PulseAugur 从零增长到 22,000+ 聚类的语料上得到验证;抽样检查中,误报率(两个不同故事被错 聚到一起)低于 2%。漏报率(同一故事被拆到多个聚类)略高,约 5% —— 我们刻意倾向保守:宁愿展示两个结果上是同一事件的聚类,也不要让一个 聚类把两个事件混为一谈。

评分

每个聚类带有一个 0 到 100 的 display_score。在显示数字 背后,有六个维度参与计算。每个维度由自己的管线阶段计算,归一化到 0–1 区间,然后通过 sigmoid 合并为 raw_score,再缩放为显示的 display_score。这些维度为:

  • dim_authority —— 来源公信力。 对聚类内每个成员的来源权威性做加权求和。三条 TIER_1 来源的聚类 胜过十二条 TIER_3 来源的聚类。这一维度防止一条爆款 Reddit 帖子 排在被三家主流媒体报道的厂商公告之上。
  • dim_cluster_strength —— 相互印证。 有多少独立来源同意该事件。独立指不同的发布方,而非不同 的 URL —— Hearst 旗下三家媒体转发同一通讯稿在此维度仅计为一个 来源。这一信号衡量"是否有多个互不相关的主体在确认此事"。
  • dim_originality —— 原始 vs. 回声。 聚类的主导来源是一手报道还是对早前来源的转述。我们提升厂商博客、 arXiv 论文及原创调查稿;降权完全由"X 报道 Y 说"式覆盖构成的聚类。
  • dim_headline —— LLM 判定的标题强度。 聚类摘要调用同时让模型按约束尺度给故事的标题强度打分。 意外地有用 —— 捕捉到"这条到底有不有趣抑或是常规公告"的信号, 这是纯聚合度量难以做到的。
  • dim_buzz —— 归一化的社交速度。 Hacker News 的点赞速度、Reddit 的评论密度、Bluesky 与 Mastodon 的转发率。归一化使得周日凌晨两点爆出的故事不因撞上冷清时间线 而被惩罚。
  • dim_velocity —— 时间衰减的参与度。 聚类从创建到当前成员数增长的速度。一小时内积累十个来源的聚类排 在用一周时间积累同样十个来源的聚类之上。

sigmoid 合并防止任一单一维度独占主导;把关层 (Lever B 处理离群拒绝、Lever C 处理分级质量、Lever D 处理模糊检测) 随后施加针对各级的降级,再持久化分数。完整实现在 rank/score.py —— 每个参数都附有解释其控制项及阈值调 优所依据数据的文档字符串。

新闻价值分级

在数字分数之外,每个聚类带有新闻价值分级 —— 一个由 LLM 判定的标签,经过质量门槛后成为持久化的有效分级:

  • frontier_release(前沿发布)。来自前沿级实验室的 重要模型发布或能力公告。需 ≥3 个互证来源且 TIER_1 权威性均值通过, 否则降级为 significant
  • significant(重要)。非模型发布但塑造行业格局的 新闻 —— 大规模融资、高管变动、监管行动、重大企业落地。
  • research(研究)。论文、对齐成果、评测套件、 方法论突破。需 ai_relevance ≥ 0.6 且 ≥3 个来源通过, 否则降级为 tool
  • tool(工具)。产品发布、功能上线、开发者工具, 以及有用但不塑造格局的报道。
  • commentary(评论)。观点、分析、回顾稿。当 LLM 标记出模糊检测信号(撰稿人在推测而非报道)时,从 significant 降级到此层。
  • meme(段子)。偏题、爆款但缺乏实质,或被 LLM 拒绝 摘要。从默认简报视图中过滤。

每个聚类有两个分级字段以便审计透明。 newsworthiness_bucket 保存 LLM 的原始标签; effective_bucket 保存通过门槛后实际用于排名与下游消费的 标签。当二者出现差异时,bucket_reason 字段记录降级轨迹 —— 例如 "[lever_c_demoted from research: ic=2 ai=0.45]" 告诉你该聚类原本 被分为 research,但未通过相互印证门槛。完整的编辑透明立场见 /editorial-standards

我们如何标注来源

每个聚类页都会列出馈入该聚类的每一篇源文章 —— 发布方名称、署名、 源语言标题及适用时的机器翻译英文标题、发表时间戳,以及一个表示来源权 威权重的 TIER 标记。每条成员行的链接指向原始来源 URL, 而非 PulseAugur 中转。

同一份引用图谱以机器可读形式通过聚类页 JSON-LD 中的 schema.org/NewsArticle.isBasedOn 提供。解析结构化数据的 爬虫与 AI 引擎可以直接看到引用列表,这正是 PulseAugur 聚类页能在 Perplexity、ChatGPT、Gemini 与 Claude 回答特定 AI 事件查询时,被作为 汇总型来源加以引用的原因。

聚类摘要本身由机器生成。我们用一个 AI 标记明确标注,并在每条摘要后注明撰写该摘要的 LLM(根据聚类的不同, 可能是 Gemini 2.5 Pro、Claude Opus 4.7 或 GPT-5)。更正政策: 24 小时内确认,48 小时内修复,并刷新 dateModified 时间戳 以便联合索引同步变更。对你认为我们写错了的任何聚类,请发邮件到 [email protected]

为什么这比单编辑摘要更强

单编辑摘要类产品 —— The BatchImport AILast Week in AISmol AI,乃至 Stratechery —— 在它们擅长的事情上表现出色。一名编辑每周挑出一小组故事,写下原创分析, 交付一份连贯的阅读体验。PulseAugur 并不试图取代它们。

PulseAugur 覆盖的形态不同。单编辑摘要按设计是周更 —— 因为写真正的分析需要时间。它们每期通常呈现五到十个故事。 它们的选取偏好正是编辑本人的品味,这是特性,而非缺陷。

PulseAugur 是持续的(源放出后数分钟内聚类出现)、 广覆盖的(每日约 100 个聚类出现在默认简报中)、 跨语言的(同一事件下一篇法语世界报、一篇德语 Heise 与一篇日语日经都聚到一起)。受众不同、阅读节奏 不同、决策不同。若你想要每周一篇精炼长文,请读 The Batch; 若你想看到行业里此刻真正在流转什么,请读 PulseAugur。最佳做法是两者并用。

聚类相对单编辑策展所具备的结构性优势在于:规模不会削弱信号。每周挑十 个故事的编辑可以对每一条精心撰写,但难以覆盖长尾。一条持续处理 200+ 个来源的聚类管线,在结构上就看见了长尾;评分层处理"它是否真的有趣", 无需人类逐一分流候选。两种形态都各有价值;PulseAugur 填补了单编辑形 态结构上无法填补的空位。

关键问题

PulseAugur 如何对 AI 新闻进行聚类?

它持续抓取 200+ 个来源,用四层检测器把每个项目与已有聚类集去重,为每个 聚类打 0–100 分,再把结果把关收敛到每日约 100 个聚类进入简报 —— 于是 一则故事在众多媒体上的报道会成为一个排过名的页面,而不是一堆近乎重复的 标题。

PulseAugur 如何去重 AI 新闻故事?

四个信号栈按顺序运行:规范 URL 匹配(捕获转载图谱)、标题-shingle (规范化标题上的 n-gram 重叠)、跨语言匹配(翻译后的标题走同一套 shingle)、以及嵌入相似度(改写兜底)。该管线刻意偏保守 —— 误报率 低于约 2%(不同故事被错聚),漏报率约 5%,宁可拆分也不混淆。

聚类是如何排名的?

每个聚类带有一个 0 到 100 的 display_score。六个维度各自在 自己的管线阶段计算、归一化到 0–1,再经 sigmoid 组合成一个原始分并缩放为 显示数字 —— 因此排名反映的是多信号的新闻价值,而不是单纯的时新性或点赞。

PulseAugur 会把非英语 AI 新闻聚到一起吗?

会。非英语标题在抓取时翻译为英语,并走同一套标题-shingle,因此同一事件的 法语、德语、日语、中文与西班牙语报道会与英语原文落在同一个聚类 —— 这正是 聚类页上跨语言报道背后的那一层。