Этот конспект не сохранится

Закроешь вкладку — потеряешь. Зарегистрируйся — и он будет в библиотеке навсегда.

Telegram

Ваш конспект

YouTubeТренировка Data Dojo. Лекция №2: Малоресурсный перевод

🎯 Большие языковые модели и малоресурсное обучение

🔍 Что такое LLM?

Большая языковая модель (LLM) — это модель, которая предсказывает распределение вероятностей следующего токена (слова) на основе всего предыдущего контекста. Это основа для GPT, BLOOM и других современных моделей.

Важные аспекты:

  • Модель видит на входе набор векторов (эмбеддингов), полученных из текста
  • Каждый следующий токен генерируется с учётом всей предыдущей последовательности
  • Поведение модели можно менять, не трогая её веса, через манипуляции с входным контекстом

🚀 Как обучаются LLM?

Обучение проходит в три ключевых этапа:

  1. Предобучение (Pretraining)

    • Модель учится на огромных корпусах текстов, предсказывая следующий токен
    • Из одного абзаца можно получить сотни обучающих примеров
  2. Инструктивное обучение (Instruction Tuning)

    • Модель дообучают на парах "инструкция — ответ", чтобы она лучше следовала указаниям
    • Позволяет решать задачи вроде перевода по прямой текстовой инструкции
  3. Выравнивание (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 и гриб)

Современный подход (генерация синтетики):

  • Большая модель-учитель генерирует синтетические данные (тексты, переводы)
  • На этих данных обучается компактная модель-ученик
  • Важно: Синтетические данные нужно верифицировать

🌐 Проблемы и стратегии для малоресурсных языков

Малоресурсные языки страдают от нехватки данных и неэффективной токенизации (текст разбивается на слишком много коротких токенов, что снижает скорость и качество работы).

🧩 Стратегия работы

Работа с языками, для которых мало данных (например, абхазский), требует системного подхода:

  1. Поиск данных — найти существующие датасеты или модели, которые уже умеют работать с этим языком.
  2. Планирование оценкисначала определить, как будет измеряться качество модели, построить пайплайн валидации.
  3. Итеративное обучение — начинать с простых моделей и постепенно их усложнять:
    • Сначала обучить базовую модель.
    • Затем дорабатывать: fine-tuning, LoRA и т.д.
    • Каждый шаг должен показывать изменение итогового результата.

🛠️ Технические решения

  • Дообучение токенизатора и эмбеддингов: Добавление новых, частотных для языка токенов в словарь и обучение для них векторных представлений
  • Использование родственных языков: Если данных для целевого языка мало, можно использовать данные и токенизатор похожего, более ресурсного языка
  • Синтетические данные: Генерация данных с помощью больших моделей-переводчиков (например, NLLB) или языковых моделей

💻 Использование открытых вычислительных ресурсов

🔥 Можно обучать модели даже с минимальными ресурсами, используя открытые платформы:

  • Google Colab (бесплатные T4)
  • Kaggle (например, ~60 часов GPU в неделю/месяц)
  • Hugging Face (предоставляет небольшие ресурсы)

⚠️ Важно: Не рекомендуется злоупотреблять бесплатными ресурсами, чтобы они оставались доступными для всех.

📚 Кейс: Межславянский язык

Задача: Создать искусственный межславянский язык, понятный носителям разных славянских языков.

Решение (проект Салавата Гильфулина):

  1. Сбор данных: Использовали разнородные данные (книги, словари, песни) общим объёмом ~200 Мб.
  2. Выравнивание данных: С помощью инструментов вроде lingtrain выровняли параллельные тексты на разных языках.
  3. Использование моделей: Применили модель перевода NLLB (поддерживает ~200 языков, включая 13 славянских) для аугментации данных и верификации.
  4. Обучение на ограниченных ресурсах: Первые итерации модели обучались на бесплатных ресурсах (Google Colab).

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

⚙️ Организация экспериментов и лучшие практики

  • Воспроизводимость — критически важно логировать каждый эксперимент, чтобы понимать, какой код и с какими параметрами дал результат. Избегайте хаотичной работы в Jupyter Notebook.
  • Инструменты — для управления зависимостями можно использовать современные инструменты (Poetry, UV).
  • Не изобретать велосипед — прежде чем придумывать своё, нужно изучить существующий опыт сообщества и строить решение на его основе.

✅ Итоговые выводы

  1. Не спешите дообучать модель. Сначала попробуйте few-shot промптинг или prompt tuning.
  2. Для эффективной адаптации используйте методы PEFT (LoRA, Prompt Tuning), особенно когда данных или ресурсов мало.
  3. Дистилляция — мощный инструмент для создания компактных моделей под конкретную задачу.
  4. Работа с малоресурсными языками требует творческого подхода к данным: дообучение токенизатора, использование синтетики и родственных языков.
  5. Всегда валидируйте пайплайн, особенно при работе с синтетическими данными или дообучением, чтобы избежать переобучения.
  6. Действуйте стратегически и итеративно, используя накопленные знания сообщества. Даже с ограниченными ресурсами можно добиваться значимых результатов в NLP.

Примечание: Участникам предлагаются практические задачи по машинному переводу (включая работу с абхазским языком). Лучшие решения будут разобраны, а авторов пригласят на конференцию Яндекса.