olmOCR 是 AI2 面向文档线性化发布的开源工具包。它把 PDF 的每一页渲染为图像,再交给针对文档训练的视觉语言模型 olmOCR-2 重建可读文本、表格和 LaTeX 公式;随后解析模型返回的 YAML 元数据,处理旋转或失败重试,并将页面拼接成 Markdown 与 Dolma JSONL。它也能接收 PNG 和 JPEG,因此适合论文语料、历史扫描件、知识库导入与 RAG 预处理。
它并不是传统意义上的“逐字识别器”。传统 OCR 重点是字符和坐标,olmOCR 还会判断多栏阅读顺序、去除页眉页脚、把视觉表格改写为文本结构。这种能力能得到更适合语言模型消费的结果,也带来生成式风险:语句看起来通顺,不代表数字、否定词、变量或表格对应关系一定忠于原页。源文件、页面图像和审阅记录必须保留。
一页文档实际上经历什么
| 阶段 | 当前行为 | 必须防范的问题 |
|---|---|---|
| 输入 | PDF、PNG、JPEG;可在本地或 workspace 中组织 | 加密、损坏、超大文件以及无权处理的资料需要另行拦截 |
| 渲染 | PDF 页面按受控尺寸转换成 PNG,模型可提示旋转修正 | 小字、模糊、压缩、污损和极端纵横比会减少视觉证据 |
| 重建 | olmOCR-2 根据整页图像输出自然阅读顺序文本和结构 | 模型可能漏写、替换、归一化或凭上下文补出不存在的内容 |
| 验证与重试 | 检查上下文长度、结束原因、YAML 可解析性与旋转信号 | 格式通过只证明可解析;多次重试仍可能得到另一种合理但错误的答案 |
| 导出 | 拼接页面文本与页跨度,写入 Dolma;可同步写 Markdown | 跨页表格、脚注、标题层级以及缺页仍需文档级复核 |
当前主线实现把每页作为相对独立的推理任务。这样的设计便于并发、失败重试和断点续跑,却不会自动解决跨页语义。例如表头在上一页、续表在下一页时,单页结果可能各自合理但组合后错误;页面边界、原文件哈希和失败清单因此不能丢。
官方仓库在本次复核时仍在维护,GitHub 可见的最新稳定版为 v0.4.27,发布日期为 2026 年 3 月 12 日。近期版本曾修复长队列、旋转和空白文档幻觉等问题。这说明项目活跃,也说明生产环境应锁定经过回归测试的版本,而不是每次直接使用 main。
Anchor 锚点:旧方法与当前模型的关键版本边界
仓库保留了 anchor.py:它可以通过 pdftotext、PDFium 或 pypdf 抽取一段原生 PDF 文本,早期模型会把这段不完美文本与页面图像一起提供给 VLM,帮助恢复难认字符。CLI 目前仍显示 --target_anchor_text_len,但帮助文本明确标注“新模型不使用”。当前主线的页面请求调用的是 no-anchoring 提示,只有模型失败时的 fallback 会直接采用 pdftotext。
因此,把“olmOCR 一定依赖 PDF 锚点”写成固定卖点是不准确的。锚点是项目历史和代码中保留的技术路径,不是 olmOCR-2 每次推理的证据来源。即便如此,对 born-digital PDF 仍建议独立执行原生文本提取并与 VLM 结果比较:一致不等于绝对正确,但不一致能快速暴露编码、阅读顺序、遗漏或幻觉。纯扫描页通常根本没有可用文本层。
模型、数据、评测与许可证
| 证据项 | 官方资料核实到的范围 | 正确解读 |
|---|---|---|
| 第一代训练混合 | 论文描述 26 万页、来自超过 10 万份抓取 PDF,包含图形、手写和劣质扫描 | 数据多样不等于每种语言、档案或表单都同样可靠 |
| olmOCR-2 | 由 Qwen2.5-VL-7B-Instruct 微调的 7B 级模型,并采用可验证单元测试奖励的强化学习 | 论文称提升主要集中在英文基准的数学、表格和多栏页面 |
| olmOCR-Bench | 约 1,400 个单页 PDF,用 7,000 余项可机器核查事实覆盖公式、表格、旧扫描、页眉页脚、多栏和小字 | 它刻意测试困难事实,不等于用户自己的文档分布 |
| 精度与硬件 | 模型卡建议实际推理优先 FP8;BF16 适合继续微调 | 量化标签不能替代在目标 GPU、并发与图像尺寸上的实测 |
| 许可证 | 工具代码和发布的 olmOCR-2 权重为 Apache-2.0,模型卡另指向 AI2 Responsible Use Guidelines | 还需分别核对源文档版权、依赖、基础模型通知和业务合规 |
不要把仓库排行榜改写成“通用准确率”。olmOCR-Bench 是英文、单页、事实单元测试式评测,并有意集中在难例;它比只看字符编辑距离更能发现公式变量或阅读顺序错误,但仍不能证明中文合同、日文竖排、票据或病历质量。本文不搬运一个貌似精确的通用分数,也不编造 WER。
原论文给出过特定 2025 环境下的大规模页面成本实验。那是论文所用模型、硬件、批处理与当时价格的历史结果,不是今天的固定报价。生产预算应统计“每个验收通过页面”的成本,包括失败重试、GPU 空闲、传输、存储与人工复核,并注明版本和复核日期。
安装、本地批处理与远程推理
python -m venv .venv
source .venv/bin/activate
pip install "olmocr[gpu]"
olmocr ./workspace --markdown --pdfs ./samples/report.pdf
olmocr ./workspace --markdown --workers 2 \
--max_page_retries 3 --pdfs ./incoming/*.pdf
pip install olmocr
olmocr ./workspace --server https://inference.example/v1 \
--api_key "$OLMOCR_API_KEY" \
--model allenai/olmOCR-2-7B-1025-FP8 \
--max_concurrent_requests 8 --markdown --pdfs ./incoming/*.pdf
当前项目元数据要求 Python 3.11 及以上;GPU extra 固定了 Torch、Transformers 与 vLLM 版本。官方 README 把它描述为需要 GPU 的 7B 级 VLM。不要仅因为通用 Transformers 理论上能把权重放进内存,就对外承诺受支持的 CPU-only 生产路径。应先用目标 CUDA 驱动、显卡、镜像和锁文件做兼容性测试。
本地 GPU 能让页面在已批准环境中完成推理;远程 OpenAI-compatible server 则把渲染页传给另一台机器或供应商。后者不是“只上传向量”,而是发送足以还原文档内容的页面图像。必须审查 TLS、认证、区域、日志、保留策略、数据处理协议、模型别名和并发限制,API key 只放秘密管理器。
| 部署方式 | 适用场景 | 必须控制 | 主要风险 |
|---|---|---|---|
| 本地单 GPU | 隐私试点和中等队列 | 锁版本、限制 worker/显存、加密 workspace | CUDA/显存兼容和单机故障 |
| 内部多 GPU | 大规模受控批次 | 可恢复队列、并行策略、逐页清单和质量抽样 | 吞吐提高会同时放大静默错误 |
| 自托管远程服务 | 同一受控网络内共享推理 | TLS、服务身份、限额、禁记录请求正文 | 敏感文档集中暴露 |
| 第三方 API | 无需先购 GPU 的快速评估 | DPA、区域、保留、价格和模型版本复核 | 数据边界、费用与模型别名会变化 |
| AI2 在线 demo | 非敏感定性体验 | 只用公开或合成样本 | demo 不等于已通过隐私与 SLA 审批的生产服务 |
可执行的评测与批处理验收流程
- 按失败模式抽样。同时包含数字 PDF、照片、旋转/倾斜、旧扫描、小字、多栏、公式、表格、手写、混合语言、空白页和最长文件。
- 建立逐页事实。标注人名、日期、金额、否定词、表格单元关系、公式、必须出现文本、不得出现的页眉页脚以及前后阅读顺序。
- 至少跑两条独立路径。把 olmOCR 与 PDF 原生提取、Tesseract 或另一解析器比较;差异自动进入人工队列。
- 分别统计漏写与幻觉。一个错误负号或虚构句子可能只影响少量字符,却彻底改变事实。
- 记录运行指标。包括每页延迟、重试、失败页、峰值显存、输入输出 token 与每个验收页成本。
- 冻结复现清单。保存输入哈希、olmOCR 版本、checkpoint、FP8/BF16、运行时、渲染尺寸、重试参数和审阅结论。
- 小批通过后再扩容。设置最大缺页率和停止条件;质量下降、异常短输出或大量重试时暂停,而不是继续堆积结果。
- 对高风险字段做人工复核。财务数字、法律义务、医疗信息、公式和表格不得仅凭模型输出自动发布。
git clone https://github.com/allenai/olmocr.git
cd olmocr
pip install -e ".[bench]"
playwright install chromium
huggingface-cli download --repo-type dataset allenai/olmOCR-bench \
--local-dir ./olmOCR-bench
python -m olmocr.bench.convert olmocr_pipeline --dir ./olmOCR-bench/bench_data
python -m olmocr.bench.benchmark --dir ./olmOCR-bench/bench_data
官方 olmOCR-Bench 很适合升级回归:它用 presence/absence、阅读顺序、表格关系和可渲染数学等二元事实测试,避免把所有问题压缩成编辑距离。运行需要额外 bench 依赖与 Playwright Chromium。先按 README 选择受支持 runner 生成输出,再评分;不要把命令复制到未经审查的生产数据环境。
还要建立私有 holdout,且不能用同一批页面反复调参后再把它当独立测试。将错误按文本事实、结构、阅读顺序、语言、扫描质量和运行失败分类。对于 RAG,还要检查分块后引用是否仍能指回页码;对结构抽取,要验证 JSON/表格字段,而非只看 Markdown 外观。
表格、公式、扫描、语言、隐私与幻觉
表格和公式是 olmOCR-2 明确优化的难点,但“能输出 Markdown/LaTeX”不等于语义正确。核对合计、行列对应、合并单元格、上下标、小数点、千分位、负号和公式变量。一个更整洁的表格可能静默规范化了原值。需要决策或引用时,应让结果始终链接到源页图像。
低分辨率与严重污损存在证据上限。放大不能恢复已经消失的墨迹,VLM 会利用语言上下文猜出合理词语;这恰好是生成式系统的危险之处。把无法核实的部分标为不确定,不要让下游 LLM 在没有源证据的情况下自动“修复”。空白页、近空白页、重复页与恶意提示样式文本也应列入测试。
官方 benchmark 是英文。模型能处理多语言页面,但已发布证据没有证明所有文字系统质量一致。中文繁简混排、日文竖排、韩文旧字、阿拉伯从右到左、罕见字符和跨语言页面都要独立抽样,并用母语审阅者核对。不要从英语 leaderboard 推导一个多语准确率。
本地推理只有在模型缓存、S3 workspace、日志、崩溃转储、备份和监控也受控时才能称为本地隐私方案。最小化保留、加密原件与输出、按角色授权、日志脱敏并设置删除日期。远程服务接收的是完整页面证据,应按完整文档敏感度管理。
YAML 可解析、finish_reason 正常或重试成功,都只是技术健康信号,不是事实验证。可以用异常长度、禁用短语、页数覆盖、跨引擎差异和关键字段规则筛出问题;但法律、医疗、财务、身份和科研结论仍需人工检查。
与 Marker、Docling、Tesseract 和云文档 AI 的真实差异
| 方案 | 更适合什么时候 | 输出优势 | 核心代价 |
|---|---|---|---|
| olmOCR | 目标是供 LLM/RAG 使用的自然顺序文本,页面含公式、表格和复杂布局 | 干净 Markdown/文本与 Dolma 语料记录 | GPU/VLM 运维、生成式错误、位置结构较弱 |
| Marker | 需要多格式、图片导出、结构化 JSON,或 CPU/MPS/混合解析模式 | Markdown、JSON、HTML、chunks 和块结构 | 不同模式行为不同;模型权重许可证与 Apache 代码许可证需分开核对 |
| Docling | 需要广泛输入格式、统一 DoclingDocument 与本地/隔离部署 | lossless JSON、Markdown/HTML 与丰富集成 | 可配置栈更大,质量取决于所选 OCR/VLM/pipeline |
| Tesseract | 需要可重复的字符识别、坐标、TSV/hOCR 和大量语言训练包 | 文本与逐词位置格式 | 复杂布局、表格、公式和自然阅读顺序需额外组件 |
| 云 Document AI | 需要托管 SLA、表单/KV、分类、拆分和专业处理器 | 供应商结构化 Document 对象与运维能力 | 按量计费、数据边界、供应商 schema 与锁定 |
独立判断:olmOCR 的最佳定位是“面向语言模型的页面重建器”,不是像素级档案转录系统。若业务硬要求字词坐标、确定性审计、表单字段或分类,应优先结构化 OCR/解析器或云处理器,也可以把 olmOCR 作为第二视角。
更稳健的生产架构通常是路由而不是单模型:干净数字页走原生提取,视觉复杂页走 VLM,关键字段或两条路径冲突时进入人工复核。这样既不会为所有页面支付 VLM 成本,也不会把顺滑 Markdown 当成无条件真相。
常见问题
olmOCR 只是给 Tesseract 加了一个语言模型吗?
不是。Tesseract 偏向行级字符识别并可返回坐标;olmOCR 把整页作为视觉输入,直接生成自然顺序文本、表格与公式。后者更懂布局,但也可能生成合理的错误。
当前 olmOCR-2 会使用 PDF anchor text 吗?
主线新模型请求采用 no-anchoring 提示,CLI 也说明 anchor 长度参数不用于新模型。代码仍保留 anchor 抽取与 pdftotext fallback,原生文本仍适合作为独立验证来源。
可以完全离线运行吗?
模型和依赖预先下载后,可以在兼容的本地 NVIDIA GPU/vLLM 环境运行。仍需确认缓存、日志、workspace、备份和更新检查没有外发。远程 server 模式会发送页面内容。
会保留 bounding boxes 吗?
主要输出是带页跨度的线性化自然文本,不是逐词坐标图。位置溯源是硬需求时,应选 Tesseract、Marker JSON、Docling 或云文档 AI。
表格与公式可以直接用于财务或科研吗?
不能跳过验证。必须核对合计、行列关系、负号、变量、单位和合并单元格,并保留源页。已优化某类任务不等于每个实例都正确。
支持哪些语言?
模型可以处理多语言,但官方 benchmark 是英文,没有一个可信的“所有语言统一准确率”。每种目标语言、书写方向和页面类型都要建立测试集。
需要多少显存?
官方说明是 7B 级 GPU 模型并推荐实际推理使用 FP8,但没有一个适用于所有运行时、上下文、图片尺寸和并发的固定显存承诺。应在目标 GPU 实测。
AI2 demo 能上传机密文件吗?
不要默认可以。未完成当前隐私、保留和服务条款审核前,只用公开或合成页面。敏感文件应进入批准的本地环境或合同覆盖的服务。
核对过的资料
- AI2 olmOCR repository and README
- Official release history
- olmOCR original paper
- olmOCR 2 paper: unit-test rewards
- olmOCR-2 model card and license
- olmOCR-Bench design and runner
- Official training guide
- Current page pipeline implementation
- Anchor-text implementation
- Python and GPU dependency metadata
- Apache-2.0 project license
- Marker official repository
- Docling official repository
- Tesseract official repository
- Google Cloud Document AI overview
独立技术复核:2026-08-20。复核时可见的最新稳定版为 v0.4.27。模型别名、依赖、API 价格与 demo 政策会变化,生产前请再次核对固定版本和私有测试集。


