fron1runner commited on
Commit
dfb653b
·
verified ·
1 Parent(s): f9dc105

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +58 -21
README.md CHANGED
@@ -1,31 +1,43 @@
1
  ---
2
  license: other
3
  language: ru
4
- tags: [vision-language, document-ai, table-extraction, russian, qlora]
5
- base_model: [ibm-granite/granite-vision-3.3-2b]
 
 
 
 
 
 
6
  ---
7
 
8
- # Granite-Vision 3.3-2B-1.1 — RU
9
 
10
- Дообученный на синтетике QLoRA для извлечения **русскоязычных таблиц** малого/среднего размера, с стандартным печатным шрифтом, хорошо распознает структуры
11
- Отвечает **валидным JSON** вида `{"columns": [...], "rows": [[...], ...]}`.
12
 
13
- Специальная модель для OCR-распознавания таблиц
 
 
 
14
 
15
  ---
16
 
17
- ## Бенчмарк (одна реальная таблица)
18
 
19
- | Модель | JSON валиден | Структура распознана | Корректные типы (из 6) |
20
- |---------------------------|:------------:|:--------------------:|:----------------------:|
21
- | **fron1runner / Granite-RU** | | полностью | **4 / 6** |
22
- | IBM Granite-3.3-2B (base) | | частично | 3 / 6 |
23
- | Qwen-2.5-VL-3B | | | 0 / 6 |
 
 
24
 
 
 
25
 
26
  ---
27
 
28
- ## Быстрый старт
29
 
30
  ```python
31
  from transformers import AutoModelForVision2Seq, AutoProcessor
@@ -37,19 +49,44 @@ model_id = "fron1runner/granite-ru"
37
  model = (AutoModelForVision2Seq
38
  .from_pretrained(model_id, _attn_implementation="sdpa")
39
  .half().cuda())
40
- proc = AutoProcessor.from_pretrained(model_id)
 
41
 
42
  img = Image.open("sample.png").convert("RGB")
43
 
44
  prompt = proc.apply_chat_template([
45
- {"role":"system","content":[{"type":"text","text":
46
- "Отвечай только валидным JSON {\"columns\":[],\"rows\":[[]]}."}]},
47
- {"role":"user","content":[
48
- {"type":"image","image":img},
49
- {"type":"text","text":"Извлеки таблицу полностью и верни только JSON."}
50
- ]}
 
 
 
 
 
51
  ], add_generation_prompt=True)
52
 
53
  batch = proc(text=prompt, images=[[img]], return_tensors="pt").to("cuda")
54
- out = model.generate(**batch, max_new_tokens=384, temperature=0.1)
 
 
55
  print(json.loads(proc.decode(out[0], skip_special_tokens=True)))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
  license: other
3
  language: ru
4
+ tags:
5
+ - vision-language
6
+ - document-ai
7
+ - table-extraction
8
+ - russian
9
+ - qlora
10
+ base_model:
11
+ - ibm-granite/granite-vision-3.3-2b
12
  ---
13
 
14
+ # 🪨 Granite-Vision 3.3-2B-1.1 — **RU small Table Extractor** by NIKTA AI
15
 
16
+ Полный чекпойнт (IBM Granite-Vision 3.3-2B + QLoRA-файнтюн) для **извлечения таблиц на русском языке** из изображений экстракшн таблиц
 
17
 
18
+ Отвечает строго в формате валидного JSON:
19
+ ```json
20
+ {"columns": [...], "rows": [[...], [...]]}
21
+ ```
22
 
23
  ---
24
 
25
+ ## 📊 Бенчмарк (5 реальных таблиц)
26
 
27
+ | Таблица | IBM Granite (base) | Granite-RU (этот репозиторий) | Ошибки |
28
+ |---------------|---------------------------------|-------------------------------|--------|
29
+ | `table_1.png` | | | |
30
+ | `table_2.png` | | | `Блохин` `Бложин`<br>`Павловна` → `Гавловна` |
31
+ | `table_3.png` | | | |
32
+ | `table_4.png` | ⚠ `rows` без вложенности (неверно) | ✅ `rows` вложенный формат | — |
33
+ | `table_5.png` | ✅ | ✅ | — |
34
 
35
+ **Вывод:**
36
+ `Granite-RU` обходит оригинальный `ibm-granite-3.3-2b` и Qwen 2.5 VL 3b в точности, особенно в структурной корректности: `rows` всегда двухмерный список (`[[...], [...]]`), что упрощает последующую обработку. Ошибки сведены к минимуму.
37
 
38
  ---
39
 
40
+ ## 🚀 Быстрый старт
41
 
42
  ```python
43
  from transformers import AutoModelForVision2Seq, AutoProcessor
 
49
  model = (AutoModelForVision2Seq
50
  .from_pretrained(model_id, _attn_implementation="sdpa")
51
  .half().cuda())
52
+
53
+ proc = AutoProcessor.from_pretrained(model_id)
54
 
55
  img = Image.open("sample.png").convert("RGB")
56
 
57
  prompt = proc.apply_chat_template([
58
+ {
59
+ "role": "system",
60
+ "content": [{"type": "text", "text": "Отвечай только валидным JSON {\"columns\":[],\"rows\":[[]]}."}]
61
+ },
62
+ {
63
+ "role": "user",
64
+ "content": [
65
+ {"type": "image", "image": img},
66
+ {"type": "text", "text": "Извлеки таблицу полностью и верни только JSON."}
67
+ ]
68
+ }
69
  ], add_generation_prompt=True)
70
 
71
  batch = proc(text=prompt, images=[[img]], return_tensors="pt").to("cuda")
72
+
73
+ out = model.generate(**batch, max_new_tokens=384, temperature=0.1)
74
+
75
  print(json.loads(proc.decode(out[0], skip_special_tokens=True)))
76
+ ```
77
+
78
+ ---
79
+
80
+ ## 🧠 Подходит для
81
+
82
+ - Систем документооборота
83
+ - OCR-интеграций с AI
84
+ - RAG-систем
85
+ - Финансовых, юридических, административных таблиц
86
+ - Препроцессинга для LLM
87
+ - Средних и малых таблиц
88
+
89
+ ---
90
+
91
+ **🧪 Model by `fron1runner` NIKTA AI company**
92
+ На базе `ibm-granite/granite-vision-3.3-2b` с лёгким QLoRA дообучением на синтетике.