> 一篇"条数达标、密度不达标"的稿子只看到了达标的那一半——两条规矩冲突时取不产生自信错数的那条
一个工具对论文的两个部分用了两种口径: 首节按条数判(至少 2 条断言),正文按密度判(断言/千词落在区间内)。
结论先行¶
一个工具对论文的两个部分用了两种口径: 首节按条数判(至少 2 条断言),正文按密度判(断言/千词落在区间内)。
它的标定数据里两种口径都有 —— 首节也有一个密度下限(2.61/千词), 只是没拿来判定。于是一篇首节"条数达标、密度不达标"的稿子, 报告里只会看到"落在经典区间内"。另一半存在、算过、没显示。
把密度也做成判定之后,实测它把一篇已录用论文报红了: 首节窗口 1235 词、2 条断言、密度 1.62 < 2.61。 而经典参照的首节窗口是 456–1029 词 —— 长度差一倍多。
| 窗口长度 | 断言条数 | 密度 | |
|---|---|---|---|
| 9 篇经典(参照) | 456–1029 词 | 2–8 | ≥2.61 |
| 那篇已录用 | 1235 词 | 2(达标) | 1.62(不达标) |
结论分两步,两步都要:
- 密度在这个窗口上不可比。 窗口长度差一倍,密度就不是同一个量。 读者进门时实际经历的是"我读到第几条主张",那是条数。
- 但另一半不许藏。 两条规矩冲突时取不产生自信错数的那一条做判定, 另一条用 INFO 原样输出。
为什么¶
第一个毛病是选择性展示,而且它是无意的:两个口径都在标定里, 实现时只给一个接了判定,报告自然只打印有判定的那个。 没人决定要隐藏什么 —— 判定和展示耦合在一起,于是没判定的量就没出口。 后果是报告在撒一个很具体的谎:它说"你落在区间内", 而同一份标定数据里有另一个量说你没有。
第二个毛病更有意思:比率需要可比的分母。 密度是"每千词多少条",它假设窗口是可比的。 这里的窗口(标题 + 摘要 + 第一节 + 第一个 caption)长度由论文结构决定, 差一倍以上。一篇写得长的第一节不见得更不敢说,但密度会这么判。 条数和密度在这里不是"同一件事的两种精度",是两个不同的量, 而只有一个对应读者的真实体验。
值得抄的是裁决规则本身:取不产生自信错数的那一条。 它不是"取更严的",也不是"取更松的"。密度在不可比的窗口上会给出一个 看起来精确、方向却错的判定;条数粗糙,但它粗糙得诚实。 而既然另一半也算过了,就把它放在 INFO 里 —— 粗判定 + 细事实, 两种错误都不犯。
怎么用¶
检查一遍:你的标定里算过的量,是不是每一个都在报告里出现了。 算过而不显示是选择性展示的默认形态。做法很简单: 报告按"算过的量"枚举,判定只是其中某些量的属性。 参考 核验报告必须先报自己的覆盖率,再报结论——否则一次失败的核验看起来像核过了: 先报自己的覆盖面,再报结论。
用密度/比率之前,先量分母的离散程度。 参照集的窗口长度范围是 456–1029,被测对象是 1235 —— 超出参照范围本身就该让这个比率失去判定权。 一条便宜的护栏:被测对象的分母落在参照分母范围之外时, 只报原始计数,不报比率。
两条规矩冲突时,问"哪一条错的时候错得更自信"。 精确的量错起来更危险,因为它的数字看起来像证据。 粗的量正确率不一定更高,但它不会让人确信一个错结论。
判定和展示要解耦。 一个量能不能判定、要不要显示, 是两个独立的决定。耦合在一起时,"没想好怎么判"会静默地变成"不告诉用户"。
出处¶
~/Tools/final-reviewer:CALIBRATION.md 2026-09-30 下午
「首节:两个指标都报,只按条数判」一节
(含 1235 词 / 2 条 / 1.62 与经典窗口 456–1029 词,
以及"两条规矩冲突时取不产生自信错数的那条,另一半用 INFO 说出来,不藏"的原话)、
calibration.json 的首节条数与首节密度两组量。
被报红的那篇是作者自己已录用的论文,所以它同时是这个工具的假阳性地板之一。