MonkeyOCR:开启文档解析新范式
在当今数字化信息爆炸的时代,文档解析技术的重要性日益凸显。无论是学术研究、商业报告还是日常办公,我们都需要高效、准确地从各类文档中提取关键信息。然而,传统的文档解析方法往往存在效率低下、准确性不足等问题。今天,我要向大家介绍一款名为 MonkeyOCR 的文档解析工具,它采用独特的 Structure-Recognition-Relation(SRR)三元组范式,为文档解析领域带来了全新的解决方案。
MonkeyOCR 是什么?
MonkeyOCR 是一款由 Zhang Li、Yuliang Liu 等研究人员开发的文档解析工具。它创新性地采用了 SRR(结构 – 识别 – 关系)三元组范式,旨在简化传统模块化方法的多工具流程,同时避免使用大型多模态模型处理整页文档时的低效问题。
MonkeyOCR 的优势
-
高效性能 :在与基于管道的方法 MinerU 相比时,MonkeyOCR 在九种中英文文档类型上平均提升了 5.1%,在公式方面更是取得了 15.0% 的显著进步,在表格方面也有 8.6% 的提升。与端到端模型相比,其 3B 参数模型在英文文档上展现了最佳的平均性能,超越了 Gemini 2.5 Pro 和 Qwen2.5 VL-72B 等模型。在多页文档解析的速度上,MonkeyOCR 达到了每秒 0.84 页,超过了 MinerU 的 0.65 页和 Qwen2.5 VL-7B 的 0.12 页。 -
支持多种文档类型 :MonkeyOCR 目前支持多种类型的中文和英文文档解析,包括书籍、幻灯片、财务报告、教科书、试卷、杂志、学术论文、笔记和报纸等。
快速安装与使用
环境搭建
-
创建并激活 Conda 环境:使用以下命令创建名为 MonkeyOCR 的 Python 3.10 环境,并激活该环境。
conda create -n MonkeyOCR python=3.10
conda activate MonkeyOCR
-
克隆项目仓库:将 MonkeyOCR 的项目仓库克隆到本地。
git clone https://github.com/Yuliang-Liu/MonkeyOCR.git
cd MonkeyOCR
-
安装 PyTorch:根据你的 CUDA 版本,在👉PyTorch 官网找到合适的安装命令。例如,如果你使用的是 CUDA 12.4,可以运行以下命令安装 PyTorch 2.5.1、torchvision 0.20.1 和 torchaudio 2.5.1。
pip install torch==2.5.1 torchvision==0.20.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu124
-
安装项目依赖:在项目根目录下,执行以下命令安装项目所需的依赖包。
pip install .
下载模型权重
-
安装 HuggingFace Hub:使用 pip 安装 HuggingFace Hub 库。
pip install huggingface_hub
-
下载模型权重:运行以下命令下载 MonkeyOCR 的模型权重文件。
python download_model.py
运行推理任务
-
基本推理命令:确保你在 MonkeyOCR 项目根目录下,然后运行以下命令对指定的 PDF 文件进行解析。
python parse.py path/to/your.pdf
-
指定模型路径和配置文件:如果你已经下载了 MonkeyChat 路径和模型配置文件,可以使用以下命令进行推理。
python parse.py path/to/your.pdf -m model_weight/Recognition -c config.yaml
使用 Gradio 演示
-
安装 Gradio 和 pdf2image:在你的环境中安装 Gradio 和 pdf2image 库,以支持演示功能。
pip install gradio==5.23.3
pip install pdf2image==1.17.0
-
启动演示:运行以下命令启动 Gradio 演示服务。
python demo/demo_gradio.py
这样,你就可以通过 Gradio 界面上传 PDF 或图像文件,并直观地看到 MonkeyOCR 对文档的解析效果。
基准测试结果
不同任务的端到端评估结果
在 OmniDocBench 数据集上,MonkeyOCR-3B 和 MonkeyOCR-3B* 模型在多个任务指标上取得了优异的成绩。以下表格展示了不同模型在各项任务上的表现:
模型类型 | 方法 | Overall Edit↓ | Overall Edit↓ | Text Edit↓ | Text Edit↓ | Formula Edit↓ | Formula Edit↓ | Formula CDM↑ | Formula CDM↑ | Table TEDS↑ | Table TEDS↑ | Table Edit↓ | Table Edit↓ | Read Order Edit↓ | Read Order Edit↓ |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Model Type | Methods | EN | ZH | EN | ZH | EN | ZH | EN | ZH | EN | ZH | EN | ZH | EN | ZH |
Pipeline Tools | MinerU | 0.150 | 0.357 | 0.061 | 0.215 | 0.278 | 0.577 | 57.3 | 42.9 | 78.6 | 62.1 | 0.180 | 0.344 | 0.079 | 0.292 |
Pipeline Tools | Marker | 0.336 | 0.556 | 0.080 | 0.315 | 0.530 | 0.883 | 17.6 | 11.7 | 67.6 | 49.2 | 0.619 | 0.685 | 0.114 | 0.340 |
Pipeline Tools | Mathpix | 0.191 | 0.365 | 0.105 | 0.384 | 0.306 | 0.454 | 62.7 | 62.1 | 77.0 | 67.1 | 0.243 | 0.320 | 0.108 | 0.304 |
Pipeline Tools | Docling | 0.589 | 0.909 | 0.416 | 0.987 | 0.999 | 1 | – | – | 61.3 | 25.0 | 0.627 | 0.810 | 0.313 | 0.837 |
Pipeline Tools | Pix2Text | 0.320 | 0.528 | 0.138 | 0.356 | 0.276 | 0.611 | 78.4 | 39.6 | 73.6 | 66.2 | 0.584 | 0.645 | 0.281 | 0.499 |
Pipeline Tools | Unstructured | 0.586 | 0.716 | 0.198 | 0.481 | 0.999 | 1 | – | – | 0 | 0.06 | 1 | 0.998 | 0.145 | 0.387 |
Pipeline Tools | OpenParse | 0.646 | 0.814 | 0.681 | 0.974 | 0.996 | 1 | 0.11 | 0 | 64.8 | 27.5 | 0.284 | 0.639 | 0.595 | 0.641 |
Expert VLMs | GOT-OCR | 0.287 | 0.411 | 0.189 | 0.315 | 0.360 | 0.528 | 74.3 | 45.3 | 53.2 | 47.2 | 0.459 | 0.520 | 0.141 | 0.280 |
Expert VLMs | Nougat | 0.452 | 0.973 | 0.365 | 0.998 | 0.488 | 0.941 | 15.1 | 16.8 | 39.9 | 0 | 0.572 | 1.000 | 0.382 | 0.954 |
Expert VLMs | Mistral OCR | 0.268 | 0.439 | 0.072 | 0.325 | 0.318 | 0.495 | 64.6 | 45.9 | 75.8 | 63.6 | 0.600 | 0.650 | 0.083 | 0.284 |
Expert VLMs | OLMOCR-sglang | 0.326 | 0.469 | 0.097 | 0.293 | 0.455 | 0.655 | 74.3 | 43.2 | 68.1 | 61.3 | 0.608 | 0.652 | 0.145 | 0.277 |
Expert VLMs | SmolDocling-256M | 0.493 | 0.816 | 0.262 | 0.838 | 0.753 | 0.997 | 32.1 | 0.55 | 44.9 | 16.5 | 0.729 | 0.907 | 0.227 | 0.522 |
General VLMs | GPT4o | 0.233 | 0.399 | 0.144 | 0.409 | 0.425 | 0.606 | 72.8 | 42.8 | 72.0 | 62.9 | 0.234 | 0.329 | 0.128 | 0.251 |
General VLMs | Qwen2.5-VL-7B | 0.312 | 0.406 | 0.157 | 0.228 | 0.351 | 0.574 | 79.0 | 50.2 | 76.4 | 72.2 | 0.588 | 0.619 | 0.149 | 0.203 |
General VLMs | InternVL3-8B | 0.314 | 0.383 | 0.134 | 0.218 | 0.417 | 0.563 | 78.3 | 49.3 | 66.1 | 73.1 | 0.586 | 0.564 | 0.118 | 0.186 |
Mix | MonkeyOCR-3B [Weight] | 0.140 | 0.297 | 0.058 | 0.185 | 0.238 | 0.506 | 78.7 | 51.4 | 80.2 | 77.7 | 0.170 | 0.253 | 0.093 | 0.244 |
Mix | MonkeyOCR-3B* [Weight] | 0.154 | 0.277 | 0.073 | 0.134 | 0.255 | 0.529 | 78.5 | 50.8 | 78.2 | 76.2 | 0.182 | 0.262 | 0.105 | 0.183 |
从表中可以看出,MonkeyOCR-3B 在 Overall Edit(整体编辑距离)指标上,无论是英文还是中文,都取得了最低值,分别为 0.140 和 0.297,这表明它在整体文档解析的准确性上具有显著优势。在 Text Edit(文本编辑距离)方面,MonkeyOCR-3B 的英文和中文成绩分别为 0.058 和 0.185,同样是最低的,说明其文本识别的准确性很高。对于 Formula Edit(公式编辑距离),MonkeyOCR-3B 的英文和中文成绩分别为 0.238 和 0.506,虽然在英文方面不是最低,但在中文方面表现优异。在 Formula CDM(公式字符匹配率)指标上,MonkeyOCR-3B 在英文和中文的 Formula CDM 分别达到了 78.7% 和 51.4%,在英文方面表现最佳。在 Table TEDS(表格 TEDS 指标)上,MonkeyOCR-3B 取得了 80.2%(英文)和 77.7%(中文)的最高分,显示出其在表格解析方面的强大能力。在 Table Edit(表格编辑距离)和 Read Order Edit(阅读顺序编辑距离)方面,MonkeyOCR-3B 同样取得了最低值,分别为 0.170(英文)、0.253(中文)和 0.093(英文)、0.244(中文)。
不同 PDF 页面类型的文本识别性能
以下表格展示了不同模型在九种 PDF 页面类型上的文本识别性能:
Model Type | Models | Book | Slides | Financial Report | Textbook | Exam Paper | Magazine | Academic Papers | Notes | Newspaper | Overall |
---|---|---|---|---|---|---|---|---|---|---|---|
Pipeline Tools | MinerU | 0.055 | 0.124 | 0.033 | 0.102 | 0.159 | 0.072 | 0.025 | 0.984 | 0.171 | 0.206 |
Pipeline Tools | Marker | 0.074 | 0.340 | 0.089 | 0.319 | 0.452 | 0.153 | 0.059 | 0.651 | 0.192 | 0.274 |
Pipeline Tools | Mathpix | 0.131 | 0.220 | 0.202 | 0.216 | 0.278 | 0.147 | 0.091 | 0.634 | 0.690 | 0.300 |
Expert VLMs | GOT-OCR | 0.111 | 0.222 | 0.067 | 0.132 | 0.204 | 0.198 | 0.179 | 0.388 | 0.771 | 0.267 |
Expert VLMs | Nougat | 0.734 | 0.958 | 1.000 | 0.820 | 0.930 | 0.830 | 0.214 | 0.991 | 0.871 | 0.806 |
General VLMs | GPT4o | 0.157 | 0.163 | 0.348 | 0.187 | 0.281 | 0.173 | 0.146 | 0.607 | 0.751 | 0.316 |
General VLMs | Qwen2.5-VL-7B | 0.148 | 0.053 | 0.111 | 0.137 | 0.189 | 0.117 | 0.134 | 0.204 | 0.706 | 0.205 |
General VLMs | InternVL3-8B | 0.163 | 0.056 | 0.107 | 0.109 | 0.129 | 0.100 | 0.159 | 0.150 | 0.681 | 0.188 |
Mix | MonkeyOCR-3B [Weight] | 0.046 | 0.120 | 0.024 | 0.100 | 0.129 | 0.086 | 0.024 | 0.643 | 0.131 | 0.155 |
Mix | MonkeyOCR-3B* [Weight] | 0.054 | 0.203 | 0.038 | 0.112 | 0.138 | 0.111 | 0.032 | 0.194 | 0.136 | 0.120 |
在书籍、财务报告、教科书、试卷等页面类型的文本识别上,MonkeyOCR-3B 和 MonkeyOCR-3B* 均取得了最低的编辑距离值,表明其在这些特定文档类型上的文本识别准确性最高。例如,在书籍页面类型上,MonkeyOCR-3B 的编辑距离为 0.046,是所有模型中最低的;在财务报告页面类型上,其编辑距离为 0.024,同样最低。此外,在整体性能上,MonkeyOCR-3B 以 0.155 的编辑距离值位居榜首,展现了其在多样化文档类型上的卓越表现。
MonkeyOCR 的可视化演示
为了让大家更直观地了解 MonkeyOCR 的强大功能,项目团队提供了一个在线演示平台:👉http://vlrlabmonkey.xyz:7685 。你可以通过以下步骤体验 MonkeyOCR 的文档解析能力:
-
上传 PDF 或图像文件:点击上传按钮,选择你想要解析的文档文件。 -
解析文档:点击 “Parse(解析)” 按钮,MonkeyOCR 将对输入文档进行结构检测、内容识别和关系预测,并以 markdown 格式输出解析结果。 -
测试提示语:你可以选择预设的提示语,点击 “Test by prompt” 按钮,让模型根据提示语对图像内容进行识别。
通过这个演示平台,你可以清晰地看到 MonkeyOCR 如何将复杂的文档内容转化为结构化的 markdown 文本,方便你进一步编辑和使用。
常见问题解答
MonkeyOCR 支持哪些文档类型?
MonkeyOCR 目前支持多种类型的中文和英文文档,包括书籍、幻灯片、财务报告、教科书、试卷、杂志、学术论文、笔记和报纸等。
MonkeyOCR 对比其他文档解析工具的优势是什么?
MonkeyOCR 采用独特的 SRR(结构 – 识别 – 关系)三元组范式,简化了传统模块化方法的多工具流程,同时避免了大型多模态模型处理整页文档时的低效问题。在性能上,MonkeyOCR 在多个基准测试中取得了优异的成绩,无论是与基于管道的工具还是端到端模型相比,都展现出了更高的准确性和效率。
MonkeyOCR 的模型权重如何下载?
你可以通过以下命令下载 MonkeyOCR 的模型权重文件:
pip install huggingface_hub
python download_model.py
MonkeyOCR 的推理命令是什么?
确保你在 MonkeyOCR 项目根目录下,然后运行以下命令对指定的 PDF 文件进行解析:
python parse.py path/to/your.pdf
如果你已经下载了 MonkeyChat 路径和模型配置文件,可以使用以下命令进行推理:
python parse.py path/to/your.pdf -m model_weight/Recognition -c config.yaml
MonkeyOCR 的 Gradio 演示如何启动?
首先,在你的环境中安装 Gradio 和 pdf2image 库:
pip install gradio==5.23.3
pip install pdf2image==1.17.0
然后,运行以下命令启动 Gradio 演示服务:
python demo/demo_gradio.py
MonkeyOCR 支持手写文档吗?
目前,MonkeyOCR 不支持手写文档的解析,但项目团队表示将在未来更新中继续改进这一功能。
总结
MonkeyOCR 作为一款基于 SRR 三元组范式的文档解析工具,凭借其高效、准确的性能,在文档解析领域展现出了巨大的潜力。无论是对于学术研究、商业分析还是日常办公,MonkeyOCR 都能为用户提供了一个强大的文档解析解决方案。通过本文的介绍,相信你已经对 MonkeyOCR 有了全面的了解。如果你对文档解析技术感兴趣,不妨亲自尝试一下这个工具,体验它带来的便捷与高效。
希望 MonkeyOCR 能够在你的文档解析工作中发挥重要作用,帮助你更高效地提取和利用文档中的关键信息。