Instructions to use Klissh/layoutlmv3-cord-v2 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Klissh/layoutlmv3-cord-v2 with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("token-classification", model="Klissh/layoutlmv3-cord-v2")# Load model directly from transformers import AutoProcessor, AutoModelForTokenClassification processor = AutoProcessor.from_pretrained("Klissh/layoutlmv3-cord-v2") model = AutoModelForTokenClassification.from_pretrained("Klissh/layoutlmv3-cord-v2", device_map="auto") - Notebooks
- Google Colab
- Kaggle
layoutlmv3-cord-v2
microsoft/layoutlmv3-base yang di-fine-tune untuk token classification (BIO)
pada CORD-v2 — ekstraksi
informasi kunci dari struk belanja (nama item, qty, harga satuan, subtotal, pajak,
diskon, total, dll).
Dipakai oleh layanan Klissh/managemymoney-scan-struk untuk fitur scan struk + split per item pada aplikasi managemymoney.
Ringkas
| Arsitektur | LayoutLMv3ForTokenClassification |
| Base | microsoft/layoutlmv3-base |
| Dataset | CORD-v2 (train 800 / val 100 / test 100) |
| Jumlah label | 55 (skema BIO, termasuk O) |
| Bahasa | Inggris (dataset) + dipakai untuk struk Indonesia |
| OCR saat inferensi | EasyOCR (apply_ocr=False — bbox & teks dari luar) |
Metodologi (untuk laporan)
- Test split disisihkan total — hanya dipakai satu kali di akhir untuk angka
resmi. Validasi hanya untuk
load_best_model_at_end(metric_for_best_model="f1"). - Kosakata label dibangun dari gabungan train + validation + test.
- Deduplikasi image-hash lintas ketiga split (duplikat dibuang dari split non-train).
- Metrik entity-level BIO (precision/recall/F1 span), implementasi manual
tanpa
seqeval. learning_rate=1e-5,epochs=10,batch=2,fp16,seed=42.
Isi angka F1/precision/recall test-split di sini dari
test_results.jsonsetelah training (mis. F1 test = 0.xx).
Catatan keterbatasan
Seluruh data CORD-v2 berasal dari valid_line yang teranotasi sebagai entitas,
sehingga tidak ada contoh training murni untuk kelas O (bukan-entitas).
Pada struk nyata, teks non-entitas (footer, NPWP, nomor telepon) berpotensi
salah label. Ini keterbatasan sumber data, bukan pipeline.
Pemakaian
from transformers import LayoutLMv3ForTokenClassification, LayoutLMv3Processor
from PIL import Image
model = LayoutLMv3ForTokenClassification.from_pretrained("Klissh/layoutlmv3-cord-v2")
processor = LayoutLMv3Processor.from_pretrained("Klissh/layoutlmv3-cord-v2", apply_ocr=False)
image = Image.open("struk.jpg").convert("RGB")
words = ["Indomie", "Goreng", "3", "10.500"] # dari EasyOCR
boxes = [[70, 120, 210, 140], [215, 120, 330, 140], # dinormalisasi 0..1000
[800, 120, 830, 140], [880, 120, 960, 140]]
enc = processor(image, words, boxes=boxes, return_tensors="pt",
truncation=True, padding="max_length", max_length=512)
pred = model(**enc).logits.argmax(-1)[0].tolist()
Model dilatih di Kaggle; notebook lengkap ada di repo aplikasi
(notebooks/layoutlmv3-cord-v2-finetuning.ipynb).
- Downloads last month
- -
Model tree for Klissh/layoutlmv3-cord-v2
Base model
microsoft/layoutlmv3-base