- Сделайте закрытый репозиторий
- Используйте этот репозиторий как template, воспользуйтесь инструкцией
- Добавьте в репозиторий команду курса
- Установите зависимости с помощью команды
pip install -r requirements.txt
- Сделайте задание
- Отправьте ссылку на репозиторий преподователю @BobaZooba
В этой домашке мы будет классифицировать твиты на 3 тональности.
Вы будете использовать предобученные эмбеддинги слов, так что для начала обязательно нужно посмотреть туториал по их использованию.
Вам предстоит реализовать такую модель:
Что она из себя представляет:
- Мы подаем в нее индексы слов
- Переводим индексы слов в эмбеддинги
- Усредняем эмбеддинги
- Пропускаем усредненные эмбеддинги через
Multilayer Perceptron
В этой домашке вам предстоит:
- Реализовать модель
- Обучить ее
- Понять хорошо ли вы это сделали
Это очень важная модель, потому что она очень простая и показывает достаточно высокие метрики. В дальнейшем на работе советую использовать такую модель как бейзлайн. И в качестве эмбеддингов слов взять эмбеддинги от берта/роберты/тд.
Используйте слои: nn.Linear
, nn.BatchNorm
, nn.Dropout
и тд.
- Реализовать skip-connection (residual connection) в линейном слое
- Написать свой слой, в котором будут (порядок слоев ниже напутан, так что сами подумайте в каком порядке стоит расположить эти слои) :
Dropout
BatchNorm
/LayerNorm
Residual
, если вы не меняете размерность векторов- Функция активации
- Линейный слой
- Использовать токенизатор и слой эмбеддингов от предобученного трансформера из библиотеки
transformers
- Сделать усреднение эмбеддингов с учетом падов
- Мы используем пады, чтобы сделать единую длину последовательностей в батче
- То есть у нас максимальная длина в батче, например, 16 токенов, поэтому ко всем последовательностям, у которых длина ниже мы добавляем
16 - len(sequence)
падов
- То есть у нас максимальная длина в батче, например, 16 токенов, поэтому ко всем последовательностям, у которых длина ниже мы добавляем
- То есть получается так, что усредненный вектор предложения зависит от максимальный длины в батче, потому что
- Среднее вектора
[1, 2, 3]
будет2
. Среднее вектора[1, 2, 3, 0, 0]
будет1.2
- Получается, что усредняя с падами мы получаем "неправильный" вектор
- Среднее вектора
- То есть наши предсказания будут зависеть от того сколько падов у нас есть в предложении
- Когда мы будем использовать нашу сетку в реальном процессе, скорее всего, мы будем подавать в нее по одному примеру, где падов не будет
- То есть получается мы будем использовать нашу модель не в той же среде, как и обучали
- Потому что наши входы меняются, мы не используем пады, результат усреднения другой
- Это называется
distribution shift
, то есть когда мы учимся на одних данных, а используем на других- Это не всегда плохо, потому что иногда только так мы и можем учиться, например, когда мало данных нужного домена
- Это плохо тогда, когда мы вносим это "случайно", например, как с неправильным усреднением, то есть это своебразный баг
- То есть получается мы будем использовать нашу модель не в той же среде, как и обучали
- Мы используем пады, чтобы сделать единую длину последовательностей в батче
Будет проверяться корректность логики обучения, будут даваться комментарии что нужно исправить, если домашка будет сдана вовремя. Максимальный балл: 10.
03/10/2022
Далее максимальный балл за работу: 7
- Не отправляйте ссылку на
colab
- Прежде чем отправить задание на проверку, очистите свой код от неиспользоваемого кода и неважных комментариев