在本教程中,我们动手复现并审计 OmniParseBench——Datalab 面向文档解析器发布的开源基准。它用 16,288 个细粒度的通过/失败小测试来评判解析器的输出,这些测试覆盖 2,937 个页面,内容从扫描表单、手写体,到 arXiv 数学公式和密集表格。与其直接相信排行榜,我们根据 Datalab 为 27 个解析器发布的判定结果从头重建榜单;在此之前,先给打分器喂入一张手工构造的页面,观察哪些错误会真正翻转某个判定。随后我们量化排名的确定性,按文档类型做切片,检验模型卡中列为参与构建测试的两个模型在被模型修正过的测试上表现是否不同,并自行在一个 50 页样本上运行 Tesseract 和 Indra OCR。过程中我们发现:排名前两位的解析器在统计上打平,多数切片上第一名都会易主,而发布会上的一个数字与已发布的文件不一致。
安装环节,我们把 omni-parse-bench 固定到 1.0.0rc1,因为直接 pip install 仍会解析到 0.2.0,那是 API 不同的旧版本。benchmark extra 会带来解析器适配器、Hugging Face 客户端以及用于 manifest 的 pyarrow;在 Colab 上我们通过 apt 额外安装 Tesseract 及其脚本模型。我们同时把数据集固定到一个 commit,因为随着解析器增加,仓库会不断变动。打印测试家族可以看出基准的结构:present、order 和 repeat 构成文本家族,table_cell 构成表格家族,layout_kind 构成版面家族。
在信任分数之前,我们先弄清判定的含义:手工为一张虚构页面编写 gold 文件,其中包含十三个测试,并用基准自身使用的 unit_tests.score 来评分。一个基础预测全部通过,而每个变体只改动一处。一个字母的拼写错误、丢失的负号、公式中不同的符号、交换的标题以及被错标类型的区块,各自恰好翻转一个测试为失败,并附带原因。对照组仍然通过:大小写、去掉千位分隔符以及用 dfrac 替代 frac,因为文本会被归一化折叠,公式则在 KaTeX 渲染后进行比较。
数据集中包含 16,288 个测试。我们通过 snapshot_download 拉取 manifest.parquet、gold 目录、results.parquet 和 README,只下载需要的文件,然后用 data.read_manifest 读取页面与 gold 测试,逐页统计每个测试家族和测试类型的数量,以便把排行榜的数字放回它真实的结构里。这一过程还让我们能够核对发布声明与实际文件中的记录是否一致,并发现其中一处数字对不上。排名确定性方面,我们在文档级别做 bootstrap 重采样,给出每个解析器名次的置信区间,结果显示前两名在统计上无法区分。按文档类型切片后,多数切片的第一名与总榜不同,说明单一总分会掩盖解析器在不同文档上的强弱差异。