
简介
GLM-OCR是一款基于GLM-V编码器-解码器架构的多模态OCR模型,专注于复杂文档理解。该模型通过引入多令牌预测(MTP)损失和稳定的全任务强化学习,显著提升了训练效率、识别准确率和泛化能力。其核心架构包含基于大规模图文数据预训练的CogViT视觉编码器、采用高效令牌降采样的轻量级跨模态连接器,以及GLM-0.5B语言解码器。结合基于PP-DocLayout-V3的两阶段流程(版面分析+并行识别),GLM-OCR能在各类文档布局场景中提供稳定优质的OCR性能。
核心优势
-
顶尖性能表现:在OmniDocBench V1.5评测中获得94.62分综合排名第一,在公式识别、表格识别、信息抽取等主流文档理解任务中均达到SOTA水平
-
真实场景优化:针对实际业务场景进行专项设计和优化,在复杂表格、代码密集文档、印章等具有挑战性的真实版面中保持稳健表现
-
高效推理部署:仅0.9B参数量,支持通过vLLM/SGLang/Ollama等多种方案部署,显著降低推理延迟和计算成本,适合高并发服务和边缘端部署
-
开箱即用体验 :完全开源并配备完整SDK和推理工具链,提供简易安装、单行调用能力,可快速接入现有生产流程
使用指南
vLLM方案
- 安装依赖:
bash
pip install -U vllm --extra-index-url https://wheels.vllm.ai/nightly
或使用Docker镜像:
docker pull vllm/vllm-openai:nightly
- 启动服务:
bash
pip install git+https://github.com/huggingface/transformers.git
vllm serve zai-org/GLM-OCR --allowed-local-media-path / --port 8080
SGLang方案
- 使用Docker镜像:
bash
docker pull lmsysorg/sglang:dev
或源码安装:
bash
pip install git+https://github.com/sgl-project/sglang.git#subdirectory=python
- 启动服务:
bash
pip install git+https://github.com/huggingface/transformers.git
python -m sglang.launch_server --model zai-org/GLM-OCR --port 8080
Ollama方案
- 下载Ollama
- 运行命令:
bash
ollama run glm-ocr
拖拽图片至终端时自动识别文件路径:
bash
ollama run glm-ocr Text Recognition: ./image.png
Transformers方案
安装依赖:
pip install git+https://github.com/huggingface/transformers.git
示例代码:
python
from transformers import AutoProcessor, AutoModelForImageTextToText
import torch
MODEL_PATH = "zai-org/GLM-OCR"
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"url": "test_image.png"
},
{
"type": "text",
"text": "Text Recognition:"
}
],
}
]
processor = AutoProcessor.from_pretrained(MODEL_PATH)
model = AutoModelForImageTextToText.from_pretrained(
pretrained_model_name_or_path=MODEL_PATH,
torch_dtype="auto",
device_map="auto",
)
inputs = processor.apply_chat_template(
messages,
tokenize=True,
add_generation_prompt=True,
return_dict=True,
return_tensors="pt"
).to(model.device)
inputs.pop("token_type_ids", None)
generated_ids = model.generate(**inputs, max_new_tokens=8192)
output_text = processor.decode(generated_ids[0][inputs["input_ids"].shape[1]:], skip_special_tokens=False)
print(output_text)
提示词规范
GLM-OCR当前支持两类提示场景:
- 文档解析 - 提取文档原始内容,支持任务类型包括:
python
{
"text": "Text Recognition:",
"formula": "Formula Recognition:",
"table": "Table Recognition:"
}
- 信息抽取 - 从文档提取结构化信息,提示词需严格遵循JSON格式。例如提取身份证信息:
python
请按下列JSON格式输出图中信息:
{
"id_number": "",
"last_name": "",
"first_name": "",
"date_of_birth": "",
"address": {
"street": "",
"city": "",
"state": "",
"zip_code": ""
},
"dates": {
"issue_date": "",
"expiration_date": ""
},
"sex": ""
}
⚠️ 注意:使用信息抽取功能时,输出必须严格符合预设JSON结构,以确保下游处理兼容性。
GLM-OCR开发套件
我们提供了开箱即用的SDK工具包,可更高效便捷地使用GLM-OCR模型,详见GitHub仓库。
致谢
本项目受以下优秀开源项目和社区启发:
许可证
GLM-OCR模型基于MIT许可证发布。
完整的OCR流程整合了PP-DocLayoutV3用于文档版面分析,该组件遵循Apache 2.0许可证。用户在使用本项目时需同时遵守两项许可协议。