Зміст
Тиждень крутять низькорангову адаптацію (LoRA, Low-Rank Adaptation) на локальному чекпоінті. «Датасет» — шістсот діалогів із чату: різні системні підказки, відповіді без єдиного шаблону, жодної явної відмови, жодного зрізу «застарілий регламент». На відкладеній вибірці з того самого чату метрика росте. У пілоті юрист ловить впевнену відповідь за скасованою версією, оператор — тон, якого в проді бути не повинно.
Провал майже ніколи не в оптимізаторі. Це як учити дитину за стопкою випадкових аркушів замість прописів: десь зразок «так пиши», десь чужий почерк, а контрольну потім списують із того самого зошита. Корпус для донавчання з учителем (SFT, Supervised Fine-Tuning) збирали як теку прикладів, а не як книгу вправ із контрактом, покриттям і бар’єром перед уроком.
Нижче — як спроєктувати SFT-корпус: що класти в пару «інструкція → відповідь», звідки брати приклади, як не змішати домашню роботу з екзаменом і коли синтетика допомагає, а коли шкодить. Матеріал продовжує огляд інженерії датасетів (там — калібр і приймання) і доповнює коли справді потрібне донавчання, не дублюючи кейс класифікації на Qwen і загальний контур навчання LLM.
Ключові висновки
SFT вчить поведінку на парах «вхід → бажаний вихід». Це не претрейн на сирому вебі й не «відповідь A краща за B». Плутати сімейства — отримувати гарний loss і дивний прод.
Спочатку контракт пари, потім обсяг. Формат відповіді, мова, коли відмова, коли ескалація — до розмітки й до синтетики.
Покриття важливіше за розмір. Тисяча однакових «коротких ввічливих» рядків гірша за триста стратифікованих вправ із відмовами й реальними формулюваннями.
Синтетика — ксерокс чернетки, не підпис учителя. Фінальний стиль і факти домену затверджує людина з рубрикою.
Перед навчанням — статичний бар’єр: схема, дедуплікація, заборона перетину з оцінкою, частка відмов, шаблон діалогу як у проді.
Оцінка не живе в тому самому зошиті, що вправи. Інакше ви підганяєте відповіді під звіт. Рамка оцінки — у матеріалі про оцінку LLM перед запуском.
Це прописи, а не чотири чужі зошити
У проєкті часто лежать чотири сімейства. Для SFT важливо не сплутати, чим ви вчите, а чим міряєте — інакше калібр із опорного огляду знову змішають із партією.
| Сімейство | Вчить / вимірює | Типова одиниця | Помилка змішування |
|---|---|---|---|
| SFT-корпус | Як відповідати (формат, тон, патерн) | інструкція → відповідь | Навчання на еталоні оцінки без аудиту |
| Дані вподобань | Що обрати з двох правдоподібних | chosen / rejected | Стиль без фактів; «подобається» замість «вірно» |
| Еталонний набір | Виміряти поведінку | вхід + критерій приймання | Підгонка підказки під видимі кейси |
| Буфер збору | Сирі провали з експлуатації | траса без фінальної мітки | Оцінка за нерозміченими кейсами |
SFT — це прописи: за такого входу бажаємо один вихід (або відмову). Вподобання — два твори, який кращий. Еталон для безперервної інтеграції (CI, Continuous Integration) — контрольна з ключем. Буфер — чернетки зі парти, ще без оцінки.
Корпус може бути ширшим і шумнішим за еталон: мета — вивчити патерн, не зафіксувати регресійний бар’єр. Якщо запис не описати як «за такого входу бажаємо такий вихід», це ще не вправа для SFT — нотатка чи кандидат у буфер.
Спочатку правила рядка, потім стопка аркушів
До розмітки контракт пари кладуть в одне місце (meta.yaml або короткий RFC) — як зразок літери на початку прописів:
| Елемент | Питання | Приклад для асистента за регламентами |
|---|---|---|
| Вхід | Що бачить модель? | Питання користувача; опційно знайдені фрагменти |
| Вихід | Формат? | Коротка відповідь + посилання на пункт; або JSON |
| Відмова | Коли не відповідати? | Немає джерела; поза списком контролю доступу (ACL, Access Control List); застаріла версія |
| Ескалація | Коли до людини? | Клас ризику «високий»; конфлікт двох документів |
| Мова | uk / en / mixed? | Відповідь мовою питання |
| Тон | Формальний / операторський? | Без сленгу; без «впевненості» без джерела |
| Джерело істини | Що факт? | Актуальна версія в СЕД, не чат |
Без цього два експерти напишуть дві «правильні» відповіді різної довжини, і модель вивчить середнє з шуму. Якщо контракт закривається пошуком і жорстким шаблоном, спочатку перевірте коли донавчання виправдане. SFT потрібен, коли стійка поведінка (формат, відмова, тон, жаргон) не втримується підказкою й пошуком.
Одна клітинка — одні поля
Мінімальний запис для налаштування інструкцій — не «простирадло тексту», а поля, що переживають зміну чекпоінта й бібліотеки:
{
"id": "sft-reg-0142",
"messages": [
{"role": "system", "content": "…одна версія системної інструкції…"},
{"role": "user", "content": "Чи можна зберігати ЗІЗ без журналу видачі?"},
{"role": "assistant", "content": "За регламентом v3.2, п. 4.1 — ні. …"}
],
"meta": {
"domain": "ot_pb",
"intent": "policy_qa",
"doc_version": "3.2",
"language": "uk",
"refusal": false,
"source": "editor",
"difficulty": "medium"
}
}
Чотири правила економлять тижні:
- Одна версія системної підказки на маніфест (або явне
system_version). П’ять різних system в одному JSONL — учити конфлікт політик. idстабільний між версіями: правка відповіді не повинна плодити «новий» кейс без сліду.- Метадані для зрізів: домен, намір, версія документа, мова, відмова, джерело. Без них не відповісти, на якому зрізі впали.
- Шаблон чату як у проді. Якщо в проді немає
system, не вчіть на довгому system, якого не буде під час виклику.
Для класифікації структура може бути простішою (input / label); принцип той самий: схема + метадані + версія маніфесту.
Звідки брати рядки в зошит
Чотири джерела — у кожного свій ризик.
| Джерело | Плюс | Ризик | Як використовувати |
|---|---|---|---|
| Редактори еталонів | Факти й тон домену | Дорого, повільно | Ядро покриття й усі відмови високого ризику |
| Логи експлуатації | Реальні формулювання | Персональні дані, ACL, шум | Після фільтра й рев’ю; не копіювати відповідь моделі як істину |
| Синтетика (LLM) | Обсяг і варіації | Галюцинації, одноманітність | Чернетка → обов’язкове рев’ю; квота «синтетика ≤ N%» |
| Перепис / транскрипція | Еталонний тон організації | Вузьке покриття | Добре для формату; погано як єдине джерело намірів |
Робоча суміш у пілотах: ядро 30–40% пише або затверджує експерт; периферія росте синтетикою за шаблонами намірів; хвіст — із буфера провалів після рев’ю. Ксерокс без квоти й рубрики швидко заповнює зошит «впевненим середнім» — модель стає ввічливою й порожньою.
«Модель згенерувала пару» ≠ «пару перевірено». У доменах із ціною помилки фінальний статус — лише після людини. Синтетика не підписує маніфест.
Не число рядків, а карта вправ
«Скільки прикладів?» без карти покриття — питання в порожнечу. Орієнтири (не догма):
| Тип задачі | Робочий старт корпусу | На що дивитися раніше обсягу |
|---|---|---|
| Класифікація / маршрутизація | 1k–20k міток | Баланс класів, плутані класи |
| Instruction / діалог SFT | 500–5k пар | Наміри, відмови, довжина, мова |
| Структурований вивід (JSON) | 300–3k | Дотримання схеми, рідкісні поля |
| Код / SQL під домен | 500–8k | Діалекти, схеми БД, небезпечні запити |
«Більше» допомагає, лише якщо росте покриття намірів і умов, а не число парафраз одного рядка. Карта — наміри × умови (є джерело / немає; актуальна / застаріла версія; один документ / конфлікт). Порожня клітинка важливіша за сто схожих «успішних» відповідей.
Якщо всі репліки користувача написав один редактор «літературно», модель погано переносить розмовний прод. Змішуйте уривки, помилки (якщо вони в потоці) і формальні листи — у частках потоку, не смаку розмітника.
Для вузької класифікації на маленькій моделі іноді вистачає сотень прикладів — як у кейсі Qwen 0.6B. Для відкритого діалогу за регламентами без відмов навіть десять тисяч пар не врятують пілот.
Вправи, де правильна відповідь — «не писати»
Корпус без відмов вчить модель завжди відповідати. У корпоративному асистенті це прямий шлях до вигаданих пунктів.
Мінімальний набір «негативних» навичок у прописах:
- Відмова без джерела — «у переданих фрагментах немає відповіді; не вигадую».
- Відмова за ACL — немає прав; не переказувати «із загальних знань».
- Відмова за застарілою версією — документ знято з дії.
- Ескалація — конфлікт двох норм; передати спеціалісту за шаблоном.
- Форматна відмова — запит поза областю, якщо продукт це забороняє.
Частка таких кейсів часто 15–30% на старті — інакше позитивний клас задавить поведінку. Важливіша не відсоток, а наявність усіх типів відмови з контракту.
«Схожі, але невірні» відповіді зазвичай не кладуть як assistant — це територія вподобань / DPO. Для SFT корисніший жорстко правильний вихід або запис, де правильний вихід — відмова. Якщо треба обирати між двома формулюваннями — окреме сімейство, інакше один зошит тягне модель у різні боки.
Не відкривайте урок, доки зошит не пройшов перевірку
Навчання не стартує з «теки на диску». Спочатку бар’єр — як перевірка прописів перед контрольною:
flowchart TB
sources[Джерела: редактор / прод / синтетика] --> normalize[Нормалізація схеми й шаблону]
normalize --> lint[Статичні перевірки]
lint --> split[Train / dev / holdout]
split --> trainJob[Задача SFT]
split --> evalGate[Оцінка на еталоні]
evalGate --> release{Регресійний бар’єр}
release -->|pass| ship[Реліз адаптера]
release -->|fail| buffer[Буфер правок корпусу]
buffer --> sources
Що ловить біду до GPU:
- схема: обов’язкові поля, типи, допустимі
role; - один system на маніфест (або явні версії);
- дедуплікація за текстом і майже-дублікатами;
- нуль перетинів з еталоном оцінки;
- частка відмов у коридорі;
- довжина, порожні
content, гігантські вставки логів; - персональні дані й секрети за політикою;
- мітка мови збігається з текстом на вибірці аудиту.
Підсумок бар’єра — маніфест: версія, хеш, зрізи, хто затвердив, посилання на рубрику. Без нього порівнювати «модель A vs B» безглуздо: порівнюєте ще й різні зошити.
Домашня робота не повинна збігатися з контрольною
Типова пастка: взяти 10% «з кінця файлу» в тест. Якщо файл відсортовано за часом чи автором, тест не відображає прод. Гірше — правити відповіді в train, підглядаючи в ті самі формулювання, що в звіті замовнику.
Практичні правила:
- Прихована вибірка (holdout) — десятки–сотні кейсів, які не відкривають під час ітерацій. Звіт «готові до пілоту» — за нею або за окремим еталоном.
- Видима dev — для налагодження; її метрики не продавати бізнесу як фінальні.
- Еталон оцінки версіонується окремо від train-маніфесту. Можна посилатися («train v0.4 на gold v0.3»), але не тримати еталон всередині train JSONL «для зручності».
- Парафраз — теж витік. «Чи можна зберігати ЗІЗ без журналу?» і «Чи обов’язковий журнал видачі ЗІЗ?» не повинні роз’їхатися по train і holdout без політики. Шукайте майже-дублікати.
Для RAG-оцінки еталон будується інакше — золоті набори для RAG. RAG перевіряє пошук і опору на фрагменти; SFT вчить формулювання й політику відповіді. Спільні питання між контурами — кандидат на витік.
Корпоративний приклад: асистент за регламентами
Внутрішній асистент відповідає за актуальними регламентами. Пошук уже віддає фрагменти; відповіді все одно «пливуть» за форматом і дописують пункти, яких немає у фрагментах.
Контракт: відповідь лише за переданими фрагментами; обов’язково doc_id і версія; за відсутності — відмова; тон формальний.
Корпус v0.2 (приклад розподілу):
| Зріз | Частка | Хто затверджує |
|---|---|---|
| Успішна відповідь з цитатою | 55% | Редактор + вибірковий аудит |
| Відмова: немає у фрагментах | 15% | Редактор |
| Відмова: застарілий документ | 10% | Редактор |
| Конфлікт двох норм → ескалація | 10% | Юрист / відповідність |
| Поза областю продукту | 5% | Редактор |
| Короткий розмовний запит | 5% | З логів після фільтра |
Синтетика — лише парафрази успішних і «немає у фрагментах», квота 25%, обов’язкове рев’ю. Після пілоту провали «впевнена відповідь за порожньої видачі» додали як відмови в v0.3, а не як нові «успішні» фантазії.
Метрика релізу адаптера: не середнє «схоже на еталон», а частка порушень контракту на holdout нижче порога.
Промисловий приклад: операторські інструкції
Кіоск або планшет у цеху: модель допомагає знайти крок інструкції й допустимі відхилення. Помилка дорожча за офісний чат.
Відмінності прописів: короткі репліки, шум розпізнавання мовлення, змішана мова (українська/російська + коди обладнання); жорстка відмова на «як обійти блокування» й запити поза допуском; метадані — лінія, верстат, версія техкарти, рівень допуску.
Тут 800–1500 затверджених пар із повним покриттям відмов і ліній важливіші за п’ять тисяч синтетичних «ввічливих» діалогів. Та сама логіка, що в розборі OCR рукописних цифр: спочатку схожість на експлуатацію, потім масштаб.
Суміжні матеріали: що читати поруч
Вузький експеримент «класифікація → мітка» показує: маленька модель + чисті мітки б’ють великий чекпоінт із брудним набором. Не переносьте це один в один на відкритий діалог: там одиниця — політика відповіді, і ціна «майже правильного» тексту вища.
| Питання | Матеріал |
|---|---|
| Чи потрібне донавчання? | Коли потрібне донавчання |
| Як влаштовані сімейства даних? | Інженерія датасетів |
| Як міряти до проду? | Оцінка LLM перед запуском |
| Еталон лише для RAG | Еталонний набір для RAG |
| Кейс класифікації | Fine-tuning Qwen 0.6B |
Цей текст закриває: як спроєктувати корпус, якщо рішення «донавчаємо» вже прийняте.
Де псують прописи
Тека з чату без схеми. Різні system, немає id — відтворюваність нульова.
Нуль відмов. Модель вчиться бути корисною завжди; у проді — галюцинації впевненим тоном.
Синтетика на 90% без рев’ю. Гарний loss, порожній пілот.
Навчання на еталоні оцінки. Метрики тішать до першого чужого запиту.
Один автор усіх user-реплік. Розрив із мовою співробітників чи операторів.
SFT і вподобання в одному файлі. Модель не розуміє: вчити єдину відповідь чи «що частіше подобається».
Немає маніфесту. Не можна відкотити корпус і пояснити регресію.
Ігнор ACL і персональних даних у логах. Юридичний борг і борг із безпеки в тому самому JSONL.
Що зробити сьогодні
- Запишіть контракт пари на одну сторінку: вхід, вихід, відмова, ескалація, тон.
- Випишіть карту покриття намірів × умов і позначте порожні клітинки — це черга розмітки, не «ще LoRA».
- Додайте не менше п’яти відмов кожного типу з контракту.
- Проженіть статичний бар’єр до першого запуску навчання.
- Призначте власника маніфесту — без чийого підпису файл не потрапляє в задачу навчання.
Спочатку допишіть прописи — потім знову крутіть адаптер. Інакше наступне «зростання метрики» знову виявиться списаним із того самого зошита.
Часті запитання (FAQ)
Скільки прикладів потрібно для SFT?
Стільки, щоб закрити карту покриття й коридор відмов, а не «як у всіх». Для вузької класифікації часто вистачає сотень–пари тисяч міток; для діалогу за політиками — сотні–кілька тисяч стратифікованих пар. Краще 700 затверджених, ніж 7 000 синтетичних без редактора.
Чи можна будувати весь корпус синтетикою?
Як чернетку й для парафраз — так, з квотою й рев’ю. Як єдине джерело істини за високої ціни помилки — ні. Синтетика прискорює, експерт підписує.
Чи потрібна системна інструкція в кожному записі?
Потрібна узгодженість із продом. Якщо system у проді фіксований — одна версія на маніфест. П’ять конфліктних system — спосіб навчити модель ігнорувати політику.
Чим SFT-корпус відрізняється від еталона для CI?
Еталон для CI маленький, стабільний, із жорсткою рубрикою — ним вимірюють. SFT-корпус вчить і може бути ширшим. Оцінювати реліз лише на підвибірці train — помилка методології.
Коли переходити від SFT до даних вподобань?
Коли формат і факти тримаються, але треба стабільно обирати між двома допустимими відповідями. Це окреме сімейство; не змішуйте chosen/rejected з єдиним assistant без політики.
Як не затягнути персональні дані з логів?
Фільтр до розмітки, маскування, заборона сирих трас у git без сканера, вибірковий аудит. Запис із проду без рев’ю — не «швидкий SFT», а витік у навчальну вибірку.
Далі в серії
- Інженерія датасетів: огляд — рамка сімейств і життєвого циклу.
- JSONL, шарди й шлях до GPU — фізичний устрій корпусу.
- Редактори еталонів — рубрика й узгодження (
golden-editors-annotation-workflow-2026). - Навчання / оцінка / прихована вибірка й витоки (
dataset-splits-leakage-2026). - Дані вподобань: DPO і пари (
preference-dataset-rlhf-2026). - Синтетика й гібридний конвеєр (
synthetic-human-dataset-pipeline-2026).



Коментарі