从信号到洞察(Signal → Insight)
把「找外文好文 → 判断值不值得翻 → 翻译 → 加上原文没有的第二层解读」
这条链子固化成可复用流水线。
核心设计原则:领域知识全部外置到 domains/<name>.json,
脚本本身不含任何领域词表。换领域 = 换一个 JSON,代码一行不改。
一、什么时候用
- 需要持续从外文资讯里找值得编译的稿子
- 需要判断一篇外文文章值不值得翻(而不只是"好不好")
- 翻译完还要加解读层——读者不只想知道发生了什么,还想知道意味着什么
- 想让选题判断从市场里学,而不是靠人拍权重
不适用:单篇的即时翻译(直接翻译即可,不要启动流水线)。
二、流水线总览
① 建域 domains/<name>.json 领域四张表
↓
② 采训练集 train_data.py 抓头部号历史文章(阅读量=标签)
↓
③ 自我训练 topic_model.py 号内分位 → lift 排行 → 权重
↓
④ 扫源 radar.py 三通道抓取 → 相对排序 → 四张表
↓
⑤ 质量评估 quality_eval.py 六维度绝对评分 → 优先序
↓
⑥ 人工选定 从 Top 10 里挑(不按分数,按判断)
↓
⑦ 翻译 + 解读 真笔翻译 + interpret 六维度
↓
⑧ 交付
④ 是召回,⑤ 是精度。不要跳过 ④ 直接做 ⑤,也不要只做 ④ 不做 ⑤。
三、快速开始(已有预设域)
PY="C:/Program Files/Python313/python.exe" # 受管 Python 缺 requests,必须用系统 Python
S="~/.workbuddy/skills/chenlin-signal-to-insight/scripts"
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY # 代理常指向失效端口,必须清
# 1. 扫源(相对排序)
$PY $S/radar.py --domain ai --out out
# 2. 采训练集 + 自我训练(只需跑一次,之后定期重跑)
# ★ 训练集必须和 radar 用同一个 --out 目录,否则市场定位会静默降级
$PY $S/train_data.py --domain ai --out out
$PY $S/topic_model.py --domain ai --out out
# 3. 质量评估(绝对评分,用训练出的权重校准)
$PY $S/quality_eval.py --domain ai --out out --top 40 --calibrate
# 4. 源库体检(每季度)
$PY $S/verify_sources.py --domain ai
可用域:ai / biotech / finance / geoenergy / anti_aging / psychology / product_manager。
把上面命令里的 --domain ai 换成任意域即可;源库、实体、通用词、时效衰减全部随域切换。
Python 环境:必须用 C:/Program Files/Python313/python.exe。
受管的 3.13.12 缺 requests 模块。
网络:必须先 unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY,
否则代理指向失效端口 127.0.0.1:52777,所有请求超时。
长任务:RSS 抓取 100+ 源约 80-100 秒,超过 Bash 前台 120s 限制时
用后台执行。
四、换领域:只需替换三张表
| 表 | 字段 | 说明 |
|---|---|---|
| 源库 | sources[] |
分层(T0–T5/TP/cross)、RSS、是否免过闸门 |
| 实体 | entities{} |
中英对照别名,用于中文适配与 lift 统计 |
| 关键词 | keywords[] |
中文侧检索词,生成训练集 |
| 领域泛称 | generic_terms[] |
本领域的泛化名词,不配当区分性证据 |
不用改的:
- 六个质量维度、五条解读红线 —— 领域无关
- 16 个标题句式特征 —— 中文公众号通用句式
- 计分模型的公式与系数
- 语言级通用词表(lib_domain._EN_STOP)—— 与领域无关
⚠ generic_terms 是新开域第一件要填的事。AI 域填了 32 个
(Agent / Model / LLM / Token / Prompt / RAG / Benchmark / Harness…)。
不填的话,该领域的热门泛称会被当成有效证据,判据系统性偏松:
随便一篇提到「Agent」的论文都能靠它拿到「同主题有人写」。
判据里区分「语言级通用词」(lib 里,跨领域通用)和
「领域泛称」(JSON 里,换域就换)——同一个词在这个域是泛称,
在别的域可能是正经专名。
已有预设(2026-09-03 实测验源后的真实状态):
| 域 | 状态 | 可用/总源 | 说明 |
|---|---|---|---|
ai |
已验证可用 | 107/107 | 含 Karpathy 推荐的 HN 2025 年度 92 博客。可直接投产 |
biotech |
骨架·不足 | 7/12 | NEJM/Lancet/NIH/Fierce 均 403(疑反爬) |
finance |
骨架·严重不足 | 4/14 | BIS 404;VoxEU/IMF/PIIE 403;10 个不可达或反爬 |
geoenergy |
骨架·严重不足 | 3/11 | IEA/ISW 403;Carnegie/SIPRI 404;4 个不可达 |
骨架域目前只能当模板,不能直接投产——源数太少,会漏掉大量重要信息。
要用它们,第一步是补源到 40+。
403 不等于源已死:多数 403 是 WAF / 反爬拦截(NEJM、Lancet、IMF、
VoxEU、PIIE、Marginal Revolution、IEA、ISW 都是这类)。处置是换 UA /
换接口 / 走镜像,不是删源。所以域配置里保留 URL、只置
enabled: false,等换了抓取策略再回来重试。
新建域:cp domains/biotech.json domains/<new>.json,改 domain/name_cn
与四张表(含 generic_terms),然后跑 verify_sources.py 验源。
五、三个必须记住的设计决策
1. 号内分位数,不是全局分位数(自我训练的生命线)
各号体量差异极大(AI 域实测:财联社中位阅读 69,383 vs CVer 168,差 400 倍)。
用全局分位切正负样本,学到的会是「号有多大体量」而不是「选题好不好」。
2. 市场定位 = 选题新颖度,不是实体提及率
目标是找能翻的文章。但判据不能是「这个实体在国内被提得多不多」——
实体高频 ≠ 这篇报道被写过。
判据下沉到报道粒度:同一条中文标题是否同时命中该候选的多类特征
(实体 2 / 显著数字 2 / 英文专名 1),再看共现是否罕见。
分档:甜点 +2.6(该报道尚无中文版,命中特征在标题里)
|弱甜点 +1.6(命中特征仅见于摘要)|空白 +0.8(待验证)|红海 0(已有中文版)。
三道闸门与完整踩坑记录见 references/02-quality-rubric.md 一之二节。
改这个模型前先读 lib_domain.judge 的注释——里面记了四个实测翻车。
3. 软文用乘性降权(×0.35),不是固定扣分
固定扣 3.0 压不住 T0 权威加成。实测 MIT TR 的定制内容线原始分 12.6,
扣 3.0 后仍有 9.6 稳居第二。改成乘性后直接掉出推荐位。
4. 市场定位的频次只认训练集量纲,API 抽样只能定性
market_score 的阈值(甜点 ≤1.2 / 饱和 >4.0)是每千篇提及率量纲。
红狐 API 抽样返回的是「按该实体检索出的命中条数」——检索本身就按实体搜,
命中率天然虚高,且每关键词上限 100 条,与训练集量纲完全不可比。
2026-09-03 实测:走了 API 抽样路径后,绝大多数实体被误判为「红海」,
表二(甜点区)直接归零,而报告上没有任何提示。
修法:
- 训练集路径输出精确数值(分母 = 语料千篇数)
- API 抽样路径只做定性——命中即取甜点上界,判「有覆盖」,不再产出虚假精确值
- 报告头部必须打印 市场定位数据来源,写清走的是哪条路
- 训练集必须和 radar.py 用同一个 --out 目录,否则会静默降级
5. 推荐位要有跨源多样性上限
2026-09-03 实测:高频更新源(Simon Willison)一人占表一 4/7。
推荐位被单一源刷屏,就失去了「跨源交叉印证」的意义。
表一 per_source=2,表四放宽到 10(arXiv 全同属一个源,用默认值会只剩 3 条)。
六、解读层(翻译之后的关键一步)
两层铁律:事实层(60-70%,只能来自原文)+ 解读层(30-40%,必须标注是推断)。
解读层从六个维度里选 3-4 个写,不要凑齐六个:
趋势线 / 受影响方 / 二阶后果 / 反直觉点(优先级最高) / 与本国读者关联 / 证伪条件。
五条红线:不编造数据 | 不给确定性预测 | 不做价值判断 |
不用「颠覆」「革命」| 每条判断能追溯到事实层的某一句。
完整框架见 references/03-interpret-framework.md。
七、参考文档
| 文件 | 内容 |
|---|---|
references/01-source-tiers.md |
七层分级、三条判定纪律、源库体检 |
references/02-quality-rubric.md |
六维度定义、软文识别、四类失效模式 |
references/03-interpret-framework.md |
解读层六维度 + 五红线 + 自检清单 |
references/04-self-training.md |
号内分位、lift 排行、AI 域实测结果 |
八、已知限制(必须如实告知读者)
- 软文正则会误伤。可靠判据只有 URL 含
/insights/或页面有
"Sponsored" 标记,必须人工确认。 - 训练集只看标题不看正文,标题党会污染 lift 结果。
- lift 是相关性不是因果。样本偏小时(AI 域 278+333 篇)
先看一两个周期再全量采用权重。 - 部分源国内网络不可达(substack 系、The Atlantic 等),
靠 HN 发现层兜底,属覆盖盲区。 - 可验证性与编译可行性多为「待人工」,需读正文才能定论。
- 骨架域(生物/金融/地缘)源库不足 20 个,覆盖有系统性缺口,
直接用会漏掉大量重要信息。 - 市场定位依赖训练集。没有
train_raw_<domain>.json时会降级到 API
抽样,此时只能定性判断「国内有无覆盖」,甜点区判定不可信。
报告头部会写明走的是哪条路径,看到「API 抽样」请当该维度本轮失效。 - 推荐表是候选池不是精选。表二/表三仍可能混入 Show HN 之类的产品发布,
最终必须走「人工选定」——不按分数,按判断。 - 选题新颖度的召回偏低,这是刻意的(2026-09-03 实测标定)。
「红海」这一档从旧判据的 190 条降到 1 条,人工逐条复核确认:
旧判的红海里绝大多数是假阳性,新判剩下的 1 条是真的。
宁可召回低——错误判红海会埋掉一篇没人翻过的好文章,
错误判甜点只是多读一篇,两种错误的代价不对称。
但这也意味着:一篇报道如果已被中文圈翻译过,而我们没有抓到相同数字,
它会被判成甜点。人工选定时仍需扫一眼。 - 弱甜点的证据强度有限,两种情形都会落到这里:① 命中特征只在摘要里
(论文拿 Qwen3 当基线模型就是这类);② 只有一个英文专名命中,没有实体
或数字支撑(Clean / Commerce / Game 之流)。两者都只说明国内有人提这个
实体,不代表有人关心这篇报道。排在甜点之后是对的,但不该同等对待。
10b. 甜点 ≠ 独家:判据识别不了分析深度(2026-09-03 实地验证)。
首个走完闭环的样本(MIT TR 讲 OpenAI 安全文化的那篇)判为甜点,
翻完回查 6991 篇语料:提到 Hugging Face 的 12 篇里 11 篇讲的是
英伟达收购传闻,只有 1 篇快讯里带了一句「OpenAI 公布入侵复盘」。
——中文圈已经覆盖了事件层,只是没走到归因层。
判据能识别数字差异、能识别报道粒度,但分不清这两层。
所以:甜点档只代表「值得翻」。发布前花 1 分钟正则搜一遍同实体语料,
确认不是快讯已覆盖过的事件层。详见references/02-quality-rubric.md
「实地验证」小节。 - 领域泛称需要人工维护。
domains/<domain>.json的generic_terms
决定了哪些词不配当区分性证据。新开域时这份清单是空的,
会把该领域的热门泛称(「Agent」「Model」之流)当成有效证据,
判据会系统性偏松。开新域第一件事就是填它。 - 语料只覆盖头部号的近期标题(AI 域 27 个号 / 6991 篇)。
中文圈更早就报道过、或只由非头部号报道的内容,都看不到。