Skip to content

Final project for Tinkoff Fintech School. Bot for generating jokes

Notifications You must be signed in to change notification settings

e1four15f/TFS19s-NLP-Jokes

Repository files navigation

TFS19s-NLP-Jokes

По мотивам поста запилить бота, который шутит шутейки.

План проекта

1. Сбор данных (Alexandr Yu., Vasily Karmazin)

дедлайн до 8 апреля

Сбор шутейк из vk.com, bash.im, 2ch.hk и других подобных ресурсах

2. Препроцессинг данных (Alexandr Yu.)

дедлайн до 8 апреля
  • Обработка полученных данны
  • Удаление мусора
  • Нормализация текста - если кто-то будет делать word based seq2seq, то он сделает нормализацию и токенизацию как он считает нужным

3. Создание архитектуры проекта (Alexandr Yu., Vasily Karmazin)

дедлайн до 21 апреля

Изучение дополнительного материала

4. Эксперимент 1. LSTM/RNN, Seq2Seq (Alexandr Yu.)

дедлайн до 15 апреля

Построение простой модели и оценка её качества

5. Эксперимент 2. Attention (Aexandr Yu., Vasily Karmazin)

дедлайн до 19 апреля

Добавление attention-а к модели

6. Эксперимент 3. Language Model, ULMFiT (Alexandr Yu., Vasily Karmazin)

дедлайн до 21 апреля

Изучение сложных архитектурных моделей, попытки использовать transfer learning в проекте

-1. (опционально) Телеграмм бот (Vasily Karmazin)

дедлайн до 21 апреля

Создание телеграмм бота для удобства демонстрации проекта

Результаты

Эксперимент 1. LSTM/RNN, Seq2Seq

Обучили языковую модель с совмещённым енкодером и декодером на данных, которые удалось найти в vk. В датасете примерно 7к коротких шуток

Использовали двухслойную LSTM со скрытым слоем в 256. Для букв используются эмбединги размерности 128. Предсказания делаются на основе Beam Search с шириной поиска в 5

Обученную модель можно скачать тут

Для запуска достаточно распаковать модель рядом с ноутбуком Runner и выполнить клетки

Примеры работы модели. В данном варианте, для генерации шуток подаём модели рандомную строку

весилый знакомств.
отецмирное владите, где нельзя навтольюмия,что иминуется,
мни будешь заблудчный


сейческин студентов.ребральных футболщины!
препысняли, изолиланы, приобрести противолноршкий балы...


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


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


второгламный женщины, нертывалку предлагает психболу, нибедет рекламент:
3. бум"греточным, населенное зронят
залагивались...

Эксперимент 2. Attention

Спарсили anekdot.ru и наш датасет увеличился до примерно 55к шуток

Использовали textgenrnn, где реализован механизм attention-а

Модель с rnn_layers=4, layer_size=128, dim_embeddings=100

Длительность обучения - 15 эпох, ~ 3 часа в colab’е

Температура 1.0

плюх проезжают?
— Да, блин, не знаю! Белые!"
"Вовочку оставляют студент на вструге, без норковки. Не русский. 
Нашлюсь, мне бы долге после смелых джинс


Лиса . 
Американец ниобй же поняли, как этого я в обородной мосту? 
! Два груд, умоляют на свете. 
После звездной жены для десяти управляющее зрение..


на сват.
– А её поправим полоса?
— Сверху гад!
— А после смерток это выбросимых тихонь в Россию.
Итак, был батя руку. Стеколада одевают деньги и начал

Температура 0.6

Федро включается 250 мальизма, 
и абрикор: 
- Вы выжили!.. Петя любой жил!
Бесзит тоже находится зелёный, и непонятно не налился?
- Ну идет!"
"Больно 


т, что ты делаешь к отцу французской стихонный заботный штанг. 
- Кракать! Сейчас на автосроде.
- Похож?
- А, клавок.
- А че?
- Да вот, однадцать оста


ассказал, но я хочу писать купить такой смысленный любими, но везем рока
- Нет, тебе «Сосед»? А что с телефонными?
- Всё молотовой 
фиговическом деле

Эксперимент 3. Language Model, ULMFiT

Попробовали использовать уже обученную на русских текстах языковую модель и затрансферить её на наш датасет

Использовали библиотеку fastai и обученную AWD-LSTM модель как базовую

Получили word based модель

Длительность обучения - ХХХ эпох, ~ ХХХ часов в colab’е

Температура 1.0

- дочка , я умираю ! 
  - сыночек , что жизнь не беспокоит . 


анекдоты про папу 
 
один мужик в первый раз спрашивает показал домашнего соседа : 
- дедушка мой , килограммов 100 баксов . 
- а где ты мечтаешь 
- спросил ответил . 
- что такое 
- отойдем в спальню . 
- пойдем в эту квартиру вызывал отец а была б можешь бумагой , ну 
- у нас с тобой тёща не работает . 


вовочка кавказец вовочка , за что ты хочешь стать инженером 
вовочка почему это потому , что его ни училка , ни урок 
дальше не считаю преподавал 

Температура 0.6

в связи с массовым строительством в россии платных дорог , 
многие жители москвы решили отказаться от поездки на отдых в отпуск .


- вовочка , а у тебя что , с ума сошел вовочка , 
ты же не знаешь , что такое " девятка " ну , она же у тебя была одна . 


в аптеке жена спрашивает у продавщицы скажите , 
пожалуйста , а что у вас есть таблетки от насморка ! 
как вы догадались , что у вас есть таблетки от насморка .

Телеграмм бот

Команды бота

/joke (/j) - генерация шуток (ULMFiT AWD-LSTM)
/joke_t (/jt) {temperature} - генерация шуток с температурой [0.1, 1.0]
/joke_w (/jw) {words} - генерация шутки по начальным словам
/joke_exp1 (/je1) - генерация шуток моделью из первого эксперимента (LSTM)
/joke_exp2 (/je2) - генерация шуток моделью из второго эксперимента (textgenrnn)
/joke_exp2_t (/je2t) {temperature} - генерация шуток с температурой [0.1, 1.0] (textgenrnn)
/help (/h) - помощь
/about (/a) - об авторах
Примеры:
/joke_t 0.8
/joke_w Решил я сделать бота шутника, а он
/je2t 0.4

Для запуска бота нужно предварительно скачать модели в папку data. Скачать наши модели можно тут

Мы запускаем бота через colab, инструкции есть в colab_runner.ipynb. Можно запустить бота на локальной машине командой:

!python3 shutki_bot.py -t {TOKEN} [-p {path_to_data}]

Где TOKEN - это токен для доступа к HTTP API бота

About

Final project for Tinkoff Fintech School. Bot for generating jokes

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published