Большие языковые модели и малоресурсное обучение
Что такое LLM?
Большая языковая модель (LLM) — это модель, которая предсказывает распределение вероятностей следующего токена (слова) на основе всего предыдущего контекста. Это основа для GPT, BLOOM и других современных моделей.
Важные аспекты:
- Модель видит на входе набор векторов (эмбеддингов), полученных из текста
- Каждый следующий токен генерируется с учётом всей предыдущей последовательности
- Поведение модели можно менять, не трогая её веса, через манипуляции с входным контекстом
Как обучаются LLM?
Обучение проходит в три ключевых этапа:
Предобучение (Pretraining)
- Модель учится на огромных корпусах текстов, предсказывая следующий токен
- Из одного абзаца можно получить сотни обучающих примеров
Инструктивное обучение (Instruction Tuning)
- Модель дообучают на парах "инструкция — ответ", чтобы она лучше следовала указаниям
- Позволяет решать задачи вроде перевода по прямой текстовой инструкции
Выравнивание (Alignment) с помощью RLHF
- Модель дообучают с подкреплением, используя обратную связь от людей или других моделей (LLM-as-a-judge)
- Цель — сделать выводы модели безопасными и соответствующими ожиданиям
Полный цикл обучения большой модели занимает месяцы и требует огромных ресурсов.
Эффективная адаптация LLM к задачам
Для адаптации LLM к конкретным задачам есть три основных подхода: дообучение (fine-tuning), промптинг и дистилляция. Когда ресурсы ограничены, особенно эффективны методы PEFT.
LoRA (Low-Rank Adaptation)
- Идея: Не меняем исходные веса модели, а добавляем к ним низкоранговую поправку
- Как работает: Для линейного слоя с матрицей
Wвводим разложениеW_new = W + A * B, гдеAиB— маленькие обучаемые матрицы - Преимущество: Обучаются в сотни раз меньше параметров, чем при полном дообучении, при этом качество почти не страдает
(Soft) Prompt Tuning
- Идея: Обучаем не модель, а специальные "мягкие" векторы (промты), которые добавляются ко входу
- Как работает: Векторы-промты обучаются градиентами под конкретную задачу, "конденсируя" в себе нужные инструкции
- Преимущество: Одна модель может использоваться для многих задач путём подстановки разных обученных промтов
Практическая рекомендация: Начинайте с простого промптинга (few-shot), если не хватает — переходите к Prompt Tuning, и только затем к LoRA.
Дистилляция знаний (Knowledge Distillation)
Дистилляция — это процесс передачи знаний от большой, сложной модели-«учителя» к меньшей модели-«ученику».
Классический подход (Hinton, 2015):
- Ученик учится не на жёстких метках, а на "мягких" вероятностях, которые выдаёт учитель
- Это позволяет ученику уловить сходства между классами (например, что Mercedes и BMW похожи больше, чем Mercedes и гриб)
Современный подход (генерация синтетики):
- Большая модель-учитель генерирует синтетические данные (тексты, переводы)
- На этих данных обучается компактная модель-ученик
- Важно: Синтетические данные нужно верифицировать
Проблемы и стратегии для малоресурсных языков
Малоресурсные языки страдают от нехватки данных и неэффективной токенизации (текст разбивается на слишком много коротких токенов, что снижает скорость и качество работы).
Стратегия работы
Работа с языками, для которых мало данных (например, абхазский), требует системного подхода:
- Поиск данных — найти существующие датасеты или модели, которые уже умеют работать с этим языком.
- Планирование оценки — сначала определить, как будет измеряться качество модели, построить пайплайн валидации.
- Итеративное обучение — начинать с простых моделей и постепенно их усложнять:
- Сначала обучить базовую модель.
- Затем дорабатывать: fine-tuning, LoRA и т.д.
- Каждый шаг должен показывать изменение итогового результата.
Технические решения
- Дообучение токенизатора и эмбеддингов: Добавление новых, частотных для языка токенов в словарь и обучение для них векторных представлений
- Использование родственных языков: Если данных для целевого языка мало, можно использовать данные и токенизатор похожего, более ресурсного языка
- Синтетические данные: Генерация данных с помощью больших моделей-переводчиков (например, NLLB) или языковых моделей
Использование открытых вычислительных ресурсов
Можно обучать модели даже с минимальными ресурсами, используя открытые платформы:
- Google Colab (бесплатные T4)
- Kaggle (например, ~60 часов GPU в неделю/месяц)
- Hugging Face (предоставляет небольшие ресурсы)
Важно: Не рекомендуется злоупотреблять бесплатными ресурсами, чтобы они оставались доступными для всех.
Кейс: Межславянский язык
Задача: Создать искусственный межславянский язык, понятный носителям разных славянских языков.
Решение (проект Салавата Гильфулина):
- Сбор данных: Использовали разнородные данные (книги, словари, песни) общим объёмом ~200 Мб.
- Выравнивание данных: С помощью инструментов вроде
lingtrainвыровняли параллельные тексты на разных языках. - Использование моделей: Применили модель перевода NLLB (поддерживает ~200 языков, включая 13 славянских) для аугментации данных и верификации.
- Обучение на ограниченных ресурсах: Первые итерации модели обучались на бесплатных ресурсах (Google Colab).
Вывод: Комбинация аккуратного сбора данных, использования предобученных моделей и эффективных методов позволяет создавать решения для малых языков даже с ограниченным бюджетом.
Организация экспериментов и лучшие практики
- Воспроизводимость — критически важно логировать каждый эксперимент, чтобы понимать, какой код и с какими параметрами дал результат. Избегайте хаотичной работы в Jupyter Notebook.
- Инструменты — для управления зависимостями можно использовать современные инструменты (Poetry, UV).
- Не изобретать велосипед — прежде чем придумывать своё, нужно изучить существующий опыт сообщества и строить решение на его основе.
Итоговые выводы
- Не спешите дообучать модель. Сначала попробуйте few-shot промптинг или prompt tuning.
- Для эффективной адаптации используйте методы PEFT (LoRA, Prompt Tuning), особенно когда данных или ресурсов мало.
- Дистилляция — мощный инструмент для создания компактных моделей под конкретную задачу.
- Работа с малоресурсными языками требует творческого подхода к данным: дообучение токенизатора, использование синтетики и родственных языков.
- Всегда валидируйте пайплайн, особенно при работе с синтетическими данными или дообучением, чтобы избежать переобучения.
- Действуйте стратегически и итеративно, используя накопленные знания сообщества. Даже с ограниченными ресурсами можно добиваться значимых результатов в NLP.
Примечание: Участникам предлагаются практические задачи по машинному переводу (включая работу с абхазским языком). Лучшие решения будут разобраны, а авторов пригласят на конференцию Яндекса.