Решение основано на простом алгоритме генерации стихотворения:
- Берем случайное стихотворение поэта из его собрания сочинений
- Последовательно заменяем слова в стихотворении на те, которые
- похожи по звучанию (по ударению, число слогов, окончанию)
- близки заданной теме (по близости word2vec векторов, обученных на русском текстовом корпусе)
- Объявляем полученный результат замены слов — произведением алгоритма
Решение реализовано на Python 3 с использованием библиотек:
Flask
: веб-серверnumpy
,scipy
: работа с векторами и расстояниямиnltk
: токенизация предложенийgensim
: работа с word2vec модельюpymystem3
: лемматизация слова
Решению для работы необходимы наборы данных:
data/word_accent.json.bz2
— словарь ударений (идет в архиве с решением)classic_poems.json
— собрания сочинений поэтов от организаторовsdsj2017_sberquad.csv
— набор данных для обучения вопросо-ответной системы из Sberbank Data Science Journey 2017rusvectores/web_upos_cbow_300_20_2017.bin.gz
— предобученная word2vec модель для русского языка (источник http://rusvectores.org/ru/models/)
При локальном тестировании, общедоступные наборы данных должны лежать в каталоге /data/
(в корне репозитория).
Описание используемой word2vec модели RusVectores можно найти в публикации:
Kutuzov A., Kuzmenko E. (2017) WebVectors: A Toolkit for Building Web Interfaces for Vector Semantic Models. In: Ignatov D. et al. (eds) Analysis of Images, Social Networks and Texts. AIST 2016. Communications in Computer and Information Science, vol 661. Springer, Cham