Зачем мы дообучили свою LLM для гос-документов
Если коротко
- GPT-4 умеет говорить умно. От системы извлечения данных требуется валидный JSON.
- 40 МБ адаптера дороже, чем кажется: они меняют поведение, а не словарь.
- JSON-валидность 0 → 100%. Char similarity ×3,7. Цена вопроса — один RTX 4060.
Editorial illustration: an oversized humanoid figure in a tailored suit squinting at a formal contract on a desk, slightly confused. Beside it, a small neat clipboard labeled "LoRA" points to specific fields on the page: amount, date, counterparty. Calm indigo and ivory palette, soft shadows, no logos, no readable text, 16:9, 1600x900, editorial style.
«У вас же есть GPT-4 — зачем своя модель?»
Этот вопрос задают чаще, чем спрашивают, как меня зовут.
Если коротко: GPT-4 — это блестящий консультант, которого вчера прислали из Сан-Франциско. Английский безупречный, мнение по любому вопросу готово. А ему на стол кладут договор поставки с печатью, узбекским текстом сверху, русскими цифрами в теле и подписью на латинице. И просят — строго в JSON — сумму, дату, контрагента.
Догадываетесь, чем это кончается.
Договор с печатью — это не твит
Foundation-модели обучены на интернете. Интернет на 60% — это английский разговор о котиках, политике и стартапах. Договор поставки не похож ни на одно из трёх.
В нём нет харизмы автора, нет вопроса в конце, нет места для импровизации. Зато есть жёсткая шапка, три обязательных поля, «сумма прописью» — и всё это часто на трёх языках вперемешку, потому что так удобнее автору.
Модель, которая такого в обучении не видела, ведёт себя как турист: вежливо переспрашивает, вставляет английское слово, путает порядок дат. Не катастрофа — но и не то, что хочется ставить на финансовую операцию.
Когда форма важнее красноречия
Из контракта нужно вытащить три поля и положить их в {"amount": ..., "date": ..., "counterparty": ...}. Без преамбулы, без markdown-блока, без «вот, я подумал и сделал вывод».
Базовая Qwen2.5-7B на нашем эвал-сете выдаёт валидный JSON в 0 случаях из 6. Не потому что «глупая» — она просто не привыкла. У неё нет дисциплины формата, и каждый раз она норовит дописать пояснение.
После 95 размеченных примеров и трёх эпох — 6 из 6. Тот же мозг, та же квантизация, новые манеры.
Вот что на самом деле делает fine-tuning на маленьких датасетах: не добавляет интеллекта, а ставит поведение. Этим он и оправдан.
Узбекский сверху, русский снизу, английский в подписи
В одной реальной бумаге подряд встречается: «Shartnoma 2026-yil 14-martda tuzildi», на следующей строке — «Сумма договора: 1 200 000 сум», в графе подписанта — Acme Logistics LLC.
Foundation-модели на таком тексте дрейфуют. Иногда отвечают на английском — модель решает, что это «универсальный». Иногда смешивают языки внутри одного ответа. Иногда — самое неприятное — переводят туда, куда не просили.
Лечится одним способом: показать модели сотни примеров, где вход и ожидаемый выход на одном языке. Узбекский — отвечаем на узбекском. Русский — на русском. Правило простое, но без обучения оно не работает.
Дата-центр в Дублине — странное место для вашей сделки
Каждый вызов GPT-4 — это HTTP-запрос в чужую страну. Документ с подписью и печатью улетает через чужой биллинг, чужие логи, чужой compliance.
С момента, когда об этом задумаются юристы, разговор заканчивается ещё до того, как начался.
QLoRA-адаптер на Qwen2.5 эту проблему отменяет: модель крутится на собственном GPU-сервере, документ не выходит за периметр, аудит-лог пишется в свою же PostgreSQL. И никто не присылает счёт первого числа.
Я отдельно разбирал расклад в «Когда стоит держать LLM у себя». Дообучение усиливает аргумент: своя обученная модель — уже не инфраструктура, а актив.
Экономика на счётчике
API — это такси со счётчиком. Едет хорошо, пока вы не начали кататься каждый день.
10 000 документов в месяц на GPT-4 — это $300–500 на токенах. Миллион — уже $30–50k. Счётчик не останавливается, даже когда вы спите.
Своя модель — это один раз заплатить за GPU и потом обрабатывать любой объём по цене электричества. Один RTX 4060 за $300 тянет обучение. Один T4 в облаке держит продакшен-инференс. Дообучение здесь не самоцель — а способ заставить маленькую модель выдавать качество, за которое раньше платили большой.
Что показали цифры
Эвал на 19 удержанных примерах, жадная декодировка. База — Qwen2.5-7B в 4-битной квантизации. Кандидат — она же плюс наш QLoRA-адаптер.
| Метрика | База 7B 4-bit | + QLoRA |
|---|---|---|
| JSON-валидность | 0 / 6 | 6 / 6 |
| Exact match | 0% | 26,3% |
| Char similarity | 0,166 | 0,610 |
Адаптер весит 40 МБ. Базовая модель не меняется — её можно скачать один раз и навесить на неё десяток разных адаптеров под разные задачи. Это и есть PEFT: учим дельту, а не всю модель.
Чего адаптер не делает
95 примеров — это демонстрация техники, а не продакшен. Чтобы все 15 семейств задач шли уверенно, нужно 200–500 примеров на семейство, причём не выдуманных, а собранных из реального аудит-лога обработанных документов. Иначе это не обучение, а самообман.
И ещё: дообучение не заменяет RAG. Если в документе есть факт, которого не было в обучении, модель его не выдумает правильно — нужно подавать контекст. В продакшене должно стоять дообученная модель + RAG, не одно вместо другого.
- Возьмите 20 ваших реальных документов и прогоните через Qwen2.5-7B + extraction-промпт. Замерьте JSON-валидность. Цифра удивит — и это до всякого обучения.
- Скачайте адаптеры с Hugging Face: ara-extract-v1 (0,5B) и ara-extract-7b-qlora (7B QLoRA).
- Прочитайте следующую — «LoRA, QLoRA, Qwen2.5 — почему этот стек, а не другой».