文档智能专题:复杂表为何总翻车?MonkeyOCR这样拆嵌套和跨页

(1)《三年面试五年模拟》AIGC / LLM / AI Agent 算法工程师与开发工程师求职面试秘籍,独家资源见 WeThinkIn/AIGC-Interview-Book,欢迎 Star!
(2)AIGC / LLM / AI Agent 算法岗与开发岗求职面试内推学习社群,涵盖 AIGC、LLM 大模型、AI Agent、传统深度学习、自动驾驶、机器学习、计算机视觉、自然语言处理、强化学习、大数据挖掘、具身智能、元宇宙、AGI 等方向的最新面试干货与核心知识,欢迎加入(https://t.zsxq.com/33pJ0)!


论文标题:MonkeyOCR v1.5 Technical Report: Unlocking Robust Document Parsing for Complex Patterns
论文作者:金山办公追光AI Lab与华中科技大学(一作Jiarui Zhang)
发表时间:2025年11月13日


本文要点
(1)MonkeyOCR v1.5是金山办公追光AI Lab与华中科技大学2025年11月发布的文档解析系统,两阶段VLM先做版面和阅读顺序,再并行识别文本、公式和表格。
(2)OmniDocBench v1.5总分93.01,OCRFlux-complex表格TEDS 90.9,同一子集上PaddleOCR-VL是81.7。
(3)复杂表拆成三件事,渲染对照做强化学习,表内图先检测再占位,跨页跨栏续表按三种模式拼回去。
(4)短板是文本Edit和阅读顺序仍落后PaddleOCR-VL,简单表输给MinerU2.5,报告没给v1.5的参数量和消融。
(5)文末附官方安装与parse.py示例。公开可下的仍是pro系列,和报告里93.01那组数字对不上。


今天是2026年9月20日。我把arXiv 2511.10390的HTML版对了一遍,也看了GitHub仓库和Hugging Face上的权重卡。仓库News最上面已经是2026年7月的MonkeyOCRv2,这篇只读2025年11月那份v1.5技术报告。

金山办公追光AI Lab和华中科技大学,一作Jiarui Zhang。v1挂在11月13日,v2是16日。

复杂表是报告自己选的主战场。多级嵌套、格子里塞图、一张表被页眉或分栏切开,现成系统经常在这三类地方断掉。OmniDocBench v1.5总分93.01,只比PaddleOCR-VL高0.15。拉开差距的位置在OCRFlux-complex,表格TEDS到90.9,PaddleOCR-VL是81.7。

MonkeyOCR v1.5在OmniDocBench v1.5与OCRFlux表格子集上的成绩

一、SRR三阶段收到两阶段流水线

初代MonkeyOCR走SRR。结构检测、内容识别、阅读顺序预测拆成三步,想少吃流水线的累积误差,也躲开整页一次喂进去把视觉token撑爆。v1.5把结构检测和阅读顺序收进同一段VLM,识别单独做第二段。

第一段看整页,一并给出每个区域的框、类别、阅读顺序编号,还带旋转角。第二段按框裁出来,转正,再按类别并行识别文本、公式、表格。同一套权重跑两段,图里画的是ViT加语言模型解码器。

两阶段流水线,先检测带顺序编号的版面,再对裁切区域并行识别

输出是约束解码后的JSON。字段就四类,框、顺序号、类别、旋转角。类别包括text、formula、table。裁切之后按标签分流,表格走tablebody这条识别头,最后按顺序号拼成整页Markdown或HTML。

旧版阅读顺序靠文本模型推断,报告说全局视觉上下文用不上。v1.5把顺序和框一起从画面里读出来,密栏报纸、多栏杂志这类版式才接得住。后面报纸和笔记两项,它也确实拿到了最好的编辑距离。

能力表比总分更能说明他们想补什么。表内图还原、跨页续表、跨栏续表、行被拦腰切开再续上,这几项里只有v1.5打满。

PaddleOCR-VL能还原表内图,跨页跨栏都不做。MinerU2.5和OCRFlux能并一部分跨页续表,并到重复表头和无表头为止,行拆分和跨栏没有。初代MonkeyOCR这几项全空。

二、视觉一致性GRPO与渲染对照

复杂表难标。单元格合并、嵌套、字体混排,人工HTML贵,用更强解析器造标签又脏。v1.5的办法是先让模型吐出表格,再把结果渲染成图,拿渲染图、原图、识别文本三件套去打分。

奖励模型是另一套VLM。正负样本两路来。一路改真值,造视觉上对不上的假表格。一路对微调后的识别模型多次采样,把错的和真值配成对。训练时奖励模型吃三元组,判断这份识别能不能把原表重建回来。

有了奖励模型再上强化学习。算法报告写成GRPO。图里画的是一组采样、组内相对优势,和DeepSeek那套Group Relative的计算方式对得上。报告英文展开写成了Generalized Reinforcement Policy Optimization,和常见展开不一致。

视觉一致性GRPO,策略模型一组采样后渲染对照,再用VLM奖励模型回传组内相对优势

图里那张员工任务表把过程写死了。策略模型一次给出G个输出,冻结的参考模型在旁边卡KL。识别结果先变成HTML,再渲染回表格图。示例里刘丽那一行进度是90%,渲染出来变成了完成,直接打叉。VLM奖励模型给每个样本打分,再按组内均值和标准差做成优势,回传GRPO损失。

图注还写了规则检查和VLM奖励拼在一起。正文公式只留下reward = VLM(I^O, y, I^R),规则那一支没展开。渲染器用的哪套引擎,报告也没点名。能确定的是,无标注表格可以拿来继续训,不必再画一套精细HTML。

公式CDM在这张总图里排第一小格,v1.5拿到91.54,PaddleOCR-VL是91.22。CDM怎么定义,OmniDocBench原文已经写过,这里只记这个数。

三、表内图解耦与三类跨页续表

格子里嵌图,识别器容易把图当噪声,或者把整列读崩。他们把图和表拆开处理,模块名叫Image-Decoupled Table Parsing,短写IDTP。

先用YOLOv10在表格区域里检出内嵌图,按原尺寸盖上占位掩码,并留下编号到裁切文件的一一映射。掩码后的表再交给识别器。训练时多一个辅助目标,让模型把占位符当成原子token,中间HTML在对应位置写下图片标签。后处理按映射把原图填回去。

表内图先检测占位,识别出带占位符的HTML后再插回原图

图里占位写成IMAGE1这类红块。正文说最终HTML用img标签。PaddleOCR-VL在能力表上也能做表内图检测和识别,MinerU2.5这一项是空的。定性对比里,MinerU2.5会把图丢掉,PaddleOCR-VL会出现多一列空列、表头单元格丢失。这些是报告对可视化样例的描述。

跨页和跨栏是另一件事。长表被排版切开以后,相邻碎片常见三种接法。

跨页或跨栏续表的三种模式,重复表头、无表头续接、行拆分续接

前两种最好认。后一段开头几行和前一段表头相同,就当重复表头的续表,删掉第二段表头再拼接,列还要对上。开头几行不同、断口处格子又没被切开,直接把表体接上,列结构保持原样。

还有一种更麻烦。某个单元格在断口处被劈成两截,得先把两段对应的跨度找回来并成一行,再拼接。

重复表头靠规则匹配,允许完全相同或近似相同。后两种靠一个BERT分类器,看后一段的首行是不是前一段末行的语义续写。判成续写就走行级合并,否则当无表头续接。合并时还要把各列对上、处理跨度冲突、把表头token规范化。BERT用的哪份权重,报告没写。

定性对比里有一张跨页计划表。原图在两页之间夹了一条页眉。MonkeyOCR v1.5把四段时间接成一张完整表。PaddleOCR-VL把页眉写进了表体。MinerU2.5第三行从色素物质半截起头,上一页没写完的格子没有接上。

跨页计划表合并对照,页眉插入和单元格半截续写都会把结构切断

四、OmniDocBench v1.5总分93.01

先把总表和复杂表放在一起。OmniDocBench v1.5是当时文档解析最常被引用的公开榜。表格TEDS把表当成树算相似度。OCRFlux-complex来自OCRFlux-pubtabnet-single的复杂子集。Edit越低越好。

模型Overall↑公式CDM↑表格TEDS↑OCRFlux-ComplexOCRFlux-Simple文本Edit↓阅读顺序Edit↓
MonkeyOCR v1.593.0191.5491.9990.992.60.0450.049
PaddleOCR-VL92.8691.2290.8981.790.70.0350.043
MinerU2.590.6788.4688.2288.493.30.0470.044
MonkeyOCR-pro-3B88.8587.2586.78未报告未报告0.0750.128
Qwen3-VL-235B89.1588.1486.21未报告未报告0.0690.068
Gemini-2.5 Pro88.0385.8285.71未报告未报告0.0750.097

总分93.01,比PaddleOCR-VL高0.15,比MinerU2.5高2.34。公式和表格两项也是第一,表格TEDS比PaddleOCR-VL高1.10。这些零点几到两点,在已经挤满的榜上谈不上碾压。

复杂表那一列就不一样。OCRFlux-complex上v1.5拿到90.9,MinerU2.5是88.4,PaddleOCR-VL是81.7。第三节正文写成超出PaddleOCR-VL 9.2个百分点,和表4对得上。引言里同一对比写成8.2%,和表不一致,这里按表走。

简单表他们没有赢。OCRFlux-simple上MinerU2.5是93.3,v1.5是92.6。PubTabNet上v1.5是90.7,MinerU2.5是89.1,PaddleOCR-VL是85.2,这一项他们仍是第一。Nanonets、初代MonkeyOCR、OCRFlux在PubTabNet上未报告。

文本和阅读顺序两项,PaddleOCR-VL更低。文本Edit 0.035对0.045,阅读顺序0.043对0.049。v1.5没有拿下全部单项。

文档类型那张表,越低越好。报纸0.049、笔记0.059两项第一。

幻灯片0.034,dots.ocr和MinerU2.5都是0.029。学术论文0.029,MinerU2-VLM是0.010。教材0.071,MinerU2.5是0.050。财报0.023,dots.ocr是0.008。杂志0.032,和MinerU2.5并列,Gemini-2.5 Pro是0.016。

密栏报纸和笔记页,这套两阶段更稳。干净论文页和财报,别人仍有专长。

报告没有给出RL、IDTP、续表合并各自拿掉以后掉多少分。复杂表的9.2,无法拆成哪一块模块贡献了多少。

五、本地部署与推理实践

代码在Yuliang-Liu/MonkeyOCR,Apache 2.0。我查的时候仓库大约6600星。

Hugging Face官方卡是echo840/MonkeyOCRecho840/MonkeyOCR-pro-3Becho840/MonkeyOCR-pro-1.2B,另有一张pro-0.6B。没有单独叫MonkeyOCR-v1.5的权重仓库。

同一张OmniDocBench v1.5表里,MonkeyOCR-pro-3B总分88.85,v1.5是93.01。按官方脚本把pro-3B下下来,对不上报告里那组第一。

在线试用页在vlrlabmonkey.xyz:7685,README写最新模型可选,页上有没有v1.5这张卡,公开材料没有写死。

安装以仓库README指向的CUDA安装文档为准。当前推荐路径要先装PaddleX,再用LMDeploy当推理后端。官方内部测速排序是LMDeploy不低于vLLM,两者都远快于transformers。

conda create -n MonkeyOCR python=3.10
conda activate MonkeyOCR
git clone https://github.com/Yuliang-Liu/MonkeyOCR.git
cd MonkeyOCR

export CUDA_VERSION=126
pip install paddlepaddle-gpu==3.0.0 -i https://www.paddlepaddle.org.cn/packages/stable/cu${CUDA_VERSION}/
pip install paddlex[base]==3.3.0
pip install langchain==0.3.26

pip install torch==2.6.0 torchvision==0.21.0 torchaudio==2.6.0 --index-url https://download.pytorch.org/whl/cu${CUDA_VERSION}
pip install -e .
pip install lmdeploy==0.9.2

20系、30系、40系和V100上,LMDeploy可能报shared memory不足。官方补丁是python tools/lmdeploy_patcher.py patch,会改当前环境里LMDeploy的源码。3090上他们测过,打补丁后0.338页每秒,transformers只有0.015页每秒。

权重下载和推理命令出自仓库README。

pip install huggingface_hub
python tools/download_model.py -n MonkeyOCR-pro-3B
# 也可换成 MonkeyOCR-pro-1.2B 或 MonkeyOCR

python parse.py input.pdf
python parse.py input.pdf -o ./output
python parse.py input.pdf -s
python parse.py image.jpg -t table

-s按页拆结果。-t table只跑表格识别,输出Markdown。完整解析会写出三样东西,最终Markdown、画在原页上的版面PDF、带框和类别的中间JSON。本地Gradio是python demo/demo_gradio.py,默认7860端口。FastAPI是uvicorn api.main:app --port 8000

仓库README把拍照件、手写、繁体、多语列成尚未完全支持。这是开源线的能力边界,不是v1.5报告里的实验结论。v1.5自己的参数量、训练数据规模、显存占用,报告都没写。

六、总结与思考

结构对不上,整张表就废了。单个格子认错,后面往往还能补。v1.5把结构这件事拆开处理。识别结果先渲染成图再和原图对,格子里的图先抠走再填回来。跨页跨栏要先判断接法,重复表头、无表头续接还是行被切开,拼法不一样。

我更看重渲染对照这条奖励。表格HTML的合法写法很多,字符串对不上不等于结构错了。把输出画回一张图,奖励才能跟阅读者看见的东西对上。无标注页也能继续训,这点对文档解析这种标注极贵的任务很实在。

短板同样清楚。总分只比PaddleOCR-VL高0.15,文本和阅读顺序还落后。简单表输给MinerU2.5。报纸和笔记第一,论文页和财报没有拿到第一。没有消融,就不知道视觉一致性RL、表内图解耦、续表合并各值多少分。公开权重也还停在pro系列,报告数字和可下载模型中间空着一截。

2026年7月已经有MonkeyOCRv2。若要复现这篇报告里的93.01和90.9,现成的download_model.py还不够。


参考链接

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值