# devlog · 2026-06-12 · Phase 6 B1/B2:OmniDocBench 提分探查(主负结论)

> 计划 [omnidocbench-score-lift.md](../plans/omnidocbench-score-lift.md) · 数据 [testresults/2026-06-12-omnidocbench-score-lift.md](../testresults/2026-06-12-omnidocbench-score-lift.md)

## 目标
学术表代理 Overall ≈75 的瓶颈是学术表 TEDS 0.517。目标:在**不牺牲快路径速度**下提它。

## 做了什么
逐一探查解码侧便宜旋钮,**先量后定**:

- **B1(落地)** 评测 `strip_math` 对称:e2e 表评测 pred 侧补 `strip_math`(与 GT 同口径),修含行内数学格的假性失配。评测正确性修复。
- **B2(落地)** UniRec EOS 门控失控退化抢救:`recognize` 跑满 token 上限**且未吐 EOS**时,找重复尾块裁掉、保留好前缀;自终止的表原样信任。学术 30 表逐字 0.517 不变(零回归);价值在域外 runaway(refine 路径此前 `looks_degenerate` 整表丢弃)。
- **B3(否决/缓办)** area 下采样:tables 近中性,且改公共预处理未验证公式/转写零回归。
- **max_tokens 2000→4000(否决)**:实测 0.517→0.466,难表给更多 token 只是退化更久。
- **B4 beam / B5 多表召回(不投/候)**:失败解剖证明主因是模型天花板+口径,beam 预期低收益。

## 关键发现
1. **学术失败是 0.1B 模型固定 960×1408 输入的真实天花板**。行列数诊断(30 表):主因是**大/宽表 UNDER-segment(7)+ 超宽表 NO-PRED(2)**——#21 56→27 行(输出完整却漏行)、#6 18×50 列→无输出;over-split(3)是少数。
2. **看图纠正初判**:#4/#16 初判"评测口径反噬(我们更忠实被粗标真值扣)",**裁图核对后推翻**——实为模型 **over-split** 把列表格的 bullet/wrap 行错拆成表行。口径判断必须看图,不能对 HTML 形态猜。
3. **抬 max_tokens 反降**——2000 上限其实在截断退化、帮忙。
4. **分辨率实验(决定性否决)**:960×1408→1280×1792,净 0.517→0.527(噪声)但救饥饿表(#11 **0→0.966**)= 扭曲合身表(#10 0.413→0),且 **~26s/表 3× 慢破速度门**。分辨率是真杠杆,但 0.1B 对它脆 → 否决 blanket,自适应缓办。
5. **B2 首版踩坑**:激进 in-loop 早停在"整列相同值"的合法表上假触发退化检测(#15/#23/#30 大跌)→ 重设计为 EOS 门控(只碰未自终止的 runaway)→ 学术零回归。

## 验收
- clippy 0;`cargo test -p docparse-ocr` 25 绿(含 `loop_trim_rescues_degenerate_tail`);
- 三件套(lorem/1901.03003/bialetti)逐字不变;
- B2 学术单模块 30 表逐字 0.517=基线(零回归)。
- 快路径不经 UniRec(B1/B2 仅 `--table/formula/transcribe-model` 路径),速度身份零触碰。

## 沉淀
分数可疑先怀疑评测(B1 真不对称);但这次主体是**模型天花板**,验到能下定论才算结论。口径反噬再现(别为尺子改粗输出)。安全特性验收语料必须含"含重复内容的合法表"(B2 首版教训)。真正杠杆(更大表模型 / VLM 服务 `--vlm-tables`)均在"内嵌+保速"身份域外。
