为 Google Content Categories v2 的 1091 个网站分类,通过深度搜索引擎挖掘找到每个分类最具代表性的 20 个域名。不是搜"谁在写文章",而是搜"文章里推荐了谁"。
直接提取搜索结果页的域名,拿到的是"写评测文章的网站"。深入文章内容后,才能拿到真正属于该分类的网站。
SERP API 返回的搜索结果域名 — 这些是"讨论者"
从文章内容中提取被推荐的域名 — 这些是"被讨论者"
每个分类经过 query 生成、SERP 搜索、文章抓取、域名提取、7 层过滤、交叉排名,最终输出 Top 20 域名。
/Arts & Entertainment/Online Video/Anime & Manga
<a href> 中提取外链域名,记录每个域名被哪些文章引用。
R6 的教训:真正的瓶颈往往是参数级别的。SERP 从 10→50、文章从 8→12,什么算法都没改就完美收敛了。改算法之前先问:是不是数据喂少了?
每一层只解决一类噪音,后加的层不改前面的逻辑。出了问题能精确定位是哪一层的锅。
噪音不是实体的固有属性,是实体与上下文的关系。同一个 cnn.com 在 /News/Other 是信号,在 /Programming 是噪音。黑名单要感知上下文。
永远不要第一次就跑全量。先采样 50 跨垂直暴露问题,迭代收敛后再上全量 1091。
27 个垂直各至少 1 个 + 加压脏域名高发类目(Health/Finance/Shopping),生成 sample50.txt
用 deep_worker.py --list sample50.txt 跑 50 个分类,存入 progress.json
noise_candidates.py 8 信号打分,输出 Red/Yellow/Green 嫌疑报告
50 个分类全部重置为 pending,用新 filter 重新跑一遍,对比收敛指标
用新 filter 过旧数据,统计挡了什么、误伤了什么。确认"所有被挡均为合规清扫"
对嫌疑报告逐条拍板(A 挡/B 保留/C 改算法),修改后跑单元测试
avg ≥ 19 / min ≥ 10 / 满 20 率 ≥ 90% / 0 域名分类 = 0 / noise_candidates 嫌疑无新增?
回到 Phase 3 继续迭代
(R1→R7.5 共迭代 8 轮)
上全量 1091
全量跑完后再做一次 noise 检测进入下一轮
任何算法改动必须先在 3-5 个代表性分类 micro-bench(含 niche 类目)。候选数下降 >50% 立即回滚。但注意:micro-bench 单次抽样不能完全代表 production,SERP 方差 ±20% 是常态。
不选版本,选最优结果。对每个分类取历史 5 个版本里的最优,但加污染率检查。
从 R1 的单分类验证到 R9 的全量交付,每一轮解决一类问题,逐步收敛。
从 Selenium+Startpage 切到内部 SERP,扩第一批噪音黑名单,normalize_domain 上线
扩 INFRA_SUFFIX_PATTERNS(20 个云存储/静态托管后缀),回归旧 done 分类全部重置
sample_50.py 分层采样 + noise_candidates.py 自动检测器 + deep_worker --list 参数
修 www. 归一化 bug、JS 代码片段误抽 bug、GOV 垂直白名单机制上线
NOISE_DOMAIN_PATTERNS 上线(glamour/vogue stem 通配),FINANCE_COMPARE_LEAVES 金融 query 重写
引入"n_citing≥2"算法(要求被 ≥2 篇文章引用),90% 域名天然只被 1 篇引用 → 数据崩盘。完全回滚到 R5。
找到真正瓶颈:SERP 10→50 + MAX_ARTICLES 8→12。不改算法,参数调优。
47 个跨垂直噪音清扫后上全量 1091。4h1min 跑完,1067 done + 21,132 sites。
新增 97 个 NOISE 域 + 2 个 stem。引入上下文感知过滤:/Other 子叶豁免 R8 NOISE,避免误伤兜底类目。
加性白名单策略治理 4 个硬骨头。Smart Merge 跨版本拼接历史最优 + 污染率检查。