/GenerativeChitChat

3-rd homeword

Primary LanguageJupyter Notebook

Generative Chit Chat

Как сделать домашку

  • Склонируйте этот репозиторий
  • Установите зависимости
  • Сделайте задание
  • Пришлите @bobazooba в телеграм ссылку

Описание задания

Можно объединяться в группы из двоих человек. Нужно будет реализовать генеративную модель для ответов на вопросы. В качестве датасета будем использовать вопросы-ответы из сервиса Ответы@Mail.ru.
Данные, которые можете использовать для обучения:

Советую использовать не все данные. Вы можете их пофильтровать. Оптимально, чтобы на одна эпоха обучения для обычной LSTM у вас занимала не больше часа. Вам нужно будет обучать модель на GPU. Научиться работать на GPU, вам поможет это видео.

Вам очень поможет этот туториал про языковую модель.

Что нужно сделать:

  1. Написать Dataset для задачи seq2seq
  2. Разделить данные на тренировочные и валидационные
  3. Реализовать модель
  4. Сделать цикл обучения
  5. Обучить модель
  6. Реализовать метод генерации ответа по вопросу с помощью вашей модели
  7. Обернуть это в телеграм бота используя скрипт telegram.py (скоро будет дописан)

Важный совет

Для отладки возьмите небольшой объем данных. Такой, чтобы обучение не занимало больше 10—30-ти минут. Это поможет вам гораздо быстрее итерироваться. Допустим, у вас баг в инференсе модели. Вы обучаете ее 5 часов, а затем пробуете что-нибудь сгенерировать. У вас не получается, вы понимаете где ошиблись. Теперь, чтобы исправить этот баг, вам нужно еще 5 часов обучать сетку. Такой подход занимает много времени, поэтому лучше выбрать небольшой кусок данных, обучиться на нем, написать функцию, которая генерирует ответ и проверить все ли адекватно работает для 30-ти минут обучения. Если модель будет отдавать совершенно рандомные токены в ответе, то значит есть проблема. В другом случае этих 30-ти минут маленькой модели хватит для того, чтобы не выдавать рандом. Да, этого мало и модель будет плохо отвечать, но она будет хоть как-то отвечать и вы сможете понять что именно не так.
Рекомендуемые действия:

  • Написать пайплайн обучения (датасет, модель, трейнлуп, валидация, генерация ответа по вопросу)
  • Обучать в течение 30-ти минут
  • Проверить генерацию ответа по вопросу, то есть нужна такая функция, на вход которой приходит текст и результат этот функции тоже текст (ответ на вопрос)
  • Проверить простые случаи (учитывайте домен данных), можно посмотреть на то как модель отвечает на вопросы из валидации и сравнить на глаз с ответами из датасета
  • Если все хорошо, поставить модель учиться на пару часов, если нет, то проверить:
    1. Функцию генерации ответа
    2. Dataset, есть ли там BOS и EOS в данных или еще какие-нибудь баги
    3. Проверить модель
    4. Проверить трейнлуп

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

Необязательно реализовывать все

  1. Сделать модель, основанную на lstm/gru 6 баллов
  2. Сделать модель, основанную на cnn 10 баллов
  3. Сделать модель, основанную на трансформере (реализовать все слои самому) 10 баллов
  4. Добавить в rnn/cnn модель attention 5 баллов
  5. Реализовать жадное семплирование (генерацию по самому вероятному токену, как в туториале про языковую модель) 3 балла
  6. Реализовать beam search 5 баллов
  7. Реализовать nucleus sampling 5 баллов
  8. Добавить condition (в первом датасете дается еще тема вопроса) в модель 3 балла
  9. Добавить layer norm/residual в cnn или rnn модель 2 балла
  10. Реализовать аккамуляцию градиентов 3 балл
  11. Сделать телеграм бота 1 балла

Дополнительные детали:

Сделать модель подразумевает весь код с обучением и генерацией ответа по аналогии с языковой моделью.
6-й пункт: у нас есть категория вопроса и мы можем явным образом добавить эту информацию в модель. Затем мы сможем задавать вопрос из любой категории, а отвечать таким ответом, которой больше будет соответствовать категории (которую мы сможем сами задать в модель). То есть на этапе предсказания мы задаем сети вопрос и категорию ответа, то есть в каком стиле наша сеть должна ответить. То есть должно получиться что-то такое:

Вопрос пользователя:
    Что мне делать с моей девушкой? она плохо себя ведет

Задаем категорию:
    Авто
Ответ модели:
    Сдайте ее в техосмотр

Задаем категорию:
    Сад и огород
Ответ модели:
    Вам нужно лучше ее поливать

7-й пункт:
Статья: https://arxiv.org/pdf/1904.09751.pdf
В помощь: https://huggingface.co/blog/how-to-generate

Установка зависимостей

Необходимые сторонние библиотеки
pip install -r requirements.txt

Оценивание

Будет проверяться корректность логики обучения, будут даваться комментарии что нужно исправить, если домашка будет сдана вовремя. Максимальный балл: 10.

