ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

MLX-VLM 实战指南:在 Mac 上使用 GLM-OCR 完成文档解析与结构化信息提取

MLX-VLM 实战指南:在 Mac 上使用 GLM-OCR 完成文档解析与结构化信息提取 MLX-VLM 实战指南在 Mac 上使用 GLM-OCR 完成文档解析与结构化信息提取【免费下载链接】mlx-vlmMLX-VLM is a package for inference and fine-tuning of Vision Language Models (VLMs) on your Mac using MLX.项目地址: https://gitcode.com/GitHub_Trending/ml/mlx-vlmGLM-OCR 是一个针对光学字符识别OCR任务优化的视觉语言模型擅长文档解析文本、公式、表格识别与结构化信息抽取。本文将围绕其官方模型说明文档展开结合 MLX-VLM 仓库中的源码实现完整讲解安装方式、CLI 与 Python 两种调用路径、两类 Prompt 场景、核心生成参数以及可落地的完整 OCR 流水线帮助你直接在 Apple Silicon Mac 上把纸质文档、公式图片、表格和证件图片快速转化为可机读的结构化数据。模型概述为 OCR 而生的视觉语言模型GLM-OCR 是 GLM 系列中面向 OCR 场景的专用模型由 ZAI 团队开发MLX-VLM 将其移植到 Apple 的 MLX 框架上使其可以在 Mac含统一内存架构上直接完成推理。根据官方模型说明见 模型文档其核心信息如下模型 IDmlx-community/GLM-OCR-bf16bf16 精度权重由 MLX 社区发布架构视觉语言模型采用M-RoPEMulti-dimensional Rotary Position Embedding多维旋转位置编码支持任务文本识别、公式识别、表格识别、结构化信息提取从源码看模型由三大组件构成见 glm_ocr.pyvision_tower视觉塔、language_model语言模型以及负责把图像特征与文本嵌入合并的merge_input_ids_with_image_features逻辑。配置文件 config.py 中可以看到更精确的规模信息语言模型TextConfig隐藏维度 1536、16 层、16 个注意力头、8 个 KV 头、词表 59392、最大位置编码 131072rope_parameters中mrope_section [16, 24, 24]这正是 M-RoPE 将位置维度划分为时间、高度、宽度三个通道的实现依据视觉塔VisionConfig24 层、patch 大小 14、输入图像 336、空间合并大小spatial_merge_size为 2、时间 patch 大小为 2。文档解析类任务对长文档与密集版面的位置关系敏感M-RoPE 让模型能够同时感知图像块的“时间帧/高/宽”三维位置这是 GLM-OCR 在版面还原上优于普通 2D 位置编码模型的重要基础。安装 MLX-VLM在开始之前请确保你的 Mac 已安装 Apple Silicon 平台所需的 MLX 依赖macOS 环境、Python 3.9。MLX-VLM 提供了两种安装方式pip 安装pip install mlx-vlmuv 安装更快的 Python 包管理器uv pip install mlx-vlm模型权重无需手动下载mlx-community/GLM-OCR-bf16会在首次load()或 CLI 运行时自动从 Hugging Face Hub 拉取并缓存到本地。如果你希望完全离线运行可先使用huggingface-cli download mlx-community/GLM-OCR-bf16预下载再通过本地路径加载。使用方式一CLI 快速上手CLI 是最快的验证方式核心命令为mlx_vlm generate。官方文档给出了四种典型场景它们共享同一套命令结构差别仅在于--prompt的内容基础文本识别uv run mlx_vlm generate --model mlx-community/GLM-OCR-bf16 --image document.png --prompt Text Recognition:公式识别uv run mlx_vlm generate --model mlx-community/GLM-OCR-bf16 --image equation.png --prompt Formula Recognition:表格识别uv run mlx_vlm generate --model mlx-community/GLM-OCR-bf16 --image table.png --prompt Table Recognition:结构化信息提取以身份证为例Prompt 必须遵循 JSON 格式uv run mlx_vlm generate --model mlx-community/GLM-OCR-bf16 --image id_card.png --prompt 请按下列JSON格式输出图中信息: { id_number: , last_name: , first_name: , date_of_birth: , address: { street: , city: , state: , zip_code: }, dates: { issue_date: , expiration_date: }, sex: }CLI 的完整参数如--max-tokens、--temperature、--top-p可在 CLI 参考文档 与 generate/cli.py 中查看它们与下文 Python 接口的生成参数一一对应。使用方式二Python API 编程调用对于需要集成进业务系统的场景Python API 提供了更强的可控性。加载与生成的核心依赖为load、generate与apply_chat_template分别导出自 utils.py 与 prompt_utils.py入口见init.py。文档解析——文本识别from mlx_vlm import load, generate from mlx_vlm.prompt_utils import apply_chat_template # Load model model, processor load(mlx-community/GLM-OCR-bf16) # Document Parsing - Text Recognition prompt Text Recognition: formatted_prompt apply_chat_template(processor, model.config, prompt, num_images1) result generate( model, processor, formatted_prompt, image[document.png], max_tokens512, verboseTrue, ) print(result.text)公式识别prompt Formula Recognition: formatted_prompt apply_chat_template(processor, model.config, prompt, num_images1) result generate( model, processor, formatted_prompt, image[equation.png], max_tokens256, ) print(result.text)表格识别prompt Table Recognition: formatted_prompt apply_chat_template(processor, model.config, prompt, num_images1) result generate( model, processor, formatted_prompt, image[table.png], max_tokens1024, ) print(result.text)结构化信息提取JSON Schema 驱动# Define JSON schema for extraction prompt 请按下列JSON格式输出图中信息: { id_number: , last_name: , first_name: , date_of_birth: , address: { street: , city: , state: , zip_code: }, dates: { issue_date: , expiration_date: }, sex: } formatted_prompt apply_chat_template(processor, model.config, prompt, num_images1) result generate( model, processor, formatted_prompt, image[id_card.png], max_tokens512, ) print(result.text)关于apply_chat_template其签名prompt_utils.py显示它接收processor、config、prompt以及add_generation_prompt、num_images等参数。它首先从config.model_type判断模型类型再为当前模型调用对应的聊天模板封装用户消息。GLM-OCR 属于仓库MODEL_CONFIG注册的视觉语言模型因此会走带图像占位符的消息构建分支num_images1告知模板当前输入包含 1 张图从而在 prompt 中正确插入|image|占位符。底层发生了什么从图片到 tokenGLM-OCR 的推理链路在仓库中有完整的实现理解它有助于你调优输入图片图像预处理processing.pyGlmOcrProcessor包装了图像处理器与分词器。图像处理器先通过smart_resize把图片按 28 的倍数patch_size * merge_size即 14 × 2缩放控制像素总量在min_pixels与max_pixels之间默认112 × 112至14 × 14 × 2 × 2 × 2 × 6144再进行归一化ImageNet 均值/方差与temporal_patch_size维度的复制最终输出pixel_values与image_grid_thw两个字段占位符展开Processor 根据image_grid_thw计算每张图展开后的视觉 token 数量prod(grid) // merge_length其中merge_length merge_size²把 prompt 中的|image|替换为对应数量的图像 token视觉塔编码vision.pyGlmOcrVisionPatchEmbed使用 Conv3d时间 patch 2 × 空间 patch 14 × 14切分 patch24 层GlmOcrVisionBlock内使用 RMSNorm 归一化的 Q/K 与二维高、宽旋转位置编码最后由downsample2×2 卷积与GlmOcrVisionPatchMergerSwiGLU 结构把视觉特征映射到语言模型的隐藏维度特征合并glm_ocr.pymerge_input_ids_with_image_features在|image|token 位置把视觉特征插入文本嵌入序列同时get_rope_index依据mrope_section [16, 24, 24]为每个 token 计算时间/高/宽三维位置 ID预填充 M-RoPE 位置信息供语言模型逐层自回归生成文本。支持的 Prompt 场景GLM-OCR 官方文档将用法划分为两大场景两类场景的 Prompt 组织方式完全不同务必区分使用1. 文档解析Document Parsing提取文档中的原始内容使用固定任务 Prompt任务Prompt文本识别Text Recognition:公式识别Formula Recognition:表格识别Table Recognition:2. 信息抽取Information Extraction从文档中提取结构化信息Prompt 必须遵循严格的 JSON Schema 格式。模型会依据你在 Prompt 中给出的空 JSON 骨架将图片中的对应字段填充后输出。示例——身份证抽取请按下列JSON格式输出图中信息: { id_number: , last_name: , first_name: , date_of_birth: , address: { street: , city: , state: , zip_code: }, dates: { issue_date: , expiration_date: }, sex: }示例——发票抽取请按下列JSON格式输出图中信息: { invoice_number: , date: , vendor: , items: [], subtotal: , tax: , total: }注意使用信息抽取时输出必须严格符合定义的 JSON Schema以保证下游处理如入库、校验、对接业务系统的兼容性。字段建议全部使用英文键名数组字段如items预置为空数组即可。生成参数说明CLI 与 Python API 共享同一套解码参数官方文档给出的默认值如下参数说明默认值max_tokens最大生成 token 数256temperature采样温度0 表示确定性输出0.0top_pNucleus 采样参数1.0实操建议表格识别信息密度高、输出长官方示例将max_tokens设为 1024防止输出被截断公式识别输出通常较短max_tokens256足够结构化抽取建议保持temperature0默认值确保同一张图多次推理结果稳定便于回归测试与下游校验若输出出现乱码或重复可优先调低top_p如 0.9再配合低温使用。示例完整 OCR 流水线官方文档提供了一个将“文档解析”与“结构化抽取”封装为两个函数的完整流水线模型只加载一次、可复用多次非常适合批量处理场景from mlx_vlm import load, generate from mlx_vlm.prompt_utils import apply_chat_template import json # Load model once model, processor load(mlx-community/GLM-OCR-bf16) def extract_text(image_path: str) - str: Extract raw text from an image. prompt Text Recognition: formatted_prompt apply_chat_template(processor, model.config, prompt, num_images1) result generate(model, processor, formatted_prompt, image[image_path], max_tokens1024) return result.text def extract_structured(image_path: str, schema: dict) - dict: Extract structured information using a JSON schema. prompt f请按下列JSON格式输出图中信息:\n{json.dumps(schema, indent4, ensure_asciiFalse)} formatted_prompt apply_chat_template(processor, model.config, prompt, num_images1) result generate(model, processor, formatted_prompt, image[image_path], max_tokens512) return json.loads(result.text) # Usage text extract_text(document.png) print(fExtracted text: {text}) # Structured extraction schema { title: , author: , date: , content: } data extract_structured(article.png, schema) print(fExtracted data: {data})这个流水线的价值在于extract_text负责“看懂版面”——把整页内容还原为可读文本extract_structured负责“读懂语义”——把特定字段抽取为可直接json.loads的字典。二者组合即可覆盖“先全文 OCR、再字段抽取”的典型业务链路。使用建议与注意事项输入图片质量优先GLM-OCR 内部会按 28 的倍数缩放并裁剪像素总量见 processing.py 的smart_resize过小或严重失真的图片会损失细节扫描件建议保证分辨率与对比度不同任务选对 Prompt三类“Recognition”任务使用固定英文 Prompt信息抽取使用中文 JSON 模板混用会显著影响效果长文档分批处理语言模型最大位置编码为 131072config.py常规单页文档远低于此上限但超长多页文档仍建议按页切分后逐页解析再合并结构化输出需做健壮性处理真实场景中模型偶尔会输出 JSON 外的多余文本建议在extract_structured中对result.text做 JSON 提取与异常兜底如查找首个{到末尾}的片段避免直接json.loads抛错硬件前提本模型针对 Apple Silicon Mac 设计基于 MLX 框架推理bf16 权重对内存有基本要求加载前可留意 Mac 统一内存容量。通过本文的 CLI 命令与 Python 流水线你已经可以在 Mac 上完整跑通“图片输入 → 文本/公式/表格识别 → JSON 结构化输出”的 GLM-OCR 全流程。更多模型参数与批量生成能力可继续查阅仓库中的 generate 模块 与 server 文档。【免费下载链接】mlx-vlmMLX-VLM is a package for inference and fine-tuning of Vision Language Models (VLMs) on your Mac using MLX.项目地址: https://gitcode.com/GitHub_Trending/ml/mlx-vlm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表