Донавчання LLM методом Instruction Tuning: повний посібник
Зазначимо: коли внутрішній помічник на базі LLM генерує загальні міркування замість відповідей за регламентом — це типова проблема base-моделі. Ви даєте інструкцію «Напиши відповідь клієнту за шаблоном CRM», а вона видає абстрактний текст. Щоб перетворити загальну модель на асистента, який розуміє контекст компанії, потрібен інструктивне навчання (instruction tuning). Цей метод налаштовує модель на корпоративну мову та стандарти, гарантуючи передбачувані відповіді. Підхід у 2–3 рази ефективніший за традиційний fine-tuning для завдань, що вимагають дотримання складних текстових інструкцій. Наприклад, доналаштування Llama 3.1 8B на 2000 прикладів коштує близько 150 000 грн, що на 60% дешевше за навчання з нуля. Середня економія бюджету на такому проекті становить 200 000–500 000 грн за рахунок виключення необхідності навчання з нуля.
Чим відрізняється Base LLM від Instruct?
Base LLM (наприклад, Llama 3.1 8B) просто продовжує текст. Дайте їй початок — вона продовжить, але не відповість як асистент. Instruct LLM (Llama 3.1 8B Instruct) виконує інструкції: відповідає, аналізує, відмовляється від небажаного контенту. При донавчанні корпоративної моделі ми зазвичай беремо готову Instruct-версію (Llama Instruct, Mistral Instruct) і адаптуємо під домен. Але іноді потрібен повноцінний Instruction Tuning з нуля — наприклад, для роботи з base-моделлю або перевизначення поведінки.
Які формати даних використовуються для Instruction Tuning?
| Формат | Опис | Застосування |
|---|---|---|
| Alpaca (JSON) | Проста пара instruction-input-output | Швидкі експерименти, невеликі датасети |
| ShareGPT (JSON) | Багатоходовий діалог з чергуванням ролей | Чат-боти, сценарії з контекстом |
| Chat Template | Ролі system/user/assistant, інтегрований у tokenizer | Сучасні моделі, виробництво |
{
"instruction": "Переклади текст з англійської на українську",
"input": "The contract must be signed before the deadline",
"output": "Договір повинен бути підписаний до кінця терміну"
}
{
"conversations": [
{"from": "human", "value": "Проаналізуй баланс компанії"},
{"from": "gpt", "value": "Для аналізу балансу потрібні наступні показники..."},
{"from": "human", "value": "Як інтерпретувати співвідношення активів?"},
{"from": "gpt", "value": "Співвідношення поточних та довгострокових активів показує..."}
]
}
messages = [
{"role": "system", "content": "Ти — асистент з фінансового аналізу"},
{"role": "user", "content": "Розрахуй ROE"},
{"role": "assistant", "content": "ROE = Чистий прибуток / Власний капітал × 100%..."},
]
formatted = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
Оптимальний обсяг даних для Instruction Tuning
Дослідження LIMA показало: 1000 якісних прикладів працюють так само добре, як 52000 звичайних. Інструктивне навчання потребує в 52 рази менше даних для досягнення високої якості порівняно з традиційним донавчанням. Якість важливіша за кількість. Орієнтири для спеціалізованого Instruction Tuning:
| Задача | Мінімальний обсяг | Оптимальний обсяг |
|---|---|---|
| Спеціалізація стилю | 100–300 | 500–1000 |
| Новий домен (середньоскладний) | 500–1000 | 2000–5000 |
| Складний технічний домен | 1000–2000 | 5000–15000 |
| Зміна базової поведінки | 2000–5000 | 10000–50000 |
Ключова роль Instruction Tuning у корпоративному ІІ
Бізнес-асистент повинен не просто відповідати, а дотримуватись регламентів, корпоративного тону та термінології. Без інструктивного навчання модель може генерувати стилістично невірні відповіді або розголошувати конфіденційну інформацію. Ми донавчали Llama 3.1 8B на 1800 прикладах внутрішніх переписок IT-компанії. Результат: дотримання корпоративного тону (adherence to corporate tone) зросло з 2.9 до 4.4 (за LLM-judge), точність доменної термінології — з 61% до 87%, коректні відмови — з 34% до 89%, а хибні відмови знизились з 8% до 2%. У датасет ми включили negative examples — запити, на які модель повинна відмовляти (конкуренти, персональні дані). Економія бюджету порівняно з навчанням з нуля може досягати 60%, що в грошовому виразі становить сотні тисяч гривень на проект.
Приклад конфігурації навчання
from trl import SFTTrainer, SFTConfig
from peft import LoraConfig
trainer = SFTTrainer(
model=model,
args=SFTConfig(
output_dir="./corporate-instruct",
num_train_epochs=4,
learning_rate=2e-4,
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
max_seq_length=2048,
bf16=True,
dataset_text_field="text",
),
train_dataset=formatted_dataset,
peft_config=LoraConfig(r=16, lora_alpha=32, target_modules=["q_proj","v_proj"]),
)
Важно: при Instruction Tuning ми маскуємо instruction частину при обчисленні loss (враховуємо loss тільки на response токенах). У TRL це контролюється через DataCollatorForCompletionOnlyLM.
Методологія збору якісного датасету
- Визначте цілі: який стиль і тон потрібні, які теми охопити.
- Зберіть корпоративні документи: внутрішні переписки, регламенти, FAQ.
- Згенеруйте інструкції: використовуйте LLM для створення прикладів на основі документів.
- Перевірте якість: видаліть невідповідності, виправте помилки.
- Відформатуйте датасет: оберіть Alpaca, ShareGPT або Chat Template.
Приклад генерації інструкцій через LLM:
def document_to_instructions(doc_text: str, llm_client) -> list:
response = llm_client.chat.completions.create(
model="gpt-4o",
messages=[{
"role": "user",
"content": f"""З наступного документа створи 10 навчальних прикладів для LLM.
Кожен приклад: {{"instruction": "завдання", "output": "правильна відповідь на основі документа"}}.
Різноманіть типи завдань: питання, сумаризація, аналіз, порівняння.
Документ:
{doc_text[:3000]}
Поверни JSON-масив прикладів."""
}],
)
return json.loads(response.choices[0].message.content)
Процес роботи
| Етап | Тривалість | Результат |
|---|---|---|
| Аналітика та цілепокладання | 1–2 тижні | ТЗ на датасет, вибір моделі |
| Збір та підготовка джерел | 1–2 тижні | Сирі документи, розмічені приклади |
| Генерація та верифікація датасету | 2–3 тижні | Фінальний датасет у потрібному форматі |
| Донавчання з ітераціями | 1–2 тижні | Метрики, контрольні чекпоїнти |
| Оцінка та деплой | 1 тиждень | Експортована модель, документація |
Строки та вартість
- Проектування датасету та збір джерел: 2–3 тижні
- Генерація та верифікація прикладів: 2–4 тижні
- Навчання та ітерації: 1–2 тижні
- Разом: від 5 до 9 тижнів
Вартість розраховується індивідуально залежно від обсягу датасету, розміру моделі та необхідних ітерацій. Для точної оцінки зв'яжіться з нами — надамо детальний комерційний план. Економія бюджету порівняно з навчанням з нуля може досягати 60%.
Що входить у роботу
- Формування датасету: скрипти генерації, верифікація, розмітка
- Код навчання з використанням сучасного стеку (TRL, Transformers, PEFT)
- Експорт навченої моделі в потрібний формат (GGUF, ONNX, SafeTensors)
- Документація з архітектури, конфігів та метрик
- Доступ до репозиторію з кодом та датасетом
- Підтримка протягом 30 днів після здачі
Типові помилки при Instruction Tuning
- Нечисті дані: відповіді з помилками, неузгоджений стиль
- Ігнорування маскування loss на промпті — модель вчиться запам'ятовувати інструкцію, а не відповідати
- Занадто маленький learning rate (1e-4–5e-5 оптимально для LoRA)
- Недостатня різноманітність інструкцій — модель перевчається на вузький патерн
Instruction Tuning — це метод, який перетворює загальну LLM на асистента, що говорить мовою вашої компанії. Наш досвід: більше 5 років у NLP та CV, 50+ проектів з донавчання LLM для корпоративних замовників. Зв'яжіться з нами, щоб обговорити ваш проект. Отримайте консультацію з налаштування Instruction Tuning.
Ссилка: Instruction Tuning на Wikipedia







