Instructions to use jester6136/nuextract3-lora-386 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PEFT
How to use jester6136/nuextract3-lora-386 with PEFT:
from peft import PeftModel from transformers import AutoModelForCausalLM base_model = AutoModelForCausalLM.from_pretrained("numind/NuExtract3") model = PeftModel.from_pretrained(base_model, "jester6136/nuextract3-lora-386") - Transformers
How to use jester6136/nuextract3-lora-386 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="jester6136/nuextract3-lora-386") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("jester6136/nuextract3-lora-386", device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use jester6136/nuextract3-lora-386 with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "jester6136/nuextract3-lora-386" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "jester6136/nuextract3-lora-386", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/jester6136/nuextract3-lora-386
- SGLang
How to use jester6136/nuextract3-lora-386 with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "jester6136/nuextract3-lora-386" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "jester6136/nuextract3-lora-386", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "jester6136/nuextract3-lora-386" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "jester6136/nuextract3-lora-386", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Unsloth Desktop
- Docker Model Runner
How to use jester6136/nuextract3-lora-386 with Docker Model Runner:
docker model run hf.co/jester6136/nuextract3-lora-386
Install from pip and serve model
# Install vLLM from pip:
pip install vllm# Start the vLLM server:
vllm serve "jester6136/nuextract3-lora-386"# Call the server using curl (OpenAI-compatible API):
curl -X POST "http://localhost:8000/v1/chat/completions" \
-H "Content-Type: application/json" \
--data '{
"model": "jester6136/nuextract3-lora-386",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "Describe this image in one sentence."
},
{
"type": "image_url",
"image_url": {
"url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg"
}
}
]
}
]
}'Use Docker
docker model run hf.co/jester6136/nuextract3-lora-386NuExtract3 LoRA — Bản kê khai tài sản, thu nhập hằng năm (schema v14)
LoRA adapter fine-tune từ numind/NuExtract3 cho tác vụ trích
xuất thông tin từ "Bản kê khai tài sản, thu nhập hằng năm" (mẫu kê khai tài sản cán bộ, công chức Việt
Nam) — theo template schema_ban_ke_khai_v14.json đính kèm trong repo này.
⚠️ Bắt buộc: phải truyền schema_ban_ke_khai_v14.json làm template lúc inference
NuExtract3 là model schema-driven — không có template kèm theo, model không biết trích xuất theo cấu trúc
nào. Template KHÔNG BAO GIỜ được bake cứng vào adapter, phải truyền kèm mỗi lần gọi qua
chat_template_kwargs.
Dữ liệu train
- 386 hồ sơ thật (347 train / 12 eval / 27 test — tỉ lệ 90/3/7), remap từ schema cũ sang schema v14 (đã
sửa nhiều bug cấu trúc so với schema gốc: field object-đơn thay vì mảng gây mất dữ liệu, field trùng
lặp/chết, chuẩn hoá
đơn_vị_tiền_tệvề mã ISO thay vì text tự do "đồng"/"đ"/"tiền Việt Nam"...). - 3 epoch, LoRA r=16/alpha=16,
train_losscuối = 0.01524.
✅ Kết quả đánh giá (McNemar, 27 hồ sơ test, chưa từng thấy lúc train)
| Leaf-accuracy | Đúng/Tổng | |
|---|---|---|
Baseline (numind/NuExtract3 zero-shot, KHÔNG LoRA) |
69.7% | 1153/1655 |
| LoRA (adapter này) | 87.7% | 1451/1655 |
McNemar exact p-value (2 phía) = 0.0000 → cải thiện có ý nghĩa thống kê thật sự (p<0.05), ĐẠT ngưỡng deploy theo tiêu chí dự án (McNemar exact test, không chỉ so accuracy thô — accuracy thô có thể trùng hợp ngẫu nhiên trên mẫu test nhỏ, McNemar mới xác nhận chênh lệch không phải nhiễu).
Bất đối xứng: 326 trường hợp LoRA đúng trong khi baseline sai, ngược lại chỉ 28 trường hợp — LoRA thắng áp đảo, gần như không có chiều ngược lại đáng kể.
Field bịa ngoài schema (model tự thêm key không có trong template — lỗi định dạng, không tính vào accuracy trên): baseline = 212 lần, LoRA = 13 lần. LoRA cũng bám sát cấu trúc template tốt hơn hẳn.
Kết luận chính: fine-tune giúp model học được QUY ƯỚC CHUẨN HOÁ mà zero-shot không thể đoán được
Nhìn theo từng field (bảng đầy đủ bên dưới), phần lớn cải thiện lớn nhất đến từ các field
đơn_vị_tiền_tệ — hơn 15 field loại này baseline đạt đúng 0% (vì zero-shot chỉ chép lại nguyên văn
chữ trên form: "đồng", "đ", "tiền Việt Nam"...) trong khi LoRA đạt 100% (học được quy ước gán "VND"
nhất quán từ dữ liệu train đã chuẩn hoá). Đây là ví dụ rõ nhất cho việc: zero-shot không thể tự suy ra
được 1 quy ước chuẩn hoá nếu form gốc không ghi đúng như vậy — phải học từ dữ liệu gán nhãn.
Ngoài ra LoRA cải thiện mạnh ở các field địa chỉ chi tiết (nơi_thường_trú.địa_chỉ_chi_tiết +47.6 điểm %,
nguồn_gốc_hình_thành của thửa đất +45.5 điểm %) và tên người ký (+15.4 điểm %) — các field cần đọc hiểu
ngữ cảnh/viết tắt trên form thật, đúng kiểu tác vụ fine-tune giúp ích nhiều nhất.
Một số field n nhỏ (1-7 mẫu) bị giảm nhẹ — khả năng cao là nhiễu thống kê do mẫu quá nhỏ, không phải
xu hướng thật (vd nhà_ở[].nguồn_gốc_hình_thành n=7: 57.1%→14.3%). Cần theo dõi thêm khi có tập test lớn
hơn trước khi kết luận đây là quy luật.
Bảng chi tiết accuracy từng field (122 field, sắp xếp tệ→tốt theo LoRA)
| Trường | n | Baseline | LoRA | Δ |
|---|---|---|---|---|
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].quốc_gia |
16 | 0.000 | 0.000 | +0.000 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].quốc_gia |
6 | 0.000 | 0.000 | +0.000 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].hiện_trạng_quản_lý |
5 | 0.000 | 0.000 | +0.000 |
tài_sản.tài_sản_có_giá_trị_khác[].nguồn_gốc_hình_thành |
4 | 0.000 | 0.000 | +0.000 |
tài_sản.tài_sản_có_giá_trị_khác[].đơn_vị_tính |
4 | 0.250 | 0.000 | -0.250 |
tài_sản.tài_sản_có_giá_trị_khác[].ghi_chú |
4 | 0.250 | 0.000 | -0.250 |
người_kê_khai.nơi_ở_hiện_tại.phường_xã |
3 | 0.333 | 0.000 | -0.333 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_người_kê_khai.thu_nhập_lương_phụ_cấp |
2 | 0.000 | 0.000 | +0.000 |
người_kê_khai.ngạch_công_chức |
1 | 1.000 | 0.000 | -1.000 |
vợ_chồng.nơi_ở_hiện_tại.phường_xã |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].số_tiền_ngoại_tệ |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.tài_sản_có_giá_trị_khác[].hiện_trạng_quản_lý |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].tên_tổ_chức |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].đơn_vị_ngoại_tệ |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].số_tài_khoản_sổ_tiết_kiệm |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].tài_liệu_chứng_minh |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_vợ_chồng.thu_nhập_lương_phụ_cấp |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.chứng_khoán.giấy_tờ_có_giá_khác[].giá_trị |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.chứng_khoán.giấy_tờ_có_giá_khác[].đơn_vị_tiền_tệ |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.chứng_khoán.giấy_tờ_có_giá_khác[].tài_liệu_chứng_minh |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.chứng_khoán.giấy_tờ_có_giá_khác[].tên_giấy_tờ |
1 | 0.000 | 0.000 | +0.000 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].nguồn_gốc_hình_thành |
7 | 0.571 | 0.143 | -0.429 |
biến_động_tài_sản_thu_nhập.tăng_thêm[].mô_tả_tài_sản_thu_nhập |
4 | 0.500 | 0.250 | -0.250 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].ghi_chú |
4 | 0.000 | 0.250 | +0.250 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].hiện_trạng_quản_lý |
3 | 0.667 | 0.333 | -0.333 |
người_kê_khai.nơi_ở_hiện_tại.địa_chỉ_chi_tiết |
3 | 0.333 | 0.333 | +0.000 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].đơn_vị_tiền_tệ |
8 | 0.000 | 0.375 | +0.375 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].ghi_chú |
5 | 0.400 | 0.400 | +0.000 |
biến_động_tài_sản_thu_nhập.tăng_thêm[].giải_trình_nguồn_gốc |
4 | 0.500 | 0.500 | +0.000 |
con_chưa_thành_niên[].nơi_ở_hiện_tại.phường_xã |
4 | 0.500 | 0.500 | +0.000 |
tài_sản.chứng_khoán.danh_mục_chứng_khoán[].loại_chứng_khoán |
2 | 1.000 | 0.500 | -0.500 |
tài_sản.chứng_khoán.danh_mục_chứng_khoán[].đơn_vị_tiền_tệ |
2 | 0.000 | 0.500 | +0.500 |
tài_sản.chứng_khoán.danh_mục_chứng_khoán[].giá_trị |
2 | 1.000 | 0.500 | -0.500 |
tài_sản.chứng_khoán.danh_mục_chứng_khoán[].tên |
2 | 1.000 | 0.500 | -0.500 |
tài_sản.chứng_khoán.danh_mục_chứng_khoán[].số_lượng |
2 | 1.000 | 0.500 | -0.500 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_chung.tổng |
2 | 0.000 | 0.500 | +0.500 |
biến_động_tài_sản_thu_nhập.tăng_thêm[].đơn_vị_tiền_tệ |
5 | 0.000 | 0.600 | +0.600 |
biến_động_tài_sản_thu_nhập.tăng_thêm[].nhóm_tài_sản_tham_chiếu |
5 | 0.400 | 0.600 | +0.200 |
biến_động_tài_sản_thu_nhập.tăng_thêm[].giá_trị |
5 | 0.800 | 0.600 | -0.200 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].vị_trí.phường_xã |
32 | 0.594 | 0.656 | +0.062 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].ghi_chú |
6 | 0.500 | 0.667 | +0.167 |
người_kê_khai.nơi_ở_hiện_tại.tỉnh_thành_phố |
3 | 1.000 | 0.667 | -0.333 |
con_chưa_thành_niên[].nơi_ở_hiện_tại.địa_chỉ_chi_tiết |
3 | 0.667 | 0.667 | +0.000 |
tài_sản.tài_sản_có_giá_trị_khác[].số_lượng |
3 | 0.667 | 0.667 | +0.000 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].số_giấy_chứng_nhận_sở_hữu |
19 | 0.632 | 0.684 | +0.053 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].vị_trí.phường_xã |
21 | 0.667 | 0.714 | +0.048 |
con_chưa_thành_niên[].nơi_ở_hiện_tại.tỉnh_thành_phố |
4 | 0.750 | 0.750 | +0.000 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].số_giấy_chứng_nhận_quyền_sử_dụng_đất |
32 | 0.719 | 0.781 | +0.062 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].vị_trí.địa_chỉ_chi_tiết |
21 | 0.524 | 0.810 | +0.286 |
người_kê_khai.nơi_thường_trú.địa_chỉ_chi_tiết |
21 | 0.333 | 0.810 | +0.476 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].nguồn_gốc_hình_thành |
11 | 0.364 | 0.818 | +0.455 |
con_chưa_thành_niên[].nơi_thường_trú.địa_chỉ_chi_tiết |
24 | 0.458 | 0.833 | +0.375 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].vị_trí.địa_chỉ_chi_tiết |
32 | 0.531 | 0.844 | +0.312 |
người_kê_khai.nơi_thường_trú.phường_xã |
21 | 0.762 | 0.857 | +0.095 |
người_kê_khai.ngày_sinh |
22 | 0.864 | 0.864 | +0.000 |
người_kê_khai.nơi_làm_việc |
22 | 0.818 | 0.864 | +0.045 |
con_chưa_thành_niên[].nơi_thường_trú.phường_xã |
24 | 0.750 | 0.875 | +0.125 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].loại_tiền_gửi |
8 | 0.000 | 0.875 | +0.875 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_gửi[].số_dư_tại_thời_điểm_kê_khai |
8 | 0.875 | 0.875 | +0.000 |
con_chưa_thành_niên[].giấy_tờ_tùy_thân.nơi_cấp |
8 | 0.875 | 0.875 | +0.000 |
con_chưa_thành_niên[].giấy_tờ_tùy_thân.ngày_cấp |
8 | 0.875 | 0.875 | +0.000 |
vợ_chồng.nơi_thường_trú.phường_xã |
17 | 0.765 | 0.882 | +0.118 |
vợ_chồng.nơi_làm_việc |
17 | 0.824 | 0.882 | +0.059 |
vợ_chồng.nơi_thường_trú.địa_chỉ_chi_tiết |
17 | 0.353 | 0.882 | +0.529 |
vợ_chồng.giấy_tờ_tùy_thân.nơi_cấp |
19 | 0.842 | 0.895 | +0.053 |
chữ_ký[].tên_người_ký |
39 | 0.744 | 0.897 | +0.154 |
vợ_chồng.họ_và_tên |
20 | 0.900 | 0.900 | +0.000 |
người_kê_khai.giấy_tờ_tùy_thân.nơi_cấp |
22 | 0.864 | 0.909 | +0.045 |
con_chưa_thành_niên[].giấy_tờ_tùy_thân.số_giấy_tờ_tùy_thân |
11 | 0.818 | 0.909 | +0.091 |
tài_sản.tài_sản_có_giá_trị_khác[].tên_tài_sản |
24 | 0.833 | 0.917 | +0.083 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].số_thứ_tự_thửa_đất |
32 | 0.938 | 0.938 | +0.000 |
vợ_chồng.nơi_thường_trú.tỉnh_thành_phố |
18 | 0.944 | 0.944 | +0.000 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_vợ_chồng.tổng |
19 | 0.895 | 0.947 | +0.053 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.tổng_cộng.tổng |
21 | 0.905 | 0.952 | +0.048 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].loại_nhà_ở |
21 | 1.000 | 0.952 | -0.048 |
người_kê_khai.nơi_thường_trú.tỉnh_thành_phố |
21 | 1.000 | 0.952 | -0.048 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_người_kê_khai.tổng |
22 | 0.909 | 0.955 | +0.045 |
thông_tin_văn_bản.ngày_kê_khai |
22 | 0.955 | 0.955 | +0.000 |
thông_tin_văn_bản.hình_thức_kê_khai |
22 | 0.955 | 0.955 | +0.000 |
người_kê_khai.họ_và_tên |
22 | 0.955 | 0.955 | +0.000 |
người_kê_khai.chức_vụ |
22 | 0.909 | 0.955 | +0.045 |
tài_sản.tài_sản_có_giá_trị_khác[].số_đăng_ký |
22 | 0.818 | 0.955 | +0.136 |
tài_sản.tài_sản_có_giá_trị_khác[].nhóm_tài_sản |
25 | 0.800 | 0.960 | +0.160 |
tài_sản.tài_sản_có_giá_trị_khác[].đơn_vị_tiền_tệ |
25 | 0.000 | 0.960 | +0.960 |
tài_sản.tài_sản_có_giá_trị_khác[].giá_trị |
25 | 0.800 | 0.960 | +0.160 |
con_chưa_thành_niên[].họ_và_tên |
26 | 0.962 | 0.962 | +0.000 |
chữ_ký[].vai_trò_người_ký |
39 | 1.000 | 1.000 | +0.000 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].loại_đất |
32 | 0.969 | 1.000 | +0.031 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].vị_trí.tỉnh_thành_phố |
32 | 0.938 | 1.000 | +0.062 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].đơn_vị_tiền_tệ |
32 | 0.000 | 1.000 | +1.000 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].diện_tích_m2 |
32 | 1.000 | 1.000 | +0.000 |
con_chưa_thành_niên[].ngày_sinh |
26 | 1.000 | 1.000 | +0.000 |
con_chưa_thành_niên[].số_thứ_tự_con |
26 | 0.962 | 1.000 | +0.038 |
con_chưa_thành_niên[].nơi_thường_trú.tỉnh_thành_phố |
24 | 1.000 | 1.000 | +0.000 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.tổng_cộng.đơn_vị_tiền_tệ |
22 | 0.000 | 1.000 | +1.000 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_con_chưa_thành_niên.đơn_vị_tiền_tệ |
22 | 0.000 | 1.000 | +1.000 |
người_kê_khai.giấy_tờ_tùy_thân.số_giấy_tờ_tùy_thân |
22 | 1.000 | 1.000 | +0.000 |
người_kê_khai.giấy_tờ_tùy_thân.ngày_cấp |
22 | 1.000 | 1.000 | +0.000 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_vợ_chồng.đơn_vị_tiền_tệ |
22 | 0.000 | 1.000 | +1.000 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_chung.đơn_vị_tiền_tệ |
22 | 0.000 | 1.000 | +1.000 |
tài_sản.thu_nhập_giữa_hai_lần_kê_khai.thu_nhập_người_kê_khai.đơn_vị_tiền_tệ |
22 | 0.000 | 1.000 | +1.000 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].diện_tích_sử_dụng_m2 |
21 | 1.000 | 1.000 | +0.000 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].số_thứ_tự_nhà |
21 | 1.000 | 1.000 | +0.000 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].đơn_vị_tiền_tệ |
21 | 0.000 | 1.000 | +1.000 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].vị_trí.tỉnh_thành_phố |
21 | 1.000 | 1.000 | +0.000 |
tài_sản.quyền_sử_dụng_đất.các_thửa_đất[].giá_trị |
21 | 0.952 | 1.000 | +0.048 |
vợ_chồng.nghề_nghiệp_chức_vụ |
20 | 0.950 | 1.000 | +0.050 |
vợ_chồng.ngày_sinh |
20 | 1.000 | 1.000 | +0.000 |
vợ_chồng.giấy_tờ_tùy_thân.ngày_cấp |
19 | 1.000 | 1.000 | +0.000 |
vợ_chồng.giấy_tờ_tùy_thân.số_giấy_tờ_tùy_thân |
19 | 1.000 | 1.000 | +0.000 |
tài_sản.nhà_ở_và_công_trình.nhà_ở[].giá_trị |
11 | 0.909 | 1.000 | +0.091 |
tài_sản.tiền_mặt_và_tiền_gửi.đơn_vị_tiền_tệ |
7 | 0.000 | 1.000 | +1.000 |
tài_sản.tiền_mặt_và_tiền_gửi.tổng_số_tiền |
7 | 0.571 | 1.000 | +0.429 |
tài_sản.tài_sản_gắn_liền_với_đất.cây_lâu_năm[].đơn_vị_tiền_tệ |
2 | 0.000 | 1.000 | +1.000 |
tài_sản.tài_sản_gắn_liền_với_đất.cây_lâu_năm[].số_lượng |
2 | 1.000 | 1.000 | +0.000 |
tài_sản.tài_sản_gắn_liền_với_đất.cây_lâu_năm[].loại_cây |
2 | 1.000 | 1.000 | +0.000 |
tài_sản.tài_sản_gắn_liền_với_đất.cây_lâu_năm[].giá_trị |
2 | 1.000 | 1.000 | +0.000 |
biến_động_tài_sản_thu_nhập.giảm_đi[].mô_tả_tài_sản_thu_nhập |
1 | 1.000 | 1.000 | +0.000 |
biến_động_tài_sản_thu_nhập.giảm_đi[].giá_trị |
1 | 1.000 | 1.000 | +0.000 |
biến_động_tài_sản_thu_nhập.giảm_đi[].lý_do_giảm |
1 | 1.000 | 1.000 | +0.000 |
biến_động_tài_sản_thu_nhập.giảm_đi[].đơn_vị_tiền_tệ |
1 | 0.000 | 1.000 | +1.000 |
biến_động_tài_sản_thu_nhập.giảm_đi[].nhóm_tài_sản_tham_chiếu |
1 | 1.000 | 1.000 | +0.000 |
vợ_chồng.nơi_ở_hiện_tại.địa_chỉ_chi_tiết |
1 | 1.000 | 1.000 | +0.000 |
vợ_chồng.nơi_ở_hiện_tại.tỉnh_thành_phố |
1 | 1.000 | 1.000 | +0.000 |
tài_sản.tài_khoản_ở_nước_ngoài[].quốc_gia |
1 | 1.000 | 1.000 | +0.000 |
tài_sản.tiền_mặt_và_tiền_gửi.tiền_mặt_tại_nhà[].số_tiền |
1 | 1.000 | 1.000 | +0.000 |
tài_sản.tài_khoản_ở_nước_ngoài[].tên_chủ_tài_khoản |
1 | 1.000 | 1.000 | +0.000 |
tài_sản.tài_khoản_ở_nước_ngoài[].tên_ngân_hàng_tổ_chức |
1 | 1.000 | 1.000 | +0.000 |
tài_sản.tài_khoản_ở_nước_ngoài[].số_tài_khoản |
1 | 1.000 | 1.000 | +0.000 |
Cả 2 model gọi qua cùng 1 request format, cùng template schema_ban_ke_khai_v14.json, temperature=0
— baseline dùng numind/NuExtract3 gốc, LoRA dùng adapter này. So bằng McNemar exact test (paired, per
leaf-field) theo đúng chuẩn dự án gốc — không chỉ so accuracy thô (dễ gây hiểu nhầm với mẫu test nhỏ).
Cách dùng (qua vLLM, đúng format production)
vllm serve numind/NuExtract3 \
--enable-lora --lora-modules nuextract-lora=<đường dẫn tải adapter về> \
--max-lora-rank 16 --trust-remote-code --dtype bfloat16
import json
import openai
template = json.load(open("schema_ban_ke_khai_v14.json", encoding="utf-8")) # tải kèm trong repo này
client = openai.OpenAI(base_url="http://localhost:8000/v1", api_key="none")
content = [{"type": "image_url", "image_url": {"url": f"data:image/png;base64,{b64}"}}
for b64 in images_b64] # ảnh trang tài liệu, base64
resp = client.chat.completions.create(
model="nuextract-lora",
messages=[{"role": "user", "content": content}],
extra_body={"chat_template_kwargs": {"template": json.dumps(template, ensure_ascii=False),
"enable_thinking": False}},
temperature=0.0,
max_tokens=4096,
)
result = json.loads(resp.choices[0].message.content)
- Downloads last month
- -
# Gated model: Login with a HF token with gated access permission hf auth login