NEE's Blog

GLM-OCR:面向复杂文档理解的 0.9B 参数 OCR 模型

February 11, 2026

本文翻译自 GLM-OCR,原载于 GitHub。

模型概述

GLM-OCR 是一款面向复杂文档理解的多模态 OCR 模型,基于 GLM-V 编码器—解码器架构构建。它引入了 Multi-Token Prediction(MTP)损失与稳定的全任务强化学习训练策略,以提升训练效率、识别精度与泛化能力。

模型集成了三个核心组件:

  • CogViT 视觉编码器:在大规模图文数据上预训练
  • 轻量跨模态连接器:带高效的 token 下采样能力
  • GLM-0.5B 语言解码器:负责生成最终的文本输出

结合基于 PP-DocLayout-V3 的”两阶段”流程(先做版面分析,再进行并行识别),GLM-OCR 能在多样化文档布局下提供稳健且高质量的 OCR 表现。

核心特性

1. 业界领先的效果

在 OmniDocBench V1.5 上取得 94.62 分,综合排名第一。同时在以下主流文档理解基准上达到 SOTA 水平:

  • 公式识别
  • 表格识别
  • 信息抽取

2. 面向真实场景优化

这个特性特别值得关注。很多 OCR 模型在实验室数据集上表现不错,但一到真实业务场景就”翻车”。GLM-OCR 针对实际业务需求进行优化,在以下场景中依然保持稳定表现:

  • 复杂表格(多层嵌套、合并单元格)
  • 代码密集文档(各种编程语言混合)
  • 印章和手写内容
  • 其他高难度版面场景

3. 高效推理

总参数量仅 0.9B,这个规模非常友好:

  • 支持通过 vLLM、SGLang 与 Ollama 部署
  • 显著降低推理时延与算力成本
  • 适用于高并发服务与端侧部署

4. 上手简单

  • 全面开源
  • 提供完整的 SDK 与推理工具链
  • 支持便捷安装、一行调用
  • 可与现有生产流程顺滑集成

模型下载

模型 下载链接 精度
GLM-OCR 🤗 Hugging Face
🤖 ModelScope
BF16

快速开始

安装 SDK

pip install glmocr

# 或从源码安装
git clone https://github.com/zai-org/glm-ocr.git
cd glm-ocr && pip install -e .

# 从源码安装 transformers(推荐)
pip install git+https://github.com/huggingface/transformers.git

部署方式

GLM-OCR 提供两种使用方式:

方式 1:智谱 MaaS API(推荐快速上手)

适合不想自己部署 GPU 服务器的场景。

  1. 在 https://open.bigmodel.cn 获取 API Key
  2. 配置 config.yaml
pipeline:
  maas:
    enabled: true  # 启用 MaaS 模式
    api_key: your-api-key  # 必填

配置完成!当 maas.enabled=true 时,SDK 作为轻量级封装:

  • 将文档转发到智谱云端 API
  • 直接返回结果(Markdown + JSON 版面详情)
  • 无需本地处理,无需 GPU

方式 2:使用 vLLM / SGLang 自部署

适合需要完全掌控、数据隐私要求高的场景。

使用 vLLM:

# 安装 vLLM
pip install -U vllm --extra-index-url https://wheels.vllm.ai/nightly

# 启动服务(开启 MTP 获得更好的推理性能)
vllm serve zai-org/GLM-OCR \
  --allowed-local-media-path / \
  --port 8080 \
  --speculative-config '{"method": "mtp", "num_speculative_tokens": 1}'

使用 SGLang:

# 安装 SGLang
docker pull lmsysorg/sglang:dev

# 启动服务(开启 MTP 获得更好的推理性能)
python -m sglang.launch_server \
  --model zai-org/GLM-OCR \
  --port 8080 \
  --speculative-algorithm NEXTN \
  --speculative-num-steps 1

启动服务后,配置 config.yaml

pipeline:
  maas:
    enabled: false  # 禁用 MaaS 模式
  ocr_api:
    api_host: localhost
    api_port: 8080

使用示例

命令行

# 解析单张图片
glmocr parse examples/source/code.png

# 解析目录
glmocr parse examples/source/

# 指定输出目录
glmocr parse examples/source/code.png --output ./results/

# 开启 debug 日志(包含 profiling)
glmocr parse examples/source/code.png --log-level DEBUG

Python API

from glmocr import GlmOcr, parse

# 便捷函数
result = parse("image.png")
result = parse(["img1.png", "img2.jpg"])  # list 会被当作同一文档的多页
result = parse("https://example.com/image.png")
result.save(output_dir="./results")

# 类接口
with GlmOcr() as parser:
    result = parser.parse("image.png")
    print(result.json_result)
    result.save()

Flask 服务

# 启动服务
python -m glmocr.server

# 调用 API
curl -X POST http://localhost:5002/glmocr/parse \
  -H "Content-Type: application/json" \
  -d '{"images": ["./example/source/code.png"]}'

输出格式

GLM-OCR 支持两种输出格式:

JSON 格式(结构化数据):

[[{ "index": 0, "label": "text", "content": "...", "bbox_2d": null }]]

Markdown 格式(可直接阅读):

# 文档标题

正文内容...

| Table | Content |
| ----- | ------- |
| ...   | ...     |

模块化架构

GLM-OCR 使用可组合模块,便于自定义扩展:

组件 说明
PageLoader 预处理与图像编码
OCRClient 调用 GLM-OCR 模型服务
PPDocLayoutDetector 基于 PP-DocLayout 的版面分析
ResultFormatter 后处理与输出 JSON/Markdown

你也可以通过自定义 pipeline 扩展行为:

from glmocr.dataloader import PageLoader
from glmocr.ocr_client import OCRClient
from glmocr.postprocess import ResultFormatter

class MyPipeline:
  def __init__(self, config):
    self.page_loader = PageLoader(config)
    self.ocr_client = OCRClient(config)
    self.formatter = ResultFormatter(config)

  def process(self, request_data):
    # 实现你自己的处理逻辑
    pass

个人见解

GLM-OCR 的几个亮点值得特别关注:

  1. 参数量与性能的平衡:0.9B 参数在 OCR 模型中属于轻量级,但性能却能达到 SOTA 水平。这意味着部署成本大幅降低,对于资源受限的场景特别友好。

  2. 真实场景优化:很多 OCR 模型在学术论文上表现不错,但处理实际业务中的复杂表格、代码文档时效果大打折扣。GLM-OCR 明确针对这些场景进行了优化,这是一个很务实的做法。

  3. 多部署方式:无论是云端 API、本地 vLLM/SGLang,还是 MLX(Apple Silicon),都提供了完整的支持。这种灵活性对于不同规模和需求的项目都很重要。

  4. SDK 设计:提供 CLI、Python API 和 Flask 服务三种使用方式,覆盖了从快速测试到生产集成的各种场景。

适用场景

基于 GLM-OCR 的特性,以下场景特别适合使用:

  • 文档数字化:处理大量扫描文档、PDF 文件
  • 表格数据提取:从财务报表、统计表格中提取结构化数据
  • 代码文档处理:识别技术文档、代码截图中的内容
  • 票据处理:发票、收票、合同等票据的识别
  • 知识库构建:将纸质或图片资料转化为可搜索的数字格式

总结

GLM-OCR 是一款”小而美”的 OCR 模型。它在保持轻量级(0.9B 参数)的同时,通过创新的 MTP 损失和强化学习训练策略,在复杂文档理解任务上达到了 SOTA 水平。

对于需要处理中文文档、特别是包含复杂表格和代码的场景,GLM-OCR 是一个值得尝试的选择。它提供了从云端 API 到本地部署的多种使用方式,SDK 设计简洁,上手容易。

项目已完全开源,遵循 Apache License 2.0(代码)和 MIT License(模型),可以在 GitHub 上获取完整代码和文档。

相关资源

  • GitHub: https://github.com/zai-org/GLM-OCR
  • Hugging Face: https://huggingface.co/zai-org/GLM-OCR
  • ModelScope: https://modelscope.cn/models/ZhipuAI/GLM-OCR
  • API 文档: https://docs.bigmodel.cn/cn/guide/models/vlm/glm-ocr
comments powered by Disqus