Asosiy qismga o'tish

Sifatni O'lchash — CER va WER

9-bob 4 kod bloki 690 so'z

"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:

python6 qator
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:

python7 qator
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:

  1. Hujjatlar to'plamingizdan 10-20 sahifa tanlang — har xil turdagi: toza skan, eski hujjat, jadvalli, telefon surati
  2. Har birini qo'lda to'g'ri terib chiqing (yoki eng zo'r OCR natijasini qo'lda tuzatib)
  3. 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:

python19 qator
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:

yaml3 qator
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.

Telegramda yozish Narxlar