Fine-Tuning GPT-4 та GPT-4o: доопрацювання під бізнес-задачі
Ми часто стикаємося з ситуацією, коли навіть найдовший system prompt не дає стабільного формату відповіді. Наприклад, при вилученні реквізитів з договорів базова GPT-4o помилялася в 29% випадків. Після fine-tuning на 800 розмічених прикладах точність зросла до 94%, а промпт скоротився втричі. У цій статті розберемо, як ми підходимо до fine-tuning GPT-4 та GPT-4o — від датасету до деплою, і коли це виправдано замість звичайного промпт-інжинірингу. Важливо розуміти, що fine-tuning — не єдиний спосіб адаптації; іноді достатньо правильно налаштованого промпту з прикладами. Ми детально розбираємо датасет, ітеративно підбираємо hyperparameters і тестуємо результат на hold-out вибірці.
Коли потрібен fine-tuning, а коли вистачає промпту?
| Параметр | Prompt Engineering | Fine-Tuning |
|---|---|---|
| Довжина контексту під інструкції | Займає токени | Не потрібен |
| Стабільність формату виводу | Нестабільна | Висока |
| Латентність | Вища (довгий промпт) | Нижча |
| Вартість на запит | Вища | Нижча при великому обсязі |
| Поріг входу | Немає | Потрібні дані |
Fine-tuning виправданий, коли формат виводу має бути жорстким (JSON, таблиця) або домен вузький. Якщо достатньо 5-shot прикладів — краще залишитися на промпті.
Як підготувати якісний датасет?
Ключовий етап — якість даних, а не їх кількість. Типові помилки при підготовці:
- Дублікати та суперечності: однакове питання з різними відповідями збиває модель. Дедуплікація обов'язкова.
- Незбалансований клас відповідей: якщо 90% прикладів — один тип запиту, модель перегинає під нього.
- Формат без варіативності: якщо всі приклади написані одним автором в одному стилі, модель погано узагальнюватиме.
Для очищення та аналізу датасету використовуємо datasets (Hugging Face), pandas, а також openai CLI для валідації формату:
openai tools fine_tunes.prepare_data -f dataset.jsonl Кількість прикладів залежить від завдання. Мінімальний поріг — 50–100, але для стабільного результату краще 500–2000. При меншому обсязі модель погано узагальнює, при більшому — зростають витрати на навчання без гарантії покращення. Важливо підтримувати баланс класів і різноманітність формулювань.
Які гіперпараметри вибрати?
| Параметр | Значення за замовчуванням | Рекомендація для малого датасету |
|---|---|---|
| n_epochs | 3 | 5–8 |
| batch_size | 4 | 2–4 |
| learning_rate_multiplier | 1.8 | 0.5–1.0 |
from openai import OpenAI client = OpenAI(api_key="...") file = client.files.create( file=open("train.jsonl", "rb"), purpose="fine-tune" ) job = client.fine_tuning.jobs.create( training_file=file.id, model="gpt-4o-2024-08-06", hyperparameters={ "n_epochs": 3, "batch_size": 4, "learning_rate_multiplier": 1.8 } ) Рекомендуємо починати з n_epochs=3, потім ітеративно збільшувати, слідкуючи за метриками. При переучуванні train loss знижується, а validation loss зростає — тоді кількість епох потрібно зменшити.
Як оцінити результат доопрацювання?
Після завершення джоба модель доступна за id виду ft:gpt-4o-2024-08-06:org-name::abc123. Оцінюємо результат за:
- Training loss / Validation loss: OpenAI віддає метрики в подіях джоба. Хороший сигнал — знижувальний train loss при стабільному val loss.
- Ручне тестування на hold-out наборі: мінімум 50 прикладів, що не потрапили в навчання.
- Порівняння з baseline: A/B тест базової GPT-4o vs. доопрацьованої на реальних запитах.
Приклад реального покращення: при доопрацюванні GPT-4o на 800 прикладах юридичних документів (договори оренди, акти) точність вилучення реквізитів у структурований JSON зросла з 71% до 94%, а токени на промпт скоротилися на 60%.
Які завдання вирішуємо за допомогою fine-tuning?
- Класифікація звернень (наприклад, саппорт-тікети за категоріями): 2–3 тижні від збору даних до деплою. Потрібно 300–500 розмічених прикладів.
- Генерація в корпоративному стилі: тон, структура відповіді, заборонені фрази. 1–2 тижні, 200–400 прикладів.
- Вилучення структурованих даних (Named Entity Recognition через LLM): 3–4 тижні, 500–1500 прикладів з анотацією.
- Спеціалізований домен (медицина, право, фінанси): 6–12 тижнів з урахуванням збору та розмітки даних.
Для кожного завдання ми готуємо кастомний датасет, ітеративно доопрацьовуємо та проводимо A/B-тестування. Докладніше про це у документації OpenAI по fine-tuning.
Які обмеження у fine-tuning GPT-4o?
GPT-4o fine-tuning не дає доступу до ваг моделі — ви отримуєте лише hosted endpoint. Якщо потрібні on-premise або контроль над вагами, розглядаємо Llama 3, Mistral або інші відкриті моделі з LoRA/QLoRA.
Також слід враховувати: доопрацьована модель дорожча за базову у інференсі. При великому обсязі запитів це суттєво, але економія на промпті може компенсувати витрати.
Що входить у нашу роботу
- Аудит наявних даних, вироблення вимог до датасету
- Збір, очищення, розмітка (за необхідності) навчальних прикладів
- Ітеративне навчання з підбором гіперпараметрів
- Оцінка якості: автоматичні метрики + ручна верифікація
- Інтеграція доопрацьованої моделі у продакшн-пайплайн
- Моніторинг деградації якості після деплою
Ми гарантуємо, що доопрацьована модель пройде валідацію на hold-out вибірці. За 5 років на ринку ми виконали понад 20 проектів з fine-tuning. Наш досвід дозволяє підбирати оптимальні гіперпараметри з першої ітерації. Замовте консультацію — ми оцінимо ваш датасет і скажемо, чи можливий fine-tuning. Зв'яжіться з нами, щоб обговорити деталі.