Дедлайн

24/12/2021
Далее максимальный балл за работу: 7

Важные просьбы

  • Не отправляйте ссылку на colab
  • Прежде чем отправить задание на проверку, очистите свой код от неиспользованного кода и неважных комментариев

Примеры генерации

Вопрос: автомобиль стоит в гараже на нем не кто не ездиет, что делать чтобы в дальнейшем не было проблем
Ответ: не ездить на машине

Вопрос: почему иногда дети (почти всегда) готовы послушать мнение кого угодно только не родителей, ведь родители это именно те
Ответ: потому что родители не могут быть объективными

Вопрос: посоветуйте диету для похудения. я хожу в тренажерку 3 раза в неделю. посоветуйте диету для похудения.
Ответ: не есть после 18.00

Вопрос: салават юлаев сыграл третий подряд матч не пропустив ни одной шайбы и забил 15..в нхл бывали такие случаи?
Ответ: да было такое

Вопрос: чем взрослее становится человек, тем.. . (закончите фразу)
Ответ: тем становиться больше

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

Вопрос: элеутерококк, не эффективен?...
Ответ: я не пила и очень помогает

Вопрос: если очень-очень хорошо попросить, то человек сделает это?
Ответ: если просить помощи, то да

Вопрос: улыбаться??? один хрен.. наши проблемы никого не волнуют)))???
Ответ: а я улыбаюсь

Вопрос: что почитать? мне 10.
Ответ: почитай стивена кинга

Вопрос: вы всё ещё верите... в чудо?
Ответ: чудеса бывают разные

Вопрос: мир вам, возлюбленные! вы ищете мудрости и стремитесь стать мудрыми?
Ответ: а я уже давно не ищу.

Вопрос: остекленение балкона 37 тыщ. р. (с установкой) это дорого?
Ответ: смотря в каком регионе

Вопрос: сколько стоит мотор
Ответ: смотря какой у тебя бюджет

Вопрос: какой самый глупый вопрос задаёт мужчина женщине?
Ответ: что ты куришь?

Вопрос: чё творится с людьми!!!?
Ответ: а что с ними происходит?

Вопрос: если человек в ответ на вежливое и добродушное обращение хамит и грубит (неоднократно), это что такое?
Ответ: это значит что он хочет тебя послать

Вопрос: вопрос к психологу) от куда у меня тяга к шансону?)
Ответ: а ты не лезь в эту хрень

Вопрос: а где же спрятались наши обворожительные мужчины?)))
Ответ: в голове и в голове

Вопрос: что мне делать,потерялся интерес к жизни,в мои то15 лет,странно не правда ли?жизнь и дальше будет такой скучной?(((
Ответ: а что ты хочешь найти в жизни????

Вопрос: нашел автомобильный колпак, который кстати меня чуть не прибил(отлетел в меня)) что мне теперь с ним делать???
Ответ: если не умеешь ездить, то не лезь.

Вопрос: что вы сами ну никак не можете увидеть?)
Ответ: то, что я вижу в зеркале

Вопрос: что может сохранить современную семью, если в ней нет любви?
Ответ: любовь и уважение

Вопрос: как найти друзей на улице?
Ответ: в интернете ищи

Вопрос: как поддерживать обьективное восприятие реальности?
Ответ: не надо быть в реальности.

Вопрос: как поставить на место евродверь балконного блока, которая "слетела" верхним углом с пазов?
Ответ: а зачем вам это?

Вопрос: кот в истерике, в чем проблема?
Ответ: он не понимает что он не понимает

Вопрос: для вас работа смысл жизни или как у меня--вырванный из жизни кусок? для меня это только способ заработать деньги !
Ответ: работа для меня работа, работа и работа

Вопрос: как вы придумываете вопросы?)?)?)?)?))))))))))))))) а то что то в голову ничего не лезет, трезвая жизнь она очень трудна
Ответ: а я не спрашиваю зачем мне это надо?

Вопрос: может девяточку на зиму прикупить?
Ответ: а почему бы и нет!

Вопрос: как понять женщин? то они не хотят то они хотят?
Ответ: а ты не знаешь как они хотят

Вопрос: случайностей не бывает?
Ответ: случайность - это не случайность.

Вопрос: может ли сумбурное начало привести к логическому продолжению?)
Ответ: если это не математика, то почему бы и нет?

Вопрос: солнышки, заиньки и просто женщины
Ответ: и тебе того же

Вопрос: что красиво смотрится со стороны?)
Ответ: смотря что ты предпочитаешь

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

Вопрос: правда классно, всем всего наобещать и ничего не сделать?:))
Ответ: ну если ты не знаешь что делать - то не стоит

Вопрос: что можно сделать на вечер? сладкое что то.
Ответ: фруктовый салат, оладьи с сахаром и бананами

Вопрос: как вылечить секущиеся волосы
Ответ: в аптеке продается шампунь для волос

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

Вопрос: что будет если артистам "звёзды на льду" вместо коньков выдать ласты ?
Ответ: а что такое ласты?