Comments 10
"Тьмы низких истин нам дороже Вас возвышающий обман"
Немного подправленная цитата - лозунг современных "универсальных" LLM.
Поэтому использовать "это" именно для OCR простеньких таблиц просто глупо. GLM-OCR имеющая неквантованный (F16) GGUF размером 2GB, делает это лучше и быстрее. Но тоже, кстати, способна врать...
PS: А уже Gemm'у можно попросить причесать ту галиматью (иногда), которую выводит GLM в необходимый формат ( markdown или csv)
Вот за что я люблю Хабр, вот за такие комментарии, которые реально расширяют горизонт!
Справедливо, спасибо за наводку – GLM-OCR не щупал, возьму на тест. Для чистого OCR таблиц заточенная 0.9B действительно правильнее, чем 12B-универсал, тут не спорю.
Я писал статью не для того, чтобы сказать: «Gemma – лучший OCR» (она им и не является). Скорее некая карта, где у общего локального VLM ломается зрение и как это ловить. И вы сами назвали ключевое – «тоже способна врать». Вот это и есть суть. Приёмы из статьи (флаг происхождения значений, сверка числа подписей, спасение обрезанного вывода) не зависят от модели – обернут GLM-OCR ровно так же. Ценность не в выборе модели, а в недоверии к её выводу.
Спасибо за пайплайн (GLM извлекает → Gemma причёсывает в csv/markdown) – здравое разделение ролей: специалист читает, универсал форматирует. Возможно, соберу и протестирую на тех же таблицах – честное сравнение.
А «возвышающий обман» – это буквально подзаголовок статьи, так что цитата в точку. Снимаю шляпу!
А зачем вообще для OCR "простеньких таблиц" нейросеть?
Первая таблица конвертируется в JSON с ошибками
Вторая слишком сложная для такой маленькой сетки, но Qwen3.6-35B полностью конвертирует таблицу в JSON
Скрытый текст
[
{
"Категория": "Вода и чай",
"Наименование": "BonAqua",
"Вид": "без газа",
"2019_Q1_План": 9355,
"2019_Q1_Факт": 5467,
"2019_Q2_План": 4302,
"2019_Q2_Факт": 657,
"2019_Q3_План": 9892,
"2019_Q3_Факт": 6663,
"2019_Q4_План": 4802,
"2019_Q4_Факт": 9405,
"2020_Q1_План": 12199,
"2020_Q1_Факт": 4885,
"2020_Q2_План": 4767,
"2020_Q2_Факт": 341,
"2020_Q3_План": 6864,
"2020_Q3_Факт": null
},
{
"Категория": "Вода и чай",
"Наименование": "BonAqua",
"Вид": "с газом",
"2019_Q1_План": 5410,
"2019_Q1_Факт": 7326,
"2019_Q2_План": 3652,
"2019_Q2_Факт": 2824,
"2019_Q3_План": 7730,
"2019_Q3_Факт": 5125,
"2019_Q4_План": 8480,
"2019_Q4_Факт": 6168,
"2020_Q1_План": 7901,
"2020_Q1_Факт": 8026,
"2020_Q2_План": 2729,
"2020_Q2_Факт": 3703,
"2020_Q3_План": 11324,
"2020_Q3_Факт": null
},
{
"Категория": "Вода и чай",
"Наименование": "Nestea",
"Вид": "зеленый",
"2019_Q1_План": 6727,
"2019_Q1_Факт": 3557,
"2019_Q2_План": 9419,
"2019_Q2_Факт": 7154,
"2019_Q3_План": 4865,
"2019_Q3_Факт": 8354,
"2019_Q4_План": 9894,
"2019_Q4_Факт": 3630,
"2020_Q1_План": 6625,
"2020_Q1_Факт": 4867,
"2020_Q2_План": 6490,
"2020_Q2_Факт": 7137,
"2020_Q3_План": 5054,
"2020_Q3_Факт": null
},
{
"Категория": "Вода и чай",
"Наименование": "Nestea",
"Вид": "черный",
"2019_Q1_План": 4227,
"2019_Q1_Факт": 6391,
"2019_Q2_План": 9905,
"2019_Q2_Факт": 3727,
"2019_Q3_План": 6048,
"2019_Q3_Факт": 7094,
"2019_Q4_План": 1802,
"2019_Q4_Факт": 8515,
"2020_Q1_План": 3215,
"2020_Q1_Факт": 7310,
"2020_Q2_План": 6900,
"2020_Q2_Факт": 2430,
"2020_Q3_План": 8053,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Coca-Cola",
"Вид": "именная",
"2019_Q1_План": 24472,
"2019_Q1_Факт": 34804,
"2019_Q2_План": 33929,
"2019_Q2_Факт": 89941,
"2019_Q3_План": 30493,
"2019_Q3_Факт": 76823,
"2019_Q4_План": 52624,
"2019_Q4_Факт": 24603,
"2020_Q1_План": 14063,
"2020_Q1_Факт": 25760,
"2020_Q2_План": 46034,
"2020_Q2_Факт": 116866,
"2020_Q3_План": 20991,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Coca-Cola",
"Вид": "обычная",
"2019_Q1_План": 79264,
"2019_Q1_Факт": 97234,
"2019_Q2_План": 16219,
"2019_Q2_Факт": 84329,
"2019_Q3_План": 73550,
"2019_Q3_Факт": 18992,
"2019_Q4_План": 62100,
"2019_Q4_Факт": 38215,
"2020_Q1_План": 116563,
"2020_Q1_Факт": 70574,
"2020_Q2_План": 9439,
"2020_Q2_Факт": 97530,
"2020_Q3_План": 73474,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Coca-Cola",
"Вид": "ЧМ по футболу",
"2019_Q1_План": 62305,
"2019_Q1_Факт": 26480,
"2019_Q2_План": 43372,
"2019_Q2_Факт": 8192,
"2019_Q3_План": 35991,
"2019_Q3_Факт": 79566,
"2019_Q4_План": 86678,
"2019_Q4_Факт": 95586,
"2020_Q1_План": 72974,
"2020_Q1_Факт": 20648,
"2020_Q2_План": 25719,
"2020_Q2_Факт": 7475,
"2020_Q3_План": 39551,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Fanta",
"Вид": "апельсин",
"2019_Q1_План": 46885,
"2019_Q1_Факт": 52670,
"2019_Q2_План": 75007,
"2019_Q2_Факт": 32674,
"2019_Q3_План": 54392,
"2019_Q3_Факт": 98827,
"2019_Q4_План": 55508,
"2019_Q4_Факт": 59261,
"2020_Q1_План": 57747,
"2020_Q1_Факт": 46117,
"2020_Q2_План": 66955,
"2020_Q2_Факт": 46385,
"2020_Q3_План": 33583,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Fanta",
"Вид": "лимон",
"2019_Q1_План": 95360,
"2019_Q1_Факт": 38744,
"2019_Q2_План": 72305,
"2019_Q2_Факт": 24229,
"2019_Q3_План": 79387,
"2019_Q3_Факт": 74870,
"2019_Q4_План": 24303,
"2019_Q4_Факт": 12105,
"2020_Q1_План": 130435,
"2020_Q1_Факт": 27881,
"2020_Q2_План": 59939,
"2020_Q2_Факт": 19461,
"2020_Q3_План": 115060,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Fanta",
"Вид": "мандарин",
"2019_Q1_План": 9141,
"2019_Q1_Факт": 30452,
"2019_Q2_План": 48009,
"2019_Q2_Факт": 94625,
"2019_Q3_План": 25671,
"2019_Q3_Факт": 13603,
"2019_Q4_План": 25338,
"2019_Q4_Факт": 7290,
"2020_Q1_План": 6684,
"2020_Q1_Факт": 33183,
"2020_Q2_План": 66143,
"2020_Q2_Факт": 94274,
"2020_Q3_План": 26302,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Schweppes",
"Вид": "биттер лимон",
"2019_Q1_План": 3776,
"2019_Q1_Факт": 1342,
"2019_Q2_План": 9254,
"2019_Q2_Факт": 8066,
"2019_Q3_План": 867,
"2019_Q3_Факт": 4126,
"2019_Q4_План": 1239,
"2019_Q4_Факт": 3606,
"2020_Q1_План": 2200,
"2020_Q1_Факт": 1825,
"2020_Q2_План": 6801,
"2020_Q2_Факт": 5779,
"2020_Q3_План": 519,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Schweppes",
"Вид": "стандарт",
"2019_Q1_План": 2256,
"2019_Q1_Факт": 8429,
"2019_Q2_План": 5424,
"2019_Q2_Факт": 2277,
"2019_Q3_План": 5075,
"2019_Q3_Факт": 5980,
"2019_Q4_План": 7244,
"2019_Q4_Факт": 5890,
"2020_Q1_План": 3026,
"2020_Q1_Факт": 9576,
"2020_Q2_План": 5706,
"2020_Q2_Факт": 2439,
"2020_Q3_План": 5394,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Sprite",
"Вид": "лайм",
"2019_Q1_План": 78713,
"2019_Q1_Факт": 6360,
"2019_Q2_План": 16428,
"2019_Q2_Факт": 50940,
"2019_Q3_План": 22006,
"2019_Q3_Факт": 78749,
"2019_Q4_План": 17451,
"2019_Q4_Факт": 18304,
"2020_Q1_План": 81283,
"2020_Q1_Факт": 6605,
"2020_Q2_План": 18353,
"2020_Q2_Факт": 34838,
"2020_Q3_План": 27320,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Sprite",
"Вид": "лимон",
"2019_Q1_План": 33611,
"2019_Q1_Факт": 27844,
"2019_Q2_План": 43430,
"2019_Q2_Факт": 45570,
"2019_Q3_План": 61214,
"2019_Q3_Факт": 41838,
"2019_Q4_План": 36043,
"2019_Q4_Факт": 88945,
"2020_Q1_План": 36173,
"2020_Q1_Факт": 22024,
"2020_Q2_План": 30249,
"2020_Q2_Факт": 48453,
"2020_Q3_План": 84578,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Sprite",
"Вид": "стандарт",
"2019_Q1_План": 92443,
"2019_Q1_Факт": 89095,
"2019_Q2_План": 96447,
"2019_Q2_Факт": 26217,
"2019_Q3_План": 50179,
"2019_Q3_Факт": 32218,
"2019_Q4_План": 43077,
"2019_Q4_Факт": 83323,
"2020_Q1_План": 72492,
"2020_Q1_Факт": 86079,
"2020_Q2_План": 130907,
"2020_Q2_Факт": 21078,
"2020_Q3_План": 66070,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Фруктайм",
"Вид": "Буратино",
"2019_Q1_План": 2704,
"2019_Q1_Факт": 8745,
"2019_Q2_План": 9496,
"2019_Q2_Факт": 5003,
"2019_Q3_План": 2073,
"2019_Q3_Факт": 9457,
"2019_Q4_План": 3396,
"2019_Q4_Факт": 7687,
"2020_Q1_План": 3589,
"2020_Q1_Факт": 10748,
"2020_Q2_План": 9717,
"2020_Q2_Факт": 7308,
"2020_Q3_План": 1615,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Фруктайм",
"Вид": "Дюшес",
"2019_Q1_План": 3360,
"2019_Q1_Факт": 83,
"2019_Q2_План": 562,
"2019_Q2_Факт": 1554,
"2019_Q3_План": 8167,
"2019_Q3_Факт": 8936,
"2019_Q4_План": 6684,
"2019_Q4_Факт": 7655,
"2020_Q1_План": 3074,
"2020_Q1_Факт": 50,
"2020_Q2_План": 414,
"2020_Q2_Факт": 1088,
"2020_Q3_План": 11204,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Фруктайм",
"Вид": "Крем-сода",
"2019_Q1_План": 8970,
"2019_Q1_Факт": 1717,
"2019_Q2_План": 5275,
"2019_Q2_Факт": 3572,
"2019_Q3_План": 8641,
"2019_Q3_Факт": 2930,
"2019_Q4_План": 3453,
"2019_Q4_Факт": 6080,
"2020_Q1_План": 5918,
"2020_Q1_Факт": 1384,
"2020_Q2_План": 4152,
"2020_Q2_Факт": 3351,
"2020_Q3_План": 5961,
"2020_Q3_Факт": null
},
{
"Категория": "Газировка",
"Наименование": "Фруктайм",
"Вид": "Лимонад",
"2019_Q1_План": 2486,
"2019_Q1_Факт": 9784,
"2019_Q2_План": 221,
"2019_Q2_Факт": 6297,
"2019_Q3_План": 2776,
"2019_Q3_Факт": 8595,
"2019_Q4_План": 7247,
"2019_Q4_Факт": 7344,
"2020_Q1_План": 1724,
"2020_Q1_Факт": 9848,
"2020_Q2_План": 112,
"2020_Q2_Факт": 6818,
"2020_Q3_План": 2716,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Rich",
"Вид": "апельсин",
"2019_Q1_План": 76983,
"2019_Q1_Факт": 27320,
"2019_Q2_План": 56234,
"2019_Q2_Факт": 73466,
"2019_Q3_План": 78602,
"2019_Q3_Факт": 86454,
"2019_Q4_План": 11865,
"2019_Q4_Факт": 32475,
"2020_Q1_План": 80787,
"2020_Q1_Факт": 28672,
"2020_Q2_План": 71101,
"2020_Q2_Факт": 87086,
"2020_Q3_План": 73078,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Rich",
"Вид": "клубника",
"2019_Q1_План": 48860,
"2019_Q1_Факт": 58807,
"2019_Q2_План": 70417,
"2019_Q2_Факт": 54989,
"2019_Q3_План": 11813,
"2019_Q3_Факт": 3466,
"2019_Q4_План": 60875,
"2019_Q4_Факт": 35298,
"2020_Q1_План": 43791,
"2020_Q1_Факт": 40133,
"2020_Q2_План": 61568,
"2020_Q2_Факт": 37829,
"2020_Q3_План": 16006,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Rich",
"Вид": "малина",
"2019_Q1_План": 40832,
"2019_Q1_Факт": 31573,
"2019_Q2_План": 56074,
"2019_Q2_Факт": 36154,
"2019_Q3_План": 3914,
"2019_Q3_Факт": 70377,
"2019_Q4_План": 80505,
"2019_Q4_Факт": 65326,
"2020_Q1_План": 32138,
"2020_Q1_Факт": 45467,
"2020_Q2_План": 81703,
"2020_Q2_Факт": 41867,
"2020_Q3_План": 2440,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Rich",
"Вид": "мультифрукт",
"2019_Q1_План": 34002,
"2019_Q1_Факт": 52308,
"2019_Q2_План": 43135,
"2019_Q2_Факт": 77166,
"2019_Q3_План": 24288,
"2019_Q3_Факт": 29031,
"2019_Q4_План": 95217,
"2019_Q4_Факт": 99170,
"2020_Q1_План": 20712,
"2020_Q1_Факт": 32508,
"2020_Q2_План": 43241,
"2020_Q2_Факт": 71286,
"2020_Q3_План": 32250,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Rich",
"Вид": "томат",
"2019_Q1_План": 48535,
"2019_Q1_Факт": 10514,
"2019_Q2_План": 13096,
"2019_Q2_Факт": 83541,
"2019_Q3_План": 6382,
"2019_Q3_Факт": 29087,
"2019_Q4_План": 6035,
"2019_Q4_Факт": 83753,
"2020_Q1_План": 34964,
"2020_Q1_Факт": 11887,
"2020_Q2_План": 19110,
"2020_Q2_Факт": 119702,
"2020_Q3_План": 7491,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Rich",
"Вид": "яблоко",
"2019_Q1_План": 93662,
"2019_Q1_Факт": 28506,
"2019_Q2_План": 49014,
"2019_Q2_Факт": 56111,
"2019_Q3_План": 97707,
"2019_Q3_Факт": 78015,
"2019_Q4_План": 40550,
"2019_Q4_Факт": 86313,
"2020_Q1_План": 128829,
"2020_Q1_Факт": 20714,
"2020_Q2_План": 57752,
"2020_Q2_Факт": 39079,
"2020_Q3_План": 71073,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Да!",
"Вид": "апельсин",
"2019_Q1_План": 17670,
"2019_Q1_Факт": 11410,
"2019_Q2_План": 85507,
"2019_Q2_Факт": 41017,
"2019_Q3_План": 9832,
"2019_Q3_Факт": 91099,
"2019_Q4_План": 2910,
"2019_Q4_Факт": 44398,
"2020_Q1_План": 14966,
"2020_Q1_Факт": 15500,
"2020_Q2_План": 89580,
"2020_Q2_Факт": 26666,
"2020_Q3_План": 12934,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Да!",
"Вид": "клубника",
"2019_Q1_План": 57916,
"2019_Q1_Факт": 97166,
"2019_Q2_План": 58757,
"2019_Q2_Факт": 79716,
"2019_Q3_План": 68397,
"2019_Q3_Факт": 41434,
"2019_Q4_План": 23829,
"2019_Q4_Факт": 15870,
"2020_Q1_План": 37668,
"2020_Q1_Факт": 123361,
"2020_Q2_План": 70274,
"2020_Q2_Факт": 43597,
"2020_Q3_План": 77791,
"2020_Q3_Факт": null
},
{
"Категория": "",
"Наименование": "Да!",
"Вид": "мультифрукт",
"2019_Q1_План": 90816,
"2019_Q1_Факт": 6525,
"2019_Q2_План": 56508,
"2019_Q2_Факт": 58973,
"2019_Q3_План": 63094,
"2019_Q3_Факт": 9928,
"2019_Q4_План": 10582,
"2019_Q4_Факт": 28902,
"2020_Q1_План": 78316,
"2020_Q1_Факт": 8168,
"2020_Q2_План": 63207,
"2020_Q2_Факт": 63012,
"2020_Q3_План": 43826,
"2020_Q3_Факт": null
}
]
Да, большая модель справляется, но 35B это не локально-на-16-ГБ, а такое ограничение к сожалению есть.
Для gemma-4 по умолчанию дается мало токенов для головы, для llama.cpp нужны доп параметры
image-min-tokens = 560
image-max-tokens = 2240
batch-size = 4096
ubatch-size = 4096
тогда полностью конвертируются обе таблицы без ошибок, но контекст конечно надо больше, а не 8000
Это для всех Gemma4
О, вот это по-настоящему ценно, спасибо.
Похоже, ткнули прямо в корень: по умолчанию llama.cpp выдаёт Gemma мало токенов на картинку – она видит её в низком разрешении, плотные ячейки не читаются, и дальше модель дорисовывает правдоподобное. То есть «врёт» она не от вредности, а оттого, что я ей зрение задушил дефолтным конфигом. Это заметно меняет вывод статьи.
Перепрогоню обе таблицы с --image-max-tokens 2240 и поднятыми batch/ubatch (там ведь non-causal attention – ubatch должен вмещать все токены картинки, иначе падает с ассертом). Заодно проверю, влезет ли это вообще в мои 16 ГБ – и так впритык. Результат отпишу. Спасибо, что поймали до того, как я наломал дров дальше.
Локальная Gemma 4 на MacBook читает графики и таблицы — и врёт красивее, чем говорит правду