datalab-to/lift

GitHub: datalab-to/lift

基于 9B 视觉模型,根据自定义 JSON Schema 从 PDF 和图像中快速提取结构化数据的文档智能工具。

Stars: 864 | Forks: 78

Datalab Logo

Datalab

State of the Art models for Document Intelligence

Code License Model License Discord

Homepage Docs Public Playground


# 提升 lift 通过传入 schema 从 PDF 和图像中提取结构化的 JSON。它是一个 9B vision 模型,能够返回与你的 schema 匹配的 JSON 对象,并利用 schema 约束解码来保证输出的有效性。

lift extracting schema-aligned JSON from an invoice Extraction accuracy benchmark

## 在 Datalab 上试用 lift 我们的托管平台提供了改进的提取功能,准确率高于开放权重版本,并提供逐字段验证、引用和置信度分数。 如果您有大批量处理需求,我们提供每周可处理超过 10 亿页的批处理服务。 开始使用**每月 20 美元的免费额度** —— [注册](https://www.datalab.to/?utm_source=gh-lift) - 只需不到 30 秒 - 或者在我们的[公开测试场](https://www.datalab.to/playground?utm_source=gh-lift)中试用 lift。 商业自托管需要许可证 —— 请参阅[商业用途](#commercial-usage)。如需本地部署许可,请[联系我们](https://www.datalab.to/contact?utm_source=gh-lift-onprem)。 ## 功能 - 从文档中提取结构化数据 - 支持传入任意 JSON schema - 单次处理即可应对多页文档,包括跨页面的值 - 两种推理模式:本地(HuggingFace)和远程(vLLM 服务器) - 提供用于处理单个文件、内联 schema 或整个目录的 CLI - Schema Studio:一个 Streamlit 应用程序,可用于针对您的文档构建、保存和测试 schema ## 快速开始 最简单的入门方式是使用 CLI 工具: ``` pip install lift-pdf # 使用 vLLM(推荐,轻量级安装) lift_vllm lift_extract input.pdf ./output --schema schema.json # 使用 HuggingFace(需要 torch) pip install lift-pdf[hf] lift_extract input.pdf ./output --schema schema.json --method hf ``` ## 基准测试 在一个包含 225 份文档的提取基准上进行评估(每份文档 6-64 页,约 11,000 个评分字段),其中穿插了各种对抗性用例:跨页值、详尽的列表、必须保留为 null 的字段、极易混淆的干扰项以及多源数据聚合。评分采用针对 ground truth 的确定性精确匹配(数字容差,归一化字符串)。 所有模型都接收相同的渲染页面图像,并在单次处理中提取每份文档。 | 模型 | 参数量 | 字段准确率 | 全文档准确率 | 中位延迟* | 功能 | |---|---|----------------|------------------------|-----------------|--------------------------| | Datalab API | — | 95.9% | 44.4% | 30.8s | 引用 + 验证 | | Gemini Flash 3.5 | — | 91.3% | 40.0% | 28.1s | | | **lift** | 9B | **90.2%** | 20.9% | 9.5s | | | Azure Content Understanding | — | 83.4% | 22.2% | 73.7s | 引用 | | NuExtract3 | 4B | 81.5% | 8.4% | 8.3s | | | Qwen3.5-9B | 9B | 76.32% | 24.0% | 16.8s | | \* 按每份文档计,8 个并发请求。本地模型(lift、Qwen3.5-9B、NuExtract3)使用单 GPU 上的 vLLM 提供服务;Gemini、Datalab 和 Azure 通过 API 访问。延迟随硬件和负载而变化 - 请将其视为相对值,而非绝对值。

Latency benchmark

- **字段准确率** — 正确提取的单个 schema 字段的比例。 - **全文档准确率** — *每个* 字段均正确的文档比例。 - 所有模型均使用 Github 或 Huggingface 上的默认/推荐配置进行服务。 带有验证、引用和置信度分数的托管模型可通过 [Datalab API](https://www.datalab.to) 获取 - 请在[测试场](https://www.datalab.to/playground)中进行测试。 ## 安装 ### 包 ``` # 基础安装(用于 vLLM backend) pip install lift-pdf # 使用 HuggingFace backend(包含 torch、transformers) pip install lift-pdf[hf] # 使用 Schema Studio 应用 pip install lift-pdf[app] # 包含所有 extras pip install lift-pdf[all] ``` 如果您使用 HuggingFace 方法,我们还建议安装 [flash attention](https://github.com/Dao-AILab/flash-attention) 以获得更好的性能。 ### 从源码安装 ``` git clone https://github.com/datalab-to/lift.git cd lift uv sync source .venv/bin/activate ``` ## 使用方法 ### Schemas schema 采用标准的 JSON Schema。尽量保持简单 —— 支持 `string`、`number`、`integer`、`boolean`、由这些类型组成的数组、对象数组以及嵌套对象。避免使用 `enum`、`anyOf`/`oneOf`、`$ref` 和 `additionalProperties`;schema 约束解码器会跳过无法编译的 schema,这会削弱输出保证。 ``` { "type": "object", "properties": { "invoice_number": {"type": "string", "description": "Invoice identifier"}, "total": {"type": "number", "description": "Total amount due"}, "line_items": { "type": "array", "items": { "type": "object", "properties": { "description": {"type": "string"}, "amount": {"type": "number"} } } } }, "required": ["invoice_number", "total"] } ``` 为任何名称不能自解释的字段编写 `description`。仅当某个字段必须出现时才将其标记为 `required`;如果文档中确实不存在某个字段,它将返回 `null`。 ### CLI 处理单个文件或整个目录: ``` # 单个文件,使用 vLLM server(有关如何启动它的说明,请参见下文) lift_extract input.pdf ./output --schema schema.json # 内联 JSON schema lift_extract scans/ ./output --schema '{"type": "object", "properties": {...}}' # 保存在 schemas/ 目录中并按名称命名的 schema,仅限于部分页面 lift_extract input.pdf ./output --schema invoice --page-range 0-5,8 # 使用本地 HuggingFace 模型处理整个目录 lift_extract ./documents ./output --schema schema.json --method hf ``` **CLI 选项:** - `--schema TEXT`(必填):JSON schema 文件的路径、内联 JSON 字符串或 schema 库中已保存 schema 的名称。 - `--method [hf|vllm]`:推理方法(默认:`vllm`)。 - `--page-range TEXT`:PDF 的页面范围,例如 `"0-5,7,9-12"`(仅适用于 PDF)。 - `--max-output-tokens INTEGER`:最大输出 token 数量。 **输出结构:** 对于每个处理过的文件,`lift_extract` 会写入输出目录: - `.json` — 与你的 schema 匹配的提取结果 - `_metadata.json` — 页数、token 数量和错误信息(当提取失败时包含原始模型输出,以便调试) ### Python ``` from lift import extract # schema:一个 dict、一个指向 .json 文件的路径、一个内联 JSON 字符串,或一个库名称 result = extract("document.pdf", "schema.json") if result.extraction is not None: data = result.extraction # dict matching the schema ``` 传入一个可复用的模型 - `from lift.model import InferenceManager; model=InferenceManager(method="hf")` - 以在进程中加载权重并在多次调用中复用,并使用 `page_range="0-5"` 来限制 PDF 页数。设置 `VLLM_API_BASE` 以指向远程服务器。 ### Schema Studio 启动交互式应用程序,针对您的文档构建、保存和测试提取 schema(需要 `pip install lift-pdf[app]`): ``` lift_app ``` ### vLLM 服务器 对于生产环境部署或批处理,请启动 vLLM 服务器: ``` lift_vllm # defaults to H100 settings lift_vllm --gpu a100-80 # tune batch settings for your GPU ``` 这将启动一个带有优化推理设置的 Docker 容器,并根据您的 GPU VRAM 自动调整批处理大小。支持的 GPU:`h100`、`a100-80`、`a100`/`a100-40`、`l40s`、`a10`、`l4`、`4090`、`3090`、`t4`。 您也可以使用 `datalab-to/lift` 模型启动自己的 vLLM 服务器。 ### 配置 可以通过环境变量或 `local.env` 文件配置设置: ``` # 模型设置 MODEL_CHECKPOINT=datalab-to/lift MAX_OUTPUT_TOKENS=12384 TORCH_DEVICE=cuda:0 # pin the HF backend to a device # vLLM 设置 VLLM_API_BASE=http://localhost:8000/v1 VLLM_MODEL_NAME=lift VLLM_GPUS=0 ``` # 商业用途 本代码采用 Apache 2.0 许可协议,我们的模型权重使用修改后的 OpenRAIL-M 许可协议(对于资金/收入低于 500 万美元的研究、个人使用和初创企业免费,不得用于与我们的 API 竞争)。要取消 OpenRAIL 许可要求或获取更广泛的商业许可,请访问我们的定价页面[此处](https://www.datalab.to/pricing?utm_source=gh-lift)。 # 致谢 感谢以下开源项目: - [Huggingface Transformers](https://github.com/huggingface/transformers) - [vLLM](https://github.com/vllm-project/vllm) - [Qwen 3.5](https://github.com/QwenLM/Qwen3)
标签:AI, JSON解析, Kubernetes, OCR, 凭据扫描, 文档智能, 结构化数据提取, 自动化代码审查, 视觉模型, 请求拦截, 逆向工具