datalab-to/lift
GitHub: datalab-to/lift
基于 9B 视觉模型,根据自定义 JSON Schema 从 PDF 和图像中快速提取结构化数据的文档智能工具。
Stars: 864 | Forks: 78
Datalab
State of the Art models for Document Intelligence
# 提升
lift 通过传入 schema 从 PDF 和图像中提取结构化的 JSON。它是一个 9B vision 模型,能够返回与你的 schema 匹配的 JSON 对象,并利用 schema 约束解码来保证输出的有效性。
## 在 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 访问。延迟随硬件和负载而变化 - 请将其视为相对值,而非绝对值。
- **字段准确率** — 正确提取的单个 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, 凭据扫描, 文档智能, 结构化数据提取, 自动化代码审查, 视觉模型, 请求拦截, 逆向工具