Views
No views yet
{"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 всегда двухмерный список ([[...], [...]]), что упрощает последующую обработку. Ошибки сведены к минимуму.1from transformers import AutoModelForVision2Seq, AutoProcessor
2from PIL import Image
3import json, torch
4
5model_id = "fron1runner/granite-ru"
6
7model = (AutoModelForVision2Seq
8 .from_pretrained(model_id, _attn_implementation="sdpa")
9 .half().cuda())
10
11proc = AutoProcessor.from_pretrained(model_id)
12
13img = Image.open("sample.png").convert("RGB")
14
15prompt = proc.apply_chat_template([
16 {
17 "role": "system",
18 "content": [{"type": "text", "text": "Отвечай только валидным JSON {\"columns\":[],\"rows\":[[]]}."}]
19 },
20 {
21 "role": "user",
22 "content": [
23 {"type": "image", "image": img},
24 {"type": "text", "text": "Извлеки таблицу полностью и верни только JSON."}
25 ]
26 }
27], add_generation_prompt=True)
28
29batch = proc(text=prompt, images=[[img]], return_tensors="pt").to("cuda")
30
31out = model.generate(**batch, max_new_tokens=384, temperature=0.1)
32
33print(json.loads(proc.decode(out[0], skip_special_tokens=True)))fron1runner NIKTA AI companyibm-granite/granite-vision-3.3-2b с лёгким QLoRA дообучением на синтетике.