Sifatni O'lchash — CER va WER
"Yaxshi ishlayapti" yetarli emas
RAG qo'llanmasi 10-bobida RAGAS bilan tanishganmiz: tizim sifatini his-tuyg'u bilan emas, raqam bilan o'lchash. OCR uchun ham xuddi shu intizom kerak. "Ko'z bilan qaraganda yaxshi" — 5 sahifada ishlaydi; 5000 sahifada esa sizga metrika kerak.
Ikki standart metrika: CER va WER.
CER — Character Error Rate
To'g'ri matnga yetish uchun nechta belgi amali kerak:
CER = (S + D + I) / N S — almashtirish (substitution): "Shartn0ma" — 0 ni o ga D — o'chirish (deletion): "Shrtnoma" — a tushib qolgan I — qo'shish (insertion): "Shaartnoma" — ortiqcha a N — to'g'ri matndagi belgilar soni
Bu Levenshtein masofasining o'zi — normalizatsiya qilingan ko'rinishda.
WER — Word Error Rate
Xuddi shu formula, lekin so'z darajasida. Va bu yerda muhim effekt bor:
from jiwer import cer, wer # pip install jiwer ground_truth = "Shartnoma 2024-yil 15-yanvarda imzolandi." ocr_output = "Shartn0ma 2024-yil 15-yanvarda imzo1andi." print(f"CER: {cer(ground_truth, ocr_output):.3f}") # 0.049 — 4.9% belgi xato print(f"WER: {wer(ground_truth, ocr_output):.3f}") # 0.500 — 4 so'zdan 2 tasi xato
Ikki belgi xatosi — 50% WER. Bitta noto'g'ri belgi butun so'zni "buzadi".
RAG uchun qaysi biri muhim? WER. Chunki qidiruv so'z va embedding darajasida ishlaydi: foydalanuvchi "shartnoma" deb qidiradi, bazada "shartn0ma" yotibdi — keyword search topolmaydi, embedding ham uzoqlashadi. CER past ko'rinsa ham, WER yuqori bo'lsa — retrieval azoblanadi.
Ground truth yasash
Metrika uchun "to'g'ri javob" kerak. RAGAS evaluation set kabi — qo'lda, bir marta, sifatli:
- Hujjatlar to'plamingizdan 10-20 sahifa tanlang — har xil turdagi: toza skan, eski hujjat, jadvalli, telefon surati
- Har birini qo'lda to'g'ri terib chiqing (yoki eng zo'r OCR natijasini qo'lda tuzatib)
ground_truth/papkaga saqlang:page_001.png+page_001.txt
Bu 2-3 soatlik ish — lekin undan keyin har qanday o'zgarishni (yangi preprocessing, boshqa model, yangi PSM) bir buyruq bilan baholaysiz:
from pathlib import Path from jiwer import cer, wer import pytesseract from PIL import Image def evaluate(ocr_func, gt_dir="ground_truth"): cers, wers = [], [] for txt_file in sorted(Path(gt_dir).glob("*.txt")): truth = txt_file.read_text(encoding="utf-8") image = Image.open(txt_file.with_suffix(".png")) pred = ocr_func(image) cers.append(cer(truth, pred)) wers.append(wer(truth, pred)) print(f"O'rtacha CER: {sum(cers)/len(cers):.3f}") print(f"O'rtacha WER: {sum(wers)/len(wers):.3f}") # Ikki variantni solishtirish: evaluate(lambda img: pytesseract.image_to_string(img, lang="rus+uzb")) evaluate(lambda img: pytesseract.image_to_string(preprocess(img), lang="rus+uzb"))
Endi "preprocessing foyda berdimi?" degan savolga javob — taxmin emas, raqam.
Chegaralar: qaysi CER "yaxshi"?
| CER | Sifat | RAG uchun qaror |
|---|---|---|
| < 1% | A'lo | Bemalol ishlatiladi |
| 1-5% | Yaxshi | Ishlatiladi, tozalash bilan |
| 5-15% | O'rtacha | Preprocessing ni kuchaytiring yoki VLM sinang |
| > 15% | Yomon | Qayta skanerlash yoki manual review |
Muhim ogohlantirish: bu o'rtacha ko'rsatkichlar. O'rtacha CER 3% bo'lsa-yu, lekin aynan summalar va sanalar xato bo'lsa — hujjat yaroqsiz. Shuning uchun muhim maydonli hujjatlarda (shartnoma, hisob-faktura) alohida tekshiruv: raqamli maydonlarni regex bilan ajratib, ularning aniqligini alohida o'lchang.
VLM ni qanday baholash?
VLM confidence bermaydi — lekin CER/WER uni ham o'lchaydi, chunki bizda ground truth bor. Gibrid tizimni baholashda uchta raqamni alohida ko'ring:
Tesseract-only: CER 4.1% (tez, arzon) VLM-only: CER 1.8% (sekin, qimmat) Gibrid (conf<60->VLM): CER 2.2% (tez VA sifatli — bizning tanlov)
Xulosa
| Tushuncha | Asosiy fikr |
|---|---|
| CER | Belgi darajasidagi xato — texnik sifat ko'rsatkichi |
| WER | So'z darajasida — RAG uchun asosiysi (qidiruv so'z bilan ishlaydi) |
| Ground truth | 10-20 sahifa, qo'lda, bir marta — keyin har o'zgarish o'lchanadi |
| Chegara | CER < 5% — ishlatsa bo'ladi; > 15% — qayta skanerlang |
| Muhim maydonlar | O'rtacha yaxshi bo'lsa ham summa/sana xato bo'lishi mumkin — alohida tekshiring |
Bu bobni bepul o'qidingiz.
Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.