Fine-tuning SLM на PDF: как избежать переобучения и галлюцинаций | AiManual
AiManual Logo Ai / Manual.
06 Фев 2026 Гайд

Тонкая настройка SLM на частных документах: практический гайд без галлюцинаций

Пошаговое руководство по тонкой настройке SLM на частных документах: подготовка данных, выбор методов адаптации, оценка качества и борьба с конфликтом знаний.

Когда SLM начинает врать: почему частные документы - минное поле

Вы загрузили в модель тысячу страниц внутренней документации, настроили ее на Q&A, а она в ответ на вопрос о процедуре отпусков начинает рассказывать про отпуск в Бали. Знакомая ситуация? Галлюцинации в SLM (Small Language Models) при работе с закрытыми доменами - это не баг, а фундаментальная проблема, которую 90% инженеров решают неправильно.

Основная ошибка - считать, что тонкая настройка на частных документах работает так же, как на открытых датасетах. На деле у вас возникает тройной конфликт: между исходными знаниями модели, вашими документами и форматом их представления. Модель, обученная на Википедии и научных статьях, не понимает, что значит "Приказ № 2847 от 15.03.2025 о внедрении СЭД" - она пытается найти аналогии в своей тренировочной выборке и... галлюцинирует.

Галлюцинации в SLM на закрытых доменах - это не случайные ошибки, а систематическое смещение. Модель не "забывает" общеизвестные факты, она пытается применить их там, где они не работают.

Подготовка данных: не просто вытащить текст из PDF

Первая ловушка - качество исходных данных. Если у вас сканы документов с артефактами или нестандартной разметкой, даже лучшие SLM будут работать плохо. Я видел проекты, где команды месяцами пытались улучшить качество ответов, а проблема была в том, что OCR модель неправильно распознавала заголовки.

Для работы с длинными PDF я рекомендую комбинацию инструментов: Docling для чанкинга сложных документов и проверку качества распознавания через специализированные OCR системы. Особенно это критично для технической документации, где потеря одной цифры может стоить дорого.

1 Очистка и структурирование данных

Не загружайте сырой текст в модель. Создайте структурированный датасет в формате Q&A, где каждый вопрос имеет четкий контекст и однозначный ответ. Вот как это выглядит на практике:

Что НЕ делать Что делать вместо этого
Загрузить 500 страниц PDF как есть Разбить на смысловые блоки по 2-3 абзаца
Использовать автоматическую генерацию вопросов Ручное составление вопросов экспертами домена
Оставлять маркеры форматирования Очищать от служебных символов и нормализовать

Для технических документов добавьте метаданные: тип документа (инструкция, спецификация, отчет), дату создания, версию. Это поможет модели понять контекст и снизит вероятность галлюцинаций на 30-40%.

Выбор метода адаптации: LoRA против полного fine-tuning

Здесь большинство идет по пути наименьшего сопротивления: берут LoRA, потому что это быстро и не требует много GPU. Но для закрытых доменов это часто неправильный выбор.

LoRA (Low-Rank Adaptation) отлично работает, когда вам нужно адаптировать модель к новому стилю или формату, но не переписывать ее знания. Если ваши документы содержат терминологию, которой нет в исходной модели, LoRA будет постоянно "соскальзывать" на знакомые паттерны.

💡
Правило выбора метода: если в документах больше 30% уникальных терминов или структура данных сильно отличается от тренировочного корпуса модели - используйте полный fine-tuning с заморозкой первых слоев.

2 Настройка параметров обучения

Типичная ошибка - использовать стандартные параметры из туториалов. Они не работают для частных документов. Вот что нужно менять:

  • Learning rate: для закрытых доменов нужен в 2-3 раза ниже стандартного (1e-5 вместо 3e-5)
  • Batch size: маленькие батчи (4-8) дают лучшее качество, но дольше обучаются
  • Epochs: не больше 3-5, иначе переобучение гарантировано
  • Weight decay: увеличение до 0.01 помогает бороться с переобучением

Для мониторинга переобучения добавьте валидационный датасет из документов, которых нет в тренировочной выборке. Если accuracy на валидации падает после 2-й эпохи - стоп обучение.

Борьба с галлюцинациями: техники, которые работают

Галлюцинации в SLM на частных документах имеют специфическую природу. Модель не выдумывает факты из воздуха - она подменяет неизвестные термины известными аналогами. "Отдел кадров" становится "HR department", "внутренний регламент" - "company policy".

Эффективная стратегия - создание словаря терминов и их принудительное использование в ответах. Реализуется через:

  1. Контекстные промпты: добавляем в каждый промпт список ключевых терминов из документа
  2. Ограничение генерации: настраиваем параметры sampling (temperature=0.3, top_p=0.9)
  3. Пост-обработку: проверяем ответы на наличие терминов из черного списка

Не используйте temperature выше 0.5 для закрытых доменов. Модель начнет "творчески" интерпретировать инструкции, что приведет к галлюцинациям.

Отдельная проблема - числовые данные. Модели часто ошибаются в датах, суммах, процентах. Решение - извлекать числовые данные отдельно и подставлять их в ответ через шаблоны.

Оценка качества: метрики, которые покажут реальную картину

Accuracy и F1-score бесполезны для оценки SLM на частных документах. Модель может показывать 95% accuracy, но при этом в 40% случаев использовать неправильные термины.

Нужны специализированные метрики:

  • Терминологическая точность: процент правильного использования доменных терминов
  • Контекстная релевантность: насколько ответ соответствует конкретному документу, а не общим знаниям
  • Стабильность ответов: вариативность ответов на один и тот же вопрос

Для автоматической оценки создайте тестовый датасет из 100-200 вопросов с эталонными ответами. Каждый ответ должен проверяться по трем критериям: точность терминов, полнота информации, отсутствие галлюцинаций.

3 Инструменты для оценки

Не изобретайте велосипед. Используйте:

# Пример оценки терминологической точности
from sklearn.metrics import precision_score

# Список ключевых терминов домена
domain_terms = ["СЭД", "ЭЦП", "Внутренний регламент", "Номенклатура дел"]

# Функция проверки использования терминов
def check_terminology(answer, expected_terms):
    found_terms = []
    for term in expected_terms:
        if term in answer:
            found_terms.append(term)
    return len(found_terms) / len(expected_terms)

Конфликт знаний: что делать, когда модель "забывает" базовые вещи

Самая неприятная проблема - после тонкой настройки модель перестает знать элементарные вещи. Спросите у настроенной на финансовых отчетах SLM, сколько будет 2+2, и с вероятностью 30% получите ответ "согласно статье 284 НК РФ...".

Это происходит потому, что модель пытается применить новый паттерн везде. Решение - смешанное обучение:

  1. Берем 70% данных из частных документов
  2. Добавляем 30% общих знаний (Википедия, научные статьи)
  3. Используем weighted loss, где вес для общих знаний в 2 раза ниже

Еще один прием - создание "защитных промптов". Когда модель получает вопрос общего характера, она должна переключаться в режим базовых знаний. Реализуется через классификатор запросов перед основной моделью.

💡
Если у вас возникают проблемы с контекстуализацией корпоративных данных, рекомендую изучить методы из статьи "Как заставить LLM работать с корпоративными данными". Многие техники работают и для SLM.

Производительность: как не сжечь GPU и не ждать неделю

Тонкая настройка SLM на 10k документов не должна занимать больше суток. Если у вас уходит неделя - вы что-то делаете не так.

Оптимизации, которые реально работают:

  • Gradient checkpointing: экономит до 60% памяти за счет пересчета градиентов
  • Mixed precision (FP16): ускоряет обучение в 2-3 раза
  • Gradient accumulation: позволяет использовать большие эффективные батчи при ограниченной памяти
  • Оптимизатор 8-bit Adam: снижает потребление памяти на 50% без потери качества
# Конфигурация для эффективного обучения
from transformers import TrainingArguments

training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=4,
    gradient_accumulation_steps=8,  # Эффективный batch size = 32
    fp16=True,  # Mixed precision
    gradient_checkpointing=True,  # Экономия памяти
    optim="adamw_8bit",  # 8-bit оптимизатор
    learning_rate=1e-5,
    weight_decay=0.01,
    save_steps=500,
    eval_steps=500,
)

Чеклист перед запуском в продакшн

Прежде чем выкатывать настроенную модель, пройдите по этому списку:

  1. Тест на галлюцинации: 100 случайных вопросов, проверка на выдуманные факты
  2. Тест на переобучение: вопросы из документов, которых не было в тренировке
  3. Тест на базовые знания: простые вопросы вне домена
  4. Производительность: latency < 500ms на CPU, < 100ms на GPU
  5. Потребление памяти: модель должна влезать в целевое железо

Если модель проходит все тесты - можно запускать. Но оставьте мониторинг: раз в неделю проверяйте качество ответов на новых документах.

Самая частая ошибка после запуска - забыть про дрейф данных. Документы обновляются, появляются новые термины, старые устаревают. Планируйте регулярную дообучение раз в месяц.

Альтернативы: когда fine-tuning - не лучший выбор

Иногда проще не настраивать модель, а использовать другие подходы. Fine-tuning SLM на частных документах имеет смысл, когда:

  • У вас больше 1000 документов одного типа
  • Документы содержат уникальную терминологию
  • Требуется высокая скорость ответов (RAG может быть медленнее)
  • Документы статичны и редко меняются

Если эти условия не выполняются, рассмотрите SMART SLM с памятью для RAG или гибридные подходы.

Главное - не пытайтесь решить все проблемы тонкой настройкой. Иногда достаточно хорошо подготовить данные и использовать правильные промпты.

Что будет дальше: тренды 2026 года

К 2026 году подходы к тонкой настройке SLM изменятся. Уже сейчас появляются модели, которые лучше справляются с закрытыми доменами из коробки. Ожидайте:

  • Специализированные SLM: модели, предобученные на корпоративных документах
  • Автоматический подбор параметров: системы, которые сами определят оптимальные настройки для ваших данных
  • Динамическая адаптация: модели, которые подстраиваются под новые документы без переобучения
  • Улучшенная борьба с галлюцинациями: встроенные механизмы проверки фактов

Но пока этих технологий нет, придется делать все вручную. И помните: успешная тонкая настройка - это не про технологии, а про понимание данных. Проведите неделю, изучая свои документы, и сэкономите месяц на борьбе с галлюцинациями.

А если совсем нет времени на подготовку данных, есть инструменты вроде "Fine-tuning из PDF за 5 минут". Но будьте готовы к тому, что качество будет соответствующим.

Тонкая настройка SLM - это ремесло, а не наука. Каждый датасет уникален, каждая модель ведет себя по-своему. Главное - не бояться экспериментировать и не верить слепо статьям с GitHub. Особенно тем, где обещают 99% accuracy на первых же эпохах.