Pull to refresh

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 "простеньких таблиц" нейросеть?

Справедливо, для чистых таблиц классический OCR/парсер дешевле. ценность была в разборе Gemma: даже на таких синтетических задачах, но вопрос честный.

Первая таблица конвертируется в 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 ГБ – и так впритык. Результат отпишу. Спасибо, что поймали до того, как я наломал дров дальше.

новая статья когда будет? :)

Будет, будет)))
К выходным думаю, в будни работа выматывает, вечером только и мысли о сне.

Sign up to leave a comment.

Articles