VLM — Vision Language Model bilan OCR
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:
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:
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:
# 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:
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:
temperature=0— majburiy- Promptda taqiq: "aniq o'qiy olmagan joyni [O'QIB BO'LMADI] deb belgila"
- Muhim raqamlar (summa, sana, raqam) uchun: ikki marta o'qitib, natijani solishtirish
- 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.