/skillfactory-transformers

Project made for course NLP-engineer

Primary LanguageJupyter Notebook

Этот раздел закрепляет на практике понимание архитектуры "трансформер", которая была предложена группой исследователей из Google в 2017 году в статье Attention Is All You Need.

Трансформер и его модификации получили широкое распространение в задачах NLP (BERT, ALBERT, RoBERTa, GPT, GPT-2, GPT-3, ruGPT-3, Turing-NLG, Switch Transformer, EFL, Reformer, T5 и много других). Языковые модели, основанные на трансформерах, способны генерировать тексты, почти неотличимые от написанных человеком. Трансформеры также начинают активно использоваться в компьютерном зрении (ViT, HRNet, SwinIR и др., см. также здесь и здесь), в мультимодальных сетях, связанных одновременно с изображениями и текстом (CLIP, DALL-E, Wu Dao и др.), и даже в предсказании структуры белков (AlphaFold2). Более того, есть работа, показывающая, что трансформер может претендовать на роль универсальной архитектуры для одновременного решения самых разных задач.

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

  1. Материалы обучающего модуля курса NLP-инженер
  2. Научную статью Attention Is All You Need (англ.)
  3. Статью The Illustrated Transformer (англ.) и перевод на Хабре
  4. Часть обучающего курса про трансформеры от Лены Войты (англ.)
  5. Практику по трансформерам от UvA Deep Learning Tutorials (англ.)
  6. Экспертов поддержки в Slack, которым без вас скучно :)

Вы также можете прочитать Детальное описание устройства трансформера от автора данного раздела.

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

Примечание: мы будем говорить о "стандартном" трансформере - в том виде, в каком он описан в обучающем модуле и в статье Attention Is All You Need.

Вопрос 1

Выберите верные утверждения:

  1. Энкодер трансформера принимает на вход последовательность векторов (имеется в виду один пример в батче)
  2. Энкодер трансформера выдает массив того же размера, что и получил на вход
  3. Декодер трансформера выдает меньше векторов, чем принял на вход
  4. В декодере трансформера 7-й входной вектор никак не влияет на 5-й выходной вектор

Ответы: да, да, нет, да

Вопрос 2

Какие из перечисленных низкоуровневых операций используются в трансформере?

  1. Матричное умножение
  2. Скалярное произведение
  3. Функция активации ReLU
  4. Функция softmax

Ответы: да, да, да, да

Вопрос 3

Механизм scaled dot-product attention принимает на вход одновременно три массива: запросы Q, ключи K и значения V. Выберите верные утверждения:

Примечание: теорию см. здесь.

  1. Размерность ключа равна размерности значения
  2. Размерность значения равна размерности запроса
  3. Размерность запроса равна размерности ключа
  4. Количество ключей равно количеству значений
  5. Количество значений равно количеству запросов
  6. Количество запросов равно количеству ключей

Ответы: нет, нет, да, да, нет, нет

Теперь давайте перейдем к написанию кода. Вам предлагается поработать с ноутбуком, в котором есть три смысловые части:

  1. Изучаем scaled dot-product attention
  2. Изучаем блок трансформера
  3. Изучаем трансформер целиком (только энкодер) и пробуем его обучать

В ноутбуке есть ответы ко всем заданиям :)

Скачать ноутбук

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