> 一个在模板自带文字上每篇必中的检测器,基线假阳性率是 100%
一个扫描 PDF 里可疑内容(隐藏文字、注入、分数操纵)的工具,噪声大到淹没真信号。 把假阳性逐类列出来之后,根因是四种,而最后一种最说明问题:
结论先行¶
一个扫描 PDF 里可疑内容(隐藏文字、注入、分数操纵)的工具,噪声大到淹没真信号。 把假阳性逐类列出来之后,根因是四种,而最后一种最说明问题:
| 命中的东西 | 被报成 | 真实情况 |
|---|---|---|
结果表里的 10/10、6 / 65 / 21 |
"Score manipulation: pre-set high score" | 就是实验数字 |
单词内部的 dan(redundant / nonredan… / Daniel / Dana) |
"Jailbreak pattern" | 子串匹配没加词边界 |
| 图表里的白色文字标签(百分比、"day 22") | "Hidden text" | 浅色背景上的正常标注 |
| 会议模板自带的第 1 页页脚(提示审稿人阅读指南的那行) | 命中 | 每一篇都会中 |
最后一条意味着这个检测器的基线假阳性率是 100%: 在一份完全空白、只套了模板的文档上,它也会报一条。
为什么¶
三条可推广的东西。
一、检测器必须先在"空输入"上跑一次。 这里的空输入是"只有模板、没有内容的文档"。 任何在空输入上仍然报警的检测器,它的每一条输出都要先减掉这个基线。 这是最便宜的一次测试,而且几乎没人做。
二、子串匹配在短 token 上一定会炸。
dan 是三个字母,它出现在 redundant、abundant、人名里。
短关键词必须加词边界(\bdan\b),或者干脆不用关键词。
判断标准很简单:这个词有多短,它就有多大概率是别的词的一部分。
三、同一个特征在不同上下文里含义相反。 "和背景同色的文字"在正文里是隐藏文本的信号,在图表里是正常标注; "一串整齐的高分"在元数据里可疑,在结果表里是数据。 所以检测器要么知道自己在文档的哪个区域(正文 / 表格 / 图 / 页眉页脚), 要么就不该报这两类。
而噪声的代价不是"多看几条":它会让真信号被跳过。 一个报 200 条的扫描器和一个什么都不报的扫描器,使用上是等价的—— 两者都不会被读。见 测不出失败的门禁比没有门禁更糟——它在制造信心。
怎么用¶
- 先在空白模板上跑一遍,把命中的全部内置成已知文本白名单。 会议模板、期刊样式、公司文档模板自带的那些行,一次性加进去。
- 给每条规则记一个在"干净语料"上的假阳性率,并把高于阈值的规则默认关掉。
- 短关键词加词边界;或者改成按行/按块匹配,而不是按子串。
- 让规则知道区域。 实现上通常就是先做一次版面分割, 然后只在允许的区域里跑对应规则。
- 报告里把规则命中数按规则分组列出来,这样"某条规则贡献了 90% 的噪声" 一眼就能看见。见 检查工具的噪声按「来源文件」折叠,不按条目截断。
出处¶
- 自己的文档扫描工具在一批外部会议 PDF 上的实测,2026-10:上表四类假阳性, 其中会议模板自带的首页页脚在每一篇上都命中
- 相关:会产生"指控"的工具,误报代价不对称——先归一化再开口、最危险的工具故障是"静默少做"——技能在、后端不在