每天分析一个开源项目:olmOCR,让 AI 帮你读懂“天书”
每天分析一个开源项目:olmOCR,让 AI 帮你读懂“天书”!
你有没有遇到过这样的 PDF 文档?
- 扫描质量差到爆炸,文字模糊不清,OCR 工具直接罢工?
- 排版复杂到逆天,多栏布局、表格乱飞,想复制点文字都费劲?
- 公式、图表满天飞,传统 OCR 工具直接懵圈,提取出来的全是乱码?
别担心,你不是一个人!在数字化的今天,PDF 文档依然是信息传递的重要载体,但“野外”的 PDF 文档往往充满了各种挑战,传统的 OCR 技术面对它们就显得捉襟见肘了。
但是! 现在,AllenAI 团队带来了 olmOCR (Open Language Model for OCR),一个强大的工具包,它将语言模型的力量注入 PDF 文档处理,让你轻松应对各种“天书”般的 PDF!
olmOCR 是什么?
简单来说,olmOCR 是一个 训练语言模型来处理 “狂野” PDF 文档 的工具包。它的目标是让机器能够像人一样,理解和解析各种复杂、不完美的 PDF 文档,并从中提取出高质量的文本信息。
olmOCR 有什么绝招?
olmOCR 的强大之处,在于它集成了一系列前沿技术和巧妙的策略,让 PDF 文档处理变得前所未有的高效和精准:
- ChatGPT 4o 加持的智能 Prompt 策略: 别再用老套的 OCR 引擎了!olmOCR 巧妙地利用 ChatGPT 4o 强大的自然语言理解能力,通过精心的 Prompt 设计,让 AI 能够像人一样理解文档的上下文,从而更准确地解析文本。这套策略,就藏在
buildsilver.py
文件里,赶紧去膜拜一下! - 版本对比神器:Eval 工具包: 想知道不同版本的 OCR 管道哪个更厉害?olmOCR 自带的 Eval 工具包 (
runeval.py
) 可以帮你轻松进行 side-by-side 评估,快速找出最佳方案。这对于开发者来说,简直是福音! - 基础但实用的 Filter 功能: 还在为满篇的 SEO 垃圾信息头疼?olmOCR 提供了基础的 Filter 功能 (
filter.py
),可以帮你过滤掉一些低质量的英文 PDF,让你的数据更干净。 - Qwen2-VL 和 Molmo-O 微调代码: 想要定制自己的 PDF OCR 模型?没问题!olmOCR 提供了 Qwen2-VL 和 Molmo-O 的微调代码 (
train.py
),让你站在巨人的肩膀上,打造更强大的 OCR 模型。 - Sglang 加速的大规模 PDF 处理管道: 百万级别的 PDF 文档要处理到猴年马月?olmOCR 利用 Sglang (
pipeline.py
) 实现了高效的 PDF 处理管道,即使面对海量文档也能轻松应对。 - Dolma 文档预览神器: 处理完的 PDF 文档长啥样?
dolmaviewer.py
可以帮你并排查看原始 PDF 和提取出的 Dolma 格式 JSONL 数据,效果一目了然!
快速上手,体验 olmOCR 的魔力!
想亲自体验 olmOCR 的强大?非常简单!
本地安装步骤:
-
环境准备: 你需要一块 NVIDIA GPU (RTX 4090 及以上更佳),以及 30GB 的硬盘空间。 按照 README.md 的指引安装
poppler-utils
和额外的字体库。 -
创建 conda 环境并安装 olmOCR:
conda create -n olmocr python=3.11conda activate olmocrgit clone https://github.com/allenai/olmocr.gitcd olmocrpip install -e .
-
安装 Sglang (可选,但强烈建议): 如果你想在 GPU 上运行推理,加速体验,请安装
sglang
:pip install sgl-kernel==0.0.3.post1 --force-reinstall --no-depspip install \"sglang[all]==0.4.2\" --find-links https://flashinfer.ai/whl/cu124/torch2.4/flashinfer/
本地使用示例:
-
转换单个 PDF:
python -m olmocr.pipeline ./localworkspace --pdfs tests/gnarly_pdfs/horribleocr.pdf
-
转换多个 PDF:
python -m olmocr.pipeline ./localworkspace --pdfs tests/gnarly_pdfs/*.pdf
结果将以 JSON 格式保存在 ./localworkspace
目录下。
查看结果:
-
直接查看 JSONL 文件:
cat localworkspace/results/output_*.jsonl
-
Side-by-side 查看 PDF 和提取文本:
python -m olmocr.viewer.dolmaviewer localworkspace/results/output_*.jsonl
然后在浏览器中打开
./dolma_previews/tests_gnarly_pdfs_horribleocr_pdf.html
,即可看到惊艳的对比效果!
(这里可以插入一张 side-by-side viewing 的图片,增强视觉效果)
更进一步:集群使用,百万级 PDF 轻松搞定!
如果你需要处理海量的 PDF 文档,olmOCR 也提供了 多节点/集群 支持。你可以将 PDF 存储在 AWS S3 上,利用 S3 的工作队列进行任务协调,实现 并行处理,大幅提升效率。
例如,在第一个 worker 节点上运行:
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf
在后续节点上运行:
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace
更牛的是,如果你在 AI2 工作,可以使用 Beaker 集群,只需加上 --beaker
flag,即可轻松启动 N 个 GPU worker,让百万级 PDF 处理变得高效又简单!
例如:
python -m olmocr.pipeline s3://my_s3_bucket/pdfworkspaces/exampleworkspace --pdfs s3://my_s3_bucket/jakep/gnarly_pdfs/*.pdf --beaker --beaker_gpus 4
文档齐全,参数详解,助你玩转 olmOCR!
想深入了解 olmOCR 的各种参数和高级用法?运行以下命令,即可查看完整的 pipeline 文档:
python -m olmocr.pipeline --help
文档详细介绍了各种参数的含义和用法,让你对 olmOCR 的强大功能一览无余!
加入 olmOCR 社区,一起探索 PDF 的无限可能!
olmOCR 由 AllenNLP 团队开发和维护,并由 Allen Institute for Artificial Intelligence (AI2) 提供支持。这是一个开源项目。项目地址:https://github.com/allenai/olmocr
在线体验
实测结果:
实测评价:只能说目前为止,在我使用过的ocr中,算是效果最好的了
提问环节:
文档中提到了LLM的使用,那么本地部署该项目是否只能使用ChatGPT 4o一种语言大模型呢?
不,olmOCR 项目并非只能使用 ChatGPT 4o 一种语言大模型。
虽然 README.md 文件中提到了 “使用 ChatGPT 4o 的 prompting 策略”,但这只是该项目 众多功能之一,用于构建高质量的训练数据 (所谓的 “silver data”)。 olmOCR 工具包的强大之处在于它的灵活性和对多种语言模型的支持。
让我更详细地解释一下:
1. 多种推理 Runner:
项目代码中包含了 olmocr/bench/runners/
目录,其中有针对不同语言模型的 Runner 脚本,这表明 olmOCR 明确支持 以下模型(以及更多潜在的模型):
- ChatGPT (通过
run_chatgpt.py
): 虽然 README 中重点提到了 ChatGPT 4o,但代码本身是支持 ChatGPT 系列模型的。 - Claude (通过
run_claude.py
): 集成了 Anthropic 的 Claude 模型。 - Gemini (通过
run_gemini.py
): 支持 Google 的 Gemini 模型。 - olmOCR (通过
run_olmocr.py
): 这实际上指的是 olmOCR 项目自身训练的语言模型, 默认模型是allenai/olmOCR-7B-0225-preview
, 基于 Qwen2-VL 或者 Molmo-O 微调而来。 - 其他 OCR 工具 (通过
run_gotocr.py
, run_marker.py
, run_mineru.py
): 项目还集成了传统的 OCR 工具,例如 GOTOCR, Marker, MinerU,方便用户进行对比评估。
2. 模型微调的灵活性:
olmocr/train/train.py
文件明确提供了 Qwen2-VL 和 Molmo-O 这两种语言模型的微调代码。这意味着你可以使用 olmOCR 提供的工具和代码,在你自己的数据集上 微调 这些开源的视觉语言模型,从而定制出更符合你需求的 OCR 模型。
3. Pipeline 的模型选择:
在 olmocr/pipeline.py
脚本的帮助文档中,你可以看到 --model
参数。这表明在运行 PDF 处理 pipeline 时,你可以 指定要使用的模型,而不仅仅局限于 ChatGPT 4o。 默认情况下,它使用的是 allenai/olmOCR-7B-0225-preview
, 但你可以根据自己的需求切换到其他支持的模型。
总结来说,虽然 ChatGPT 4o 在 olmOCR 项目中扮演着重要角色 (特别是在数据构建方面),但它绝不是唯一选择。 olmOCR 的设计理念是开放和灵活的,旨在支持多种语言模型,特别是开源的视觉语言模型,例如 Qwen2-VL 和 Molmo-O。 你可以根据你的需求和资源,选择最合适的模型来驱动 olmOCR 的 PDF 处理 pipeline。
因此,你可以将 olmOCR 理解为一个 \"语言模型驱动的 PDF 处理工具包\", 而 ChatGPT 4o 只是其中一种可以使用的语言模型,但绝不是唯一或必需的选择。