|
|
--- |
|
|
license: apache-2.0 |
|
|
language: |
|
|
- zh |
|
|
- en |
|
|
base_model: |
|
|
- Qwen/Qwen3-VL-8B-Instruct |
|
|
pipeline_tag: image-text-to-text |
|
|
tags: |
|
|
- Declaration-Form |
|
|
- Audit |
|
|
- vision |
|
|
- multimodal |
|
|
- customs |
|
|
- document-understanding |
|
|
--- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<h1> Customs Declaration-Form-Audit VLM </h1> |
|
|
|
|
|
|
|
|
<h5 align="center"> |
|
|
|
|
|
<p align="center"> |
|
|
|
|
|
</p> |
|
|
|
|
|
|
|
|
</h5> |
|
|
</div> |
|
|
|
|
|
|
|
|
|
|
|
专为报关单证智能审核优化的多模态视觉语言模型。 |
|
|
|
|
|
|
|
|
## 🎯 模型功能 |
|
|
|
|
|
本模型专注于进出口报关单证的智能审核任务,具备以下核心能力: |
|
|
|
|
|
### 单证信息提取 |
|
|
- **证书类型识别**:卫生证书、原产地证书、检验报告、合同、发票等 |
|
|
- **关键字段提取**:证书编号、集装箱号、件数、净重、毛重 |
|
|
- **商品明细解析**:逐行提取表格数据(商品名称、数量、金额等) |
|
|
- **日期信息提取**:签发日期、有效期、生产日期 |
|
|
|
|
|
### 表格数据处理 |
|
|
- 支持复杂多列表格的逐行扫描 |
|
|
- 准确识别数字、日期、文本混合内容 |
|
|
- 自动处理表格合并单元格和分栏结构 |
|
|
|
|
|
### 多语言OCR |
|
|
- 中文、英文、西班牙语、日文、俄文等多语言混合识别 |
|
|
- 支持手写体和印刷体混合文档 |
|
|
- 模糊字符智能识别优化 |
|
|
|
|
|
### 单证比对审核 |
|
|
- 比对报关单与随附证书的一致性 |
|
|
- 识别数据异常和潜在风险点 |
|
|
- 生成结构化审核结果 |
|
|
|
|
|
## 🔧 模型训练 |
|
|
|
|
|
### 训练方法 |
|
|
本模型采用初期审单领域知识注入(CPT)+多阶段监督微调(SFT)+ 2阶段强化学习(RL)**的训练策略: |
|
|
|
|
|
1. **视觉-语言对齐阶段**:增强模型对单证图像的理解能力 |
|
|
2. **领域数据适配阶段**:学习海关报关单证的专业术语和格式 |
|
|
3. **任务专项优化阶段**:针对表格提取、字段识别等具体任务强化训练 |
|
|
4. **多任务融合阶段**:综合提升各项审核能力 |
|
|
|
|
|
### 训练数据规模 |
|
|
- 监督学习阶段:约70万条高质量标注样本 |
|
|
- 强化学习阶段:约15万条审核任务数据 |
|
|
- 覆盖20+国家/地区的单证格式 |
|
|
|
|
|
## 📄 疑难PDF处理能力 |
|
|
|
|
|
### 低质量图像优化 |
|
|
本模型在训练中特别针对实际业务中的疑难PDF进行了优化: |
|
|
|
|
|
1. 特殊类型的证书编号: |
|
|
|
|
|
 |
|
|
|
|
|
2. 负责表格数据提取及汇总: |
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
3. 不规范表格的提取: |
|
|
 |
|
|
|
|
|
|
|
|
4. 跨页单据的提取累加: |
|
|
|
|
|
 |
|
|
|
|
|
|
|
|
|
|
|
### 实测效果 |
|
|
|
|
|
| 测试场景 | 准确率 | |
|
|
|---------|-------| |
|
|
| 证书编号识别 | 99%+ | |
|
|
| 集装箱号提取 | 98%+ | |
|
|
| 表格数据提取 | 99%+ | |
|
|
| 件数重量识别 | 99%+ | |
|
|
|
|
|
## 🚀 快速开始 |
|
|
|
|
|
### 安装依赖 |
|
|
|
|
|
```bash |
|
|
pip install transformers torch pillow |
|
|
``` |
|
|
|
|
|
### Python推理 |
|
|
|
|
|
```python |
|
|
from transformers import Qwen2VLForConditionalGeneration, AutoProcessor |
|
|
from PIL import Image |
|
|
import torch |
|
|
|
|
|
# 加载模型 |
|
|
model = Qwen2VLForConditionalGeneration.from_pretrained( |
|
|
"shihao1989/Declaration-Form-Audit", |
|
|
torch_dtype=torch.bfloat16, |
|
|
device_map="auto" |
|
|
) |
|
|
processor = AutoProcessor.from_pretrained("shihao1989/Declaration-Form-Audit") |
|
|
|
|
|
# 准备输入 |
|
|
image = Image.open("certificate.jpg") |
|
|
messages = [ |
|
|
{ |
|
|
"role": "user", |
|
|
"content": [ |
|
|
{"type": "image"}, |
|
|
{ |
|
|
"type": "text", |
|
|
"text": "请提取这份证书的证书编号、集装箱号、件数和净重。" |
|
|
} |
|
|
] |
|
|
} |
|
|
] |
|
|
|
|
|
# 推理 |
|
|
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) |
|
|
inputs = processor(text=[text], images=[image], return_tensors="pt").to("cuda") |
|
|
|
|
|
output = model.generate(**inputs, max_new_tokens=512, temperature=0.1) |
|
|
result = processor.batch_decode(output, skip_special_tokens=True)[0] |
|
|
print(result) |
|
|
``` |
|
|
|
|
|
### vLLM部署(生产推荐) |
|
|
|
|
|
```bash |
|
|
docker run -d \ |
|
|
--name declaration-audit \ |
|
|
--runtime=nvidia \ |
|
|
-e NVIDIA_VISIBLE_DEVICES=0 \ |
|
|
--ipc=host \ |
|
|
-p 8000:8000 \ |
|
|
vllm/vllm-openai:latest \ |
|
|
--model shihao1989/Declaration-Form-Audit \ |
|
|
--trust-remote-code \ |
|
|
--max-model-len 32000 \ |
|
|
--gpu-memory-utilization 0.9 |
|
|
``` |
|
|
|
|
|
### API调用 |
|
|
|
|
|
```python |
|
|
import requests |
|
|
import base64 |
|
|
|
|
|
with open("certificate.jpg", "rb") as f: |
|
|
image_b64 = base64.b64encode(f.read()).decode() |
|
|
|
|
|
response = requests.post("http://localhost:8000/v1/chat/completions", json={ |
|
|
"model": "shihao1989/Declaration-Form-Audit", |
|
|
"messages": [ |
|
|
{ |
|
|
"role": "user", |
|
|
"content": [ |
|
|
{"type": "text", "text": "提取证书编号和净重"}, |
|
|
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{image_b64}"}} |
|
|
] |
|
|
} |
|
|
], |
|
|
"max_tokens": 512, |
|
|
"temperature": 0.1 |
|
|
}) |
|
|
|
|
|
print(response.json()["choices"][0]["message"]["content"]) |
|
|
``` |
|
|
|
|
|
## 💡 最佳实践 |
|
|
|
|
|
### Prompt设计建议 |
|
|
|
|
|
**推荐格式(结构化输出):** |
|
|
``` |
|
|
请从这份原产地证书中提取以下字段,返回JSON格式: |
|
|
{ |
|
|
"cert_code": "证书编号", |
|
|
"containers": ["集装箱号列表"], |
|
|
"packages": 件数(整数), |
|
|
"net_weight_kg": 净重(数字) |
|
|
} |
|
|
只输出JSON,不要有额外文字。 |
|
|
``` |
|
|
|
|
|
**关键原则:** |
|
|
- 明确指定提取字段和格式 |
|
|
- 提供字段的可能名称(如"证书编号/Certificate No.") |
|
|
- 使用JSON等结构化格式便于后处理 |
|
|
|
|
|
## 📜 许可证 |
|
|
|
|
|
本模型遵循 Apache 2.0 许可证。 |
|
|
|
|
|
## 🙏 致谢 |
|
|
|
|
|
- Qwen团队提供的优秀基座模型 |
|
|
- 海关业务专家提供的领域知识指导 |
|
|
|
|
|
## 📮 联系方式 |
|
|
|
|
|
如有问题或建议,欢迎通过Hugging Face Discussions交流。 |
|
|
邮箱:199416378@qq.com |