Asosiy qismga o'tish

VLM — Vision Language Model bilan OCR

6-bob 4 kod bloki 671 so'z

Paradigma o'zgarishi

Shu paytgacha ko'rgan hamma vosita "OCR uchun maxsus qurilgan". VLM (Vision Language Model) esa boshqa yo'l: LLM ning o'ziga ko'z qo'shilgan. Qwen2.5-VL, GPT-4o, Claude, Gemini — rasmni to'g'ridan-to'g'ri "ko'radi" va nima so'rasangiz, shuni qiladi: matnni o'qiydi, jadvalni Markdown qiladi, muhrni tasvirlaydi, kerakli maydonni ajratadi.

RAG qo'llanmasida generation uchun Ollama + Qwen ishlatganmiz. Xuddi shu stack ning vision versiyasi bilan davom etamiz — yangi infratuzilma kerak emas:

matn1 qator
ollama pull qwen2.5vl:7b

Kod: rasmdan matn

Ollama OpenAI-compatible API beradi, shuning uchun kod RAG dagi generation kodiga juda o'xshaydi — faqat message ichida rasm bor:

python25 qator
import base64
from openai import OpenAI

client = OpenAI(base_url="http://localhost:11434/v1", api_key="ollama")

with open("scanned_page.png", "rb") as f:
    image_b64 = base64.b64encode(f.read()).decode()

response = client.chat.completions.create(
    model="qwen2.5vl:7b",
    messages=[{
        "role": "user",
        "content": [
            {"type": "text",
             "text": "Rasmdagi barcha matnni o'qib ber. "
                     "Tuzilishini saqla: sarlavhalar, ro'yxatlar. "
                     "Jadvallarni Markdown formatida qaytar. "
                     "O'zingdan hech narsa qo'shma."},
            {"type": "image_url",
             "image_url": {"url": f"data:image/png;base64,{image_b64}"}},
        ],
    }],
    temperature=0,
)
print(response.choices[0].message.content)

Ikki muhim detal:

  • temperature=0 — OCR ijodkorlik emas. Model eng ishonchli variantni tanlashi kerak.
  • "O'zingdan hech narsa qo'shma" — promptda aniq taqiq. Busiz model "yordam berish" uchun izoh, tarjima, xulosa qo'shishi mumkin.

Prompt — yangi sozlash quroli

Klassik OCR da sozlash = PSM va preprocessing. VLM da sozlash = prompt. Bu juda kuchli:

python11 qator
# Faqat kerakli maydonlarni olish (forma, shartnoma)
prompt = ("Bu shartnoma. Faqat quyidagilarni JSON qilib qaytar: "
          "shartnoma_raqami, sana, tomonlar, summa. "
          "Topilmagan maydon uchun null yoz.")

# Jadvalni toza olish
prompt = "Rasmdagi jadvalni Markdown jadval qilib qaytar. Boshqa hech narsa yozma."

# Muhr va imzoni e'tiborsiz qoldirish
prompt = ("Hujjat matnini o'qi. Muhr, imzo va QR kodlarni "
          "[MUHR], [IMZO], [QR] deb belgila, tasvirlashga urinma.")

Klassik OCR bilan "shartnoma raqamini ajratish" uchun alohida regex/parsing kod yozardingiz. VLM buni o'qish paytidayoq qiladi.

Nega VLM kuchli

  • Layout ni tushunadi — ikki ustunli matnni to'g'ri tartibda o'qiydi, jadvalni Markdown qiladi (RAG chunking uchun ideal!)
  • Qo'lyozma — klassik OCR dan sezilarli yaxshi
  • Past sifatli rasm — kontekstdan foydalanib "taxmin" qiladi: "Toshk_nt sh." → "Toshkent sh."
  • Ko'p til aralash — uzb lotin + kirill + rus bitta sahifada — muammo emas
  • Post-processing kerak emas — natija allaqachon toza

Nega VLM xavfli: Hallucination

Eng muhim farqni yodda tuting:

python6 qator
Klassik OCR xatosi:              VLM xatosi:
"Shartn0ma"                       O'qiy olmagan joyga ISHONCHLI
(ko'rinib turgan xato,            ko'rinadigan matn TO'QIB yozadi:
 topish oson)                     "...summa 12 500 000 so'm..."
                                  (aslida 17 500 000 edi — 
                                   xira raqamni "taxmin" qildi)

Klassik OCR hech qachon to'qimaydi — faqat noto'g'ri o'qiydi, va confidence past bo'ladi. VLM esa til modeli: uning tabiati — "eng ehtimolli davomni" yozish. Xira joyni ko'rganda u eng ehtimolli matnni ishonch bilan yozadi va sizga hech qanday ogohlantirish bermaydi (confidence yo'q!).

Himoya choralari:

  1. temperature=0 — majburiy
  2. Promptda taqiq: "aniq o'qiy olmagan joyni [O'QIB BO'LMADI] deb belgila"
  3. Muhim raqamlar (summa, sana, raqam) uchun: ikki marta o'qitib, natijani solishtirish
  4. Yuridik/moliyaviy hujjatlarda VLM natijasini odam tekshirishi shart

Klassik OCR vs VLM

Tesseract Qwen2.5-VL
Xato turi Belgi xatosi (ko'rinadi) Hallucination (ko'rinmaydi!)
Confidence ✅ so'z darajasida ❌ yo'q
Jadval Buzib o'qiydi ✅ Markdown
Qo'lyozma ❌ ✅
Tezlik ~1 s/sahifa (CPU) ~5-15 s/sahifa (GPU)
Resurs CPU GPU (7B: ~8GB VRAM)
Narx Bepul GPU yoki API narxi
Sozlash PSM, preprocessing Prompt

Xulosa

Tushuncha Asosiy fikr
VLM = LLM + ko'z Bitta model: o'qiydi, tushunadi, formatlaydi
Bizning tanlov Qwen2.5-VL Ollama orqali — mavjud stack, offline, bepul
Prompt = sozlash Jadval, maydon ajratish, muhr — hammasi prompt bilan
Hallucination VLM ning asosiy xavfi: xatosi ko'rinmaydi. temperature=0 + taqiq prompt + odam nazorati
O'rni Qiyin sahifalar: jadval, qo'lyozma, past sifat. Oddiy matnga — isrof

Bu bobni bepul o'qidingiz.

Kitob o'rgatadi, lekin sizning kodingiz nega ishlamaganini ayta olmaydi. Kursda uy vazifangiz tekshiriladi.

Telegramda yozish Narxlar