基于Qwen2-VL-2B-Instruct微调的多模态模型,具备精准文档识别能力,支持医疗表单、发票等多类文档处理,适用于医院、保险等场景,支持多轮问答与推理。【此简介由AI生成】
license: apache-2.0 language:
- vi
- en
- zh base_model:
- Qwen/Qwen2-VL-2B-Instruct library_name: transformers tags:
- erax
- multimodal
- erax-vl-2B
- insurance
- ocr
- vietnamese
- bcg
- image-to-text
- image-text-to-text pipeline_tag: visual-question-answering
widget:
- src: images/photo-1-16505057982762025719470.webp example_title: Test 1
- src: images/vt-don-thuoc-f0-7417.jpeg example_title: Test 2
EraX-VL-2B-V1.5
简介 🎉
继广受欢迎的 EraX-VL-7B-V1.0 模型 之后,我们荣幸推出 EraX-VL-2B-V1.5。这款增强型多模态模型具备强大的 OCR 和 VQA 能力,支持多种语言 🌍,尤其在 越南语 🇻🇳 处理方面表现卓越。EraX-VL-2B 模型在各类文档 📝 的精准识别上脱颖而出,包括医疗表格 🩺、发票 🧾、销售单据 💳、报价单 📄 和病历 💊 等。预计此功能将为医院 🏥、诊所 💉、保险公司 🛡️ 及其他类似应用场景 📋 带来极大便利。EraX-VL-2B 基于高质量且越南语流畅的 Qwen/Qwen2-VL-2B-Instruct[1] 进行构建,并通过微调进一步提升了性能。我们计划持续优化并免费发布新版本,并在近期分享性能基准测试结果。
EraX-VL-2B-V1.5 的一个突出特点是,在仅 20 多亿参数的小巧模型尺寸下,就能进行多轮问答,并具备合理的推理能力。
请注意:
- EraX-VL-2B-V1.5 并非 Tesseract 这类典型的纯 OCR 工具,而是基于多模态 LLM 的模型。要有效使用它,您可能需要根据具体任务 精心设计提示词。
- 该模型 尚未 使用医疗(X光)数据集或汽车事故数据集进行微调。敬请期待 2025 年某个时候推出的更新版本。
EraX-VL-2B-V1.5 是我们 EraX 的 LànhGPT LLM 模型系列中一位年轻且小巧的成员。
- 开发人员:
- Nguyễn Anh Nguyên (nguyen@erax.ai)
- Nguyễn Hồ Nam (BCG)
- Phạm Huỳnh Nhật (nhat.ph@erax.ai)
- Phạm Đình Thục (thuc.pd@erax.ai)
- 资助方: Bamboo Capital Group 和 EraX
- 模型类型: 参数超过 20 亿的多模态 Transformer
- 语言(NLP): 主要为越南语,具备多语言能力
- 许可证: Apache 2.0
- 微调基础模型: Qwen/Qwen2-VL-2B-Instruct
- 提示词示例: 一些常用提示词示例。
基准测试 📊
🏆 排行榜
| 模型 | 开源 | VI-MTVQA |
|---|---|---|
| EraX-VL-7B-V1.5 🥇 | ✅ | 47.2 |
| Qwen2-VL 72B 🥈 | ✘ | 41.6 |
| ViGPT-VL 🥉 | ✘ | 39.1 |
| EraX-VL-2B-V1.5 | ✅ | 38.2 |
| EraX-VL-7B-V1 | ✅ | 37.6 |
| Vintern-1B-V2 | ✅ | 37.4 |
| Qwen2-VL 7B | ✅ | 30.0 |
| Claude3 Opus | ✘ | 29.1 |
| GPT-4o mini | ✘ | 29.1 |
| GPT-4V | ✘ | 28.9 |
| Gemini Ultra | ✘ | 28.6 |
| InternVL2 76B | ✅ | 26.9 |
| QwenVL Max | ✘ | 23.5 |
| Claude3 Sonnet | ✘ | 20.8 |
| QwenVL Plus | ✘ | 18.1 |
| MiniCPM-V2.5 | ✅ | 15.3 |
论文中用于评估模型的测试代码可在以下地址获取:EraX-JS-Company/EraX-MTVQA-Benchmark
API 试用 🎉
如需咨询 API 访问权限,请联系 nguyen@erax.ai。
示例 🧩
1. OCR - 多图像光学字符识别
示例 01:公民身份证
正面视图
背面视图
来源:Google 支持
{
"Số thẻ":"037094012351"
"Họ và tên":"TRỊNH QUANG DUY"
"Ngày sinh":"04/09/1994"
"Giới tính":"Nam"
"Quốc tịch":"Việt Nam"
"Quê quán / Place of origin":"Tân Thành, Kim Sơn, Ninh Bình"
"Nơi thường trú / Place of residence":"Xóm 6 Tân Thành, Kim Sơn, Ninh Bình"
"Có giá trị đến":"04/09/2034"
"Đặc điểm nhân dạng / Personal identification":"seo chấm c:1cm trên đuôi mắt trái"
"Cục trưởng cục cảnh sát quản lý hành chính về trật tự xã hội":"Nguyễn Quốc Hùng"
"Ngày cấp":"10/12/2022"
}
示例 01:身份证
正面
背面
来源:互联网
{
"Số":"272737384"
"Họ tên":"PHẠM NHẬT TRƯỜNG"
"Sinh ngày":"08-08-2000"
"Nguyên quán":"Tiền Giang"
"Nơi ĐKHK thường trú":"393, Tân Xuân, Bảo Bình, Cẩm Mỹ, Đồng Nai"
"Dân tộc":"Kinh"
"Tôn giáo":"Không"
"Đặc điểm nhận dạng":"Nốt ruồi c.3,5cm trên sau cánh mũi phải."
"Ngày cấp":"30 tháng 01 năm 2018"
"Giám đốc CA":"T.BÌNH ĐỊNH"
}
示例 02:驾驶证
正面视图
背面视图
{
"No.":"400116012313"
"Fullname":"NGUYỄN VĂN DŨNG"
"Date_of_birth":"08/06/1979"
"Nationality":"VIỆT NAM"
"Address":"X. Quỳnh Hầu, H. Quỳnh Lưu, T. Nghệ An
Nghệ An, ngày/date 23 tháng/month 04 năm/year 2022"
"Hang_Class":"FC"
"Expires":"23/04/2027"
"Place_of_issue":"Nghệ An"
"Date_of_issue":"ngày/date 23 tháng/month 04 năm/year 2022"
"Signer":"Trần Anh Tuấn"
"Các loại xe được phép":"Ô tô hạng C kéo rơmoóc, đầu kéo kéo sơmi rơmoóc và xe hạng B1, B2, C, FB2 (Motor vehicle of class C with a trailer, semi-trailer truck and vehicles of classes B1, B2, C, FB2)"
"Mã số":""
}
示例 03:机动车登记证书
来源:越南网报
{
"Tên chủ xe":"NGUYỄN TÔN NHUẬN"
"Địa chỉ":"KE27 Kp3 P.TTTây Q7"
"Nhãn hiệu":"HONDA"
"Số loại":"DYLAN"
"Màu sơn":"Trắng"
"Số người được phép chở":"02"
"Nguồn gốc":"Xe nhập mới"
"Biển số đăng ký":"59V1-498.89"
"Đăng ký lần đầu ngày":"08/06/2004"
"Số máy":"F03E-0057735"
"Số khung":"5A04F-070410"
"Dung tích":"152"
"Quản lý":"TRƯỞNG CA QUẬN"
"Thượng tá":"Trần Văn Hiểu"
}
示例 04:出生证明
来源:https://congchung247.com.vn
{
"name": "NGUYỄN NAM PHƯƠNG",
"gender": "Nữ",
"date_of_birth": "08/6/2011",
"place_of_birth": "Bệnh viện Việt - Pháp Hà Nội",
"nationality": "Việt Nam",
"father_name": "Nguyễn Ninh Hồng Quang",
"father_dob": "1980",
"father_address": "309 nhà E2 Bạch Khoa - Hai Bà Trưng - Hà Nội",
"mother_name": "Phạm Thùy Trang",
"mother_dob": "1984",
"mother_address": "309 nhà E2 Bạch Khoa - Hai Bà Trưng - Hà Nội",
"registration_place": "UBND phường Bạch Khoa - Quận Hai Bà Trưng - Hà Nội",
"registration_date": "05/8/2011",
"registration_ralation": "cha",
"notes": None,
"certified_by": "Nguyễn Thị Kim Hoa"
}
快速入门 🎮
安装必要的软件包:
python -m pip install git+https://github.com/huggingface/transformers accelerate
python -m pip install qwen-vl-utils
pip install flash-attn --no-build-isolation
然后您可以像这样使用EraX-VL-2B-V1.5:
import os
import base64
import json
import cv2
import numpy as np
import matplotlib.pyplot as plt
import torch
from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
model_path = "erax/EraX-VL-2B-V1.5"
model = Qwen2VLForConditionalGeneration.from_pretrained(
model_path,
torch_dtype=torch.bfloat16,
attn_implementation="eager", # replace with "flash_attention_2" if your GPU is Ampere architecture
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained(model_path)
# processor = AutoProcessor.from_pretrained(model_path)
min_pixels = 256 * 28 * 28
max_pixels = 1280 * 28 * 28
processor = AutoProcessor.from_pretrained(
model_path,
min_pixels=min_pixels,
max_pixels=max_pixels,
)
image_path ="image.jpg"
with open(image_path, "rb") as f:
encoded_image = base64.b64encode(f.read())
decoded_image_text = encoded_image.decode('utf-8')
base64_data = f"data:image;base64,{decoded_image_text}"
messages = [
{
"role": "user",
"content": [
{
"type": "image",
"image": base64_data,
},
{
"type": "text",
"text": "Trích xuất thông tin nội dung từ hình ảnh được cung cấp."
},
],
}
]
# Prepare prompt
tokenized_text = processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
image_inputs, video_inputs = process_vision_info(messages)
inputs = processor(
text=[ tokenized_text],
images=image_inputs,
videos=video_inputs,
padding=True,
return_tensors="pt",
)
inputs = inputs.to("cuda")
# Generation configs
generation_config = model.generation_config
generation_config.do_sample = True
generation_config.temperature = 1.0
generation_config.top_k = 1
generation_config.top_p = 0.9
generation_config.min_p = 0.1
generation_config.best_of = 5
generation_config.max_new_tokens = 2048
generation_config.repetition_penalty = 1.06
# Inference
generated_ids = model.generate(**inputs, generation_config=generation_config)
generated_ids_trimmed = [
out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text[0])
参考文献 📑
[1] Qwen team. Qwen2-VL. 2024.
[2] Bai, Jinze, et al. "Qwen-VL: A Versatile Vision-Language Model for Understanding, Localization, Text Reading, and Beyond." arXiv preprint arXiv:2308.12966 (2023).
[4] Yang, An, et al. "Qwen2 technical report." arXiv preprint arXiv:2407.10671 (2024).
[5] Chen, Zhe, et al. "Internvl: Scaling up vision foundation models and aligning for generic visual-linguistic tasks." Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2024.
[6] Chen, Zhe, et al. "How far are we to gpt-4v? closing the gap to commercial multimodal models with open-source suites." arXiv preprint arXiv:2404.16821 (2024).
[7] Tran, Chi, and Huong Le Thanh. "LaVy: Vietnamese Multimodal Large Language Model." arXiv preprint arXiv:2404.07922 (2024).
联系方式 🤝
- 关于本研究的相关通信或API试用咨询,请联系Nguyễn Anh Nguyên,邮箱:nguyen@erax.ai。
- 关注我们的 EraX Github