源代码:https://github.com/NanoNets/docext
基本信息
- VLM 模型:Nanonets-OCR-s,基于 qwen2.5VL-3B 训练
- 使用 gradio 构建交互页面以及请求接口
- 主要功能:关键信息提取、pdf 页面转 markdown
- python>=3.11
环境准备(基于 vllm)
模型,Nanonets-OCR-s 模型可以 hugging-face、huggingface 镜像、modelscope(推荐)上下载,地址分别是:https://huggingface.co/nanonets/Nanonets-OCR-s、https://hf-mirror.com/nanonets/Nanonets-OCR-s、https://modelscope.cn/models/nanonets/Nanonets-OCR-s
推理环境,需要使用 nvidia 的显卡推理环境,显存是越大越好,根据 qwen2.5vl 官方(https://github.com/QwenLM/Qwen2.5-VL),即:
至少有(5.75*1.2=6.9G),但如果想支持同时推理更多的图片则需要更多的显存。
- docext 安装:pip install docext,也可以源码安装
主要依赖内容
- Gradio
- VLLM
- LLM Prompt
启动服务
例如:
python -m docext.app.app --model_name hosted_vllm/nanonets/Nanonets-OCR-s
服务提供的主要参数有:
vlm_server_port,vllm 启动的模型使用的端口, 默认使用 8000
vlm_server_host,vllm/OLLAM 服务使用的 host,默认:127.0.0.1
model_name,默认是 hosted_vllm/Qwen/Qwen2.5-VL-7B-Instruct-AWQ,ollama/开头的话使用的是 OLLAMA 模型,hosted_vllm 开头的话使用 vllm 启动服务
ui_port,gradio 服务启动使用的端口,默认是 7860
max_model_len,多模态大模型支持的最大长度,默认是 15000,如果显存比较小的话需要调小,具体可参考 vllm 参数
gpu_memory_utilization,gpu 使用率,默认是 0.9,具体参数可以参考 vllm 参数
max_num_imgs,一次 prompt 处理传入的最多图片数量,默认是 5
vllm_start_timeout,vllm 服务启动限制时长(s),默认是 300
share,是否开发 ui 服务到公网,gradio 相关参数,默认是 false
max_img_size,处理图片的最大尺寸,默认是 1024
concurrency_limit,接口并发请求限制,默认 1
max_gen_tokens, 最大的生成 token 数量,默认是 10000
服务启动后,需要使用 username/password:admin/admin 访问和请求。
主要功能
自定义的信息提取
这部分的信息提取主要使用的是开源的大模型,主要是 qwen2.5vl 系列模型,模型参数量源码推荐从 7B 开始,例如:Qwen/Qwen2.5-VL-7B-Instruct-AWQ(默认)。
主要流程
定义需要提取的字段以及字段的描述(字段描述是可选项);
上传文档(可以是一张图片也可以是多页面文档的多张图片)
使用 PIL.Image.resize,将图片统一处理成大小为(width x heigth)max_img_size x max_img_size 的尺寸,然后使用:
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
- 使用两个线程分别对 field、table 类型的字段分别提取:
a.字段类型数据提取,
(1) 构建字段提取 prompt(message):Extract the following fields from the documents:\n 字段名:描述\nDocuments:\n 图片内容的 base64(可以多张)\nReturn a JSON with the following format:\n {“字段名”:“…”,…}. If a field is not found, return ‘’ for that field. Do not give any explanation.
(2) 调用大模型获取提取的字段数据 response
<