--- license: apache-2.0 language: ru tags: - vision-language - document-ai - table-extraction - russian - qlora base_model: - ibm-granite/granite-vision-3.3-2b --- # 🪨 Granite-Vision 3.3-2B-1.1 — **RU small Table Extractor** by NIKTA AI Была обучена на небольшом синтетическом датасете для тестирования на pdf таблицах печатного шрифта для сравнения с Qwen-2.5-VL-3b, Granite-Vision-3.3-2B(оригинал). Полный чекпойнт (IBM Granite-Vision 3.3-2B + QLoRA-файнтюн) для **извлечения таблиц на русском языке** из изображений экстракшн таблиц. ✅ Отвечает строго в формате валидного JSON: ```json {"columns": [...], "rows": [[...], [...]]} ``` --- ## 📊 Бенчмарк (примерные результаты и разница между моделями) | Таблица | IBM Granite (base) | Granite-RU (этот репозиторий) | Ошибки | |---------------|---------------------------------|-------------------------------|--------| | `table_1.png` | ✅ | ✅ | — | | `table_2.png` | ✅ | ⚠ | `Блохин` → `Бложин`
`Павловна` → `Гавловна` | | `table_3.png` | ✅ | ✅ | — | | `table_4.png` | ⚠ `rows` без вложенности (неверно) | ✅ `rows` вложенный формат | — | | `table_5.png` | ✅ | ✅ | — | **Вывод:** `Granite-RU` обходит оригинальный `ibm-granite-3.3-2b` и Qwen 2.5 VL 3b в точности, особенно в структурной корректности: `rows` всегда двухмерный список (`[[...], [...]]`), что упрощает последующую обработку. Ошибки сведены к минимуму. --- ## 🚀 Быстрый старт ```python from transformers import AutoModelForVision2Seq, AutoProcessor from PIL import Image import json, torch model_id = "fron1runner/granite-ru" model = (AutoModelForVision2Seq .from_pretrained(model_id, _attn_implementation="sdpa") .half().cuda()) proc = AutoProcessor.from_pretrained(model_id) img = Image.open("sample.png").convert("RGB") prompt = proc.apply_chat_template([ { "role": "system", "content": [{"type": "text", "text": "Отвечай только валидным JSON {\"columns\":[],\"rows\":[[]]}."}] }, { "role": "user", "content": [ {"type": "image", "image": img}, {"type": "text", "text": "Извлеки таблицу полностью и верни только JSON."} ] } ], add_generation_prompt=True) batch = proc(text=prompt, images=[[img]], return_tensors="pt").to("cuda") out = model.generate(**batch, max_new_tokens=384, temperature=0.1) print(json.loads(proc.decode(out[0], skip_special_tokens=True))) ``` --- ## 🧠 Подходит для - Систем документооборота - OCR-интеграций с AI - RAG-систем - Финансовых, юридических, административных таблиц - Препроцессинга для LLM - Средних и малых таблиц --- **🧪 Model by `fron1runner` NIKTA AI company** На базе `ibm-granite/granite-vision-3.3-2b` с лёгким QLoRA дообучением на синтетике. Автор: Компания NIKTA AI, Виктор Колесников