Skip to content

Instantly share code, notes, and snippets.

@pavlov200912
Last active April 11, 2020 19:23
Show Gist options
  • Save pavlov200912/94575e7be0c20f4391fa869d56bbe78e to your computer and use it in GitHub Desktop.
Save pavlov200912/94575e7be0c20f4391fa869d56bbe78e to your computer and use it in GitHub Desktop.
Отчет по проекту ассистент поэта. Автор Павлов Иван.

Отчет по проекту Ассистент поэта

0. О команде.

Руководитель проекта - Владимир Кукушкин

Я - Павлов Иван и мой партнер по команде - Егор Постников - студенты СП, второго и первого курса соответственно.

1. Глобальная задача

Необходимо разработать инструменты для облегчения процесса написания стихов. Часто сложно подобрать рифму или соблюдать размер, наш проект должен в этом помочь. Основной инструмент при создании данного проекта - NLP (Natural Language Processing). Генерация стихов на русском языке не новая задача в NLP, но каждый раз команды делают это по-разному. Какие-то свои фишки есть и у нас.

Проект скорее учебный, но от этого не становится менее интересным. Наверное, настоящие гении поэзии не нуждаются в помощи от железяк, и полноценным ассистентом наша программа стать не сможет. Зато будет интересно посмотреть, какие стихи сможет генерировать наша модель, и что нам хочет сказать компьютер, почитав, например, Пушкина.

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

2. Текущий результат

В команде я занимаюсь нейронными сетями и моделью. На текущий момент готова MVP модель и ее окружение для генерации стихов. Т.е какие-то стихи уже можно получить, правда пока они не очень осмысленны. Но вы можете заметить, что машина соблюдает размер (в данном случае 3-стопный Хорей) и пытается подбирать кольцевую рифму.

Земли чаш своей 
Нужен надо мною. 
Пусть очей морфей, 
Как меня тобою. 

Расскажу подробнее, что я сделал.

  • Первым шагом было создание word-level модели, генерирующий текст на русском языке
  • После этого я разбирался в "стиховедении", а именно в понятии размера стиха, нужно было объяснить машине, как его соблюдать.
  • Сделал класс, руководящий размером и прикрутил его к модели, теперь она говорит в лад.
  • Прикрутил простейшую рифмовку, получились первые стихи
  • Работал над лучевым поиском - улучшением для алгоритма выбора нужных слов моделью

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

Трудности

Лучевой поиск оказался очень сложным в реализации, пришлось несколько раз переписывать его. Проблема в том, что это не обычный лучевой поиск, как в других задачах NLP, здесь мы используем лучевой поиск при создании стиха. Это значит, что каждый луч должен иметь свой контекст стиха: текущий размерный рисунок, последовательность выбранных слов, место слова в строке и номер генерируемой строки. В общем, пришлось повозиться.

Кроме этого, модель получилось сделать не очень хорошую. Она подходит, как базовая, но ее качество очень низкое. С этим пока проблемы.

3. Горизонты

Нам еще предстоит сделать качественную языковую модель. Это совсем не новая задача, но простого и единого алгоритма для ее решения нет. Сейчас модель сильно переобучена, генерирует некачественные word2vec, да и про грамматику ничего не знает. Мне понятно, что нужно делать для ее улучшения, но это еще много работы.

Кроме этого, нам нужно соединить мои наработки и Егора. Он с руководителем занимался фонетикой и рифмовкой, это нужно соединить с моделью, после этого качество рифмовки и стихов улучшиться.

4. Технологии

Весь код проекта написан на Python. Я использовал классические библиотеки для NLP: nltk и Keras, а также уже предобученную модель Ильи Гусева, автора статьи про очень похожую задачу. Эта модель используются для проставления ударений в словах, пока мы не написали свою функцию для этого. Внутри языковой модели используются такие нанотехнологии из области NLP, как LSTM и embeddings.

5. Работа

Мы каждую неделю встречаемся командой по видеосвязи. Обсуждаем сделанное и планируем задачи на следующую неделю. Руководитель хочет, чтобы каждую неделю нами было сделано что-то ощутимое для проекта. Мы стараемся. Общения с руководителем хватает. Он чаще объясняет что-то Егору, но я тоже могу написать ему и спросить что-то про задачу или способы ее реализации. Мне кажется, у нас получается продуктивно. Наверное, продуктивнее, чем в проекте в котором я участвовал в прошлом семестре.

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

Наглядясь студеною низвергну, изменилась.
Наглядясь слезах ученье, пригорюнясь.
Помрачил бесстыдны войны, сжальтесь!
Скачущих лягушкою запекшеюся, наглядясь.

Если долго на него смотреть, можно найти множество смыслов.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment