> 判据的盲区正好落在最该示警的那批数据上,这是最糟的一种失效
一个检索库给每段内容打"公式可能丢了"的警告。第一版判据只看这一段自己的证据: 有数学符号但没有 LaTeX → 示警。
结论先行¶
一个检索库给每段内容打"公式可能丢了"的警告。第一版判据只看这一段自己的证据: 有数学符号但没有 LaTeX → 示警。
在最坏的那本书上它完全失灵:全书 454 个对象一次都不示警。
因为那是一层隐形 OCR,公式被 OCR 成了 E!!. F 这种 ——
里面一个可识别的数学符号都没有,于是"有数学符号"这个前件为假,判 0 分。
判据的盲区正好落在最该示警的书上。
修法不是改阈值,是把书级结论接进来,并且给它最高优先级:
| gap | 含义 | 段数 |
|---|---|---|
| 3 | 整本书公式层不可用(书级判定,27 本) | 15,163 |
| 2 | 本段有"只剩编号"的公式行 | 628 |
| 1 | 有数学符号但无 LaTeX | 25,064 |
| 0 | 没有丢失迹象 | 39,542 |
评测里 warn 一项从 0.00 修到 1.00。
这里还藏着一个更吓人的量。另有 204 本文本层"正常"的书, 拿解析产物和原文对比数学算符总数:
中位保留 0.56 平均 0.58 低于 0.8 的 70/78 本
解析库会静默丢弃行间公式:不报错、不卡死、页面字符数正常、 覆盖率正常 —— 既有的三道守卫(超时降级、字符数下限、覆盖率下限) 一个都拦不住它。
为什么¶
一个形如「A 且非 B」的检测判据,有一个结构性盲区: A 也不成立的时候,它和"健康"无法区分。
| 实际情况 | 有数学符号 | 有 LaTeX | 判据输出 |
|---|---|---|---|
| 正常的数学书 | ✓ | ✓ | 不示警(对) |
| 公式被压平 | ✓ | ✗ | 示警(对) |
| 公式彻底烂掉 | ✗ | ✗ | 不示警(错) |
| 本来没数学的书 | ✗ | ✗ | 不示警(对) |
最后两行输出相同。而第三行是损坏最严重的情况 —— 损坏程度越深,证据越少,判据越安静。 这类判据在轻度损坏上灵敏,在重度损坏上失效, 于是它给出的"干净"名单里,混着最脏的那些。
反方向的约束同样真实,不能靠放宽判据解决。这个项目的书级判定 不能只看字体名:有些书也用 TeX 数学字体,但 ToUnicode 齐全、 算符密度 20~30/千字,一点毛病没有。 必须同时看两件事 —— 取不出 Unicode 算符 且 数学字体真排了 ≥0.5% 的字。少了第二个条件, "整本书就用了一个数学符号"的那类书会被误报 (第一版就误报了 11 本,送去重做纯属倒退)。
所以这不是"判据太严",是判据的输入维度不够: 段级证据无法区分"这段没数学"和"这段的数学全烂了", 必须引入一个段级看不到的量(书级的文本层体检)。
怎么用¶
写完检测判据,先问:它在"证据缺失"时输出什么? 如果和"健康"同一个输出,就有盲区。最常见的三种形状:
| 判据形状 | 盲区 |
|---|---|
| 「有 A 但没 B」 | A 也没有的时候 |
| 「X 的比例异常」 | X 一个都没有的时候(分母 0) |
| 「某字段和另一个字段矛盾」 | 两个字段都空的时候 |
给"无法判定"一个和"健康"不同的输出。 三态(ok / warn / unknown)比两态可靠得多。unknown 的数量 本身就是一个要盯的指标 —— 同 核验报告必须先报自己的覆盖率,再报结论——否则一次失败的核验看起来像核过了: 34 of 41 UNVERIFIED 而摘要只报 ok/warn/fail 的那个毛病, 是同一件事在报告层的样子。
引入一个被检对象看不见的层级的证据,并给它更高优先级。 段级判不出来的,书级/文件级/批次级可能判得出来。 优先级顺序要写明:书级判定 > 段级证据,而不是取最大值 —— 因为段级在这些书上给的是 0,取最大值仍然是 0。
验证判据要专门挑最坏的样本,不是抽样。 均匀抽样会以压倒性概率抽到健康样本,而盲区只在极端样本上显形。 先按"损坏程度"排序,再从最坏那一端往下验。 这个项目是靠"那本书全书 0 示警"这一个反常观察发现的 —— 一个本该警报最多的对象警报为零,是最强的盲区信号。
守卫数量不等于守卫覆盖。 三道守卫一道都拦不住第四种失效模式。 每加一道守卫,记下它挡的是哪一种失效; 列不出名字的守卫,大概和别的守卫挡的是同一种。 同 一个从未被写入过的 Gauge,导出的不是"无数据",是"一切正常": 监控面板很满,不代表监控覆盖。
出处¶
~/Tools/booksearch/docs/RAG_PLAN.md §18.4「公式警告:判据的盲区
落在最该警告的书上」(454 个对象 0 示警、E!!. F、四档 gap 表、
warn 0.00 → 1.00)与 §17.6「最要紧的发现:索引里没有公式」
(三种失效机制、不能只看字体名与 ≥0.5% 条件、第一版误报 11 本、
中位保留 0.56 / 70-78 本低于 0.8、三道守卫都拦不住)。