Лого vc.ru

Как работает «Яндекс.Автопоэт»

Как работает «Яндекс.Автопоэт»

Ведущий аналитик «Яндекса» Алексей Тихонов рассказал о создании «Автопоэта» — робота, который умеет автоматически составлять стихи в разных жанрах и из разного материала — из поисковых запросов и даже из заголовков новостей. Тихонов рассказал об алгоритме, который лежит в основе «Автопоэта», показал стихи, составленные по нестандартным материалам и написанные нейронной сетью в подражание известным поэтам, а также порассуждал о том, где проходит грань между творчеством человека и результатами компьютера.

Поделиться

Несколько лет назад я шутки ради сделал «Автопоэта». Когда я говорю «я сделал "Автопоэта"», надо понимать, что в этом процессе участвовало много разных прекрасных людей. В первую очередь, это Юра Зеленков, наш лингвист, чьи эвристики я использовал для построения фонетической транскрипции. Были и другие соучастники, например, в работе с нейронными сетями мне помогал Илья Едрёнкин, наш специалист по голосовым технологями. Но дальше я для простоты буду рассказывать от собственного имени.

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

Для начала дадим рабочее определение поэзии. Это вопрос сложный и философский, но нам сойдёт и что-то приблизительное. Предлагаю в широком смысле подразумевать под поэзией текст, который вызывает эмоции и оказывает эстетическое воздействие на читателя, а в узком смысле — тот же самый текст, но ещё и соответствующий определённым структурным требованиям (стопа, рифма, аллитерация и так далее). Заметьте, я ничего не говорю о чувствах автора и его богатом внутреннем мире — это довольно важный момент. То есть наша система содержит лишь текст как субъект воздействия и читателя как объект.

Далее я расскажу об автоматической генерации поэтических текстов, выделив три аспекта влияния текста на читателя — это смысл, структура и стиль. Такая декомпозиция довольно произвольна и, может быть, совсем не идеальна, но я выбрал её, поскольку мне представляется удобным построить дальнейшее изложение именно в таких терминах.

Смысл

Хорошая для человечества новость — в том, что качественная генерация невырожденных «смыслов» (например, сюжетов, сценариев или нарративов) пока остаётся уделом человека. Сейчас в мире идёт напряжённая научно-техническая работа в области задач «понимания» текста машиной. Уже есть весьма значительные успехи — например, машинный перевод, — но пока что понимать текст (или, скажем, отвечать на вопросы по тексту) человеку по-прежнему удаётся лучше, чем компьютеру (в отличие, скажем, от игры в го или классификации изображений).

Поэтому сегодня я не буду говорить про формирование смысла, но зато покажу несколько приёмов — они позволяют автоматически генерировать тексты, которые могут создавать у читателя ложное ощущение осмысленности. С другой стороны, почему ложное? В нашей системе из субъекта-текста и объекта-читателя ощутить смысл может только читатель — поэтому всякий смысл, который он ощущает, одинаково настоящий.

Структура

Разберёмся со структурой — эту часть поэзии достаточно просто формализовать. Во-первых, мы ожидаем, что стих состоит из последовательности строк, сгруппированных в строфы. Во-вторых, для этих строк должны выполняться некоторые ритмические условия. В силлабическом, тоническом, силлабо-тоническом и других стихах эти условия формулируются по-разному, но так или иначе всё сводится к оценке ударности и длительности каждого слога. В-третьих, может потребоваться некоторая фонетическая согласованность между разными строками — это, например, может быть рифма или аллитерация.

Таким образом, если мы умеем (а мы умеем) строить фонетическую транскрипцию произвольной строчки текста, то остаётся чисто техническая задача — написать алгоритм, который определяет, подходят ли две строки друг другу. Нам нужно построить фонетическую транскрипцию, посчитать слоги и определить длительность каждого из них, установить соответствие строки желаемому стихотворному размеру и проверить две строки на наличие взаимной рифмы. Если у нас есть очень много текстовых строк, мы можем их автоматически отфильтровать и составить случайные наборы, согласованные с точки зрения поэтической структуры.

Поисковые запросы

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

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

Часто правила обусловлены обратной связью: если поиск долгое время не находит нужного по тому или иному запросу, люди перестают его задавать и начинают спрашивать по-другому. Постепенно вырабатываются определённые коллективные привычки, своего рода пиджин. Появляются монструозные конструкции наподобие «смотреть онлайн бесплатно в хорошем качестве без регистрации без SMS». Но в редких, низкочастотных запросах по-прежнему видна настоящая человеческая жизнь:

  • [что повесить в квартире чтобы выйти замуж],
  • [тададададам хоккей мелодия],
  • [порно для нокии 320х240],
  • [красные трусы на люстре к любви отзывы],
  • [я так и думала что это ЧМ мы не выиграем].

За каждым подобным примером легко представить ту или иную жизненную историю. Часто в группу низкочастотных попадают детские запросы. Дети ещё не научились подыгрывать поиску: они не искажают и не упрощают свой язык и пишут запросы примерно так, как думают:
[что подарить девочке на восьмое марта недорого я ещё в школе учусь], [что делать если тебе 11 а ей 13].

Структурные эксперименты

За неделю поиск обрабатывает пару миллиардов запросов. Среди них можно найти строки в каком угодно размере: хорее, ямбе и так далее. Самые первые «стихи», которые сгенерировал Автопоэт, были белыми — я поставил фильтрацию с учётом стихотворного размера, но не требовал наличия рифмы:

пословицы-камертоны
посмертные медальоны
улыбчивый меланхолик
символика президента.

Затем «Автопоэт» научился рифмовать строки. Я придумал простейший алгоритм — решил сравнивать концовки фонетических транскрипций запросов, начиная от последнего ударного слога. Если концовки совпадают, можно считать, что строки рифмуются. Надо лишь убедиться, что мы не срифмовали слово само с собой. На удивление, такая простая эвристика оказалась вполне рабочей (хотя и может быть ослаблена). Вот пример простейшей рифмовки:

купить в москве ботинки
хочу к тебе картинки
игра плохие свинки
смотреть кино новинки.

На этом этапе я выложил «Автопоэта» во внутреннюю соцсеть «Яндекса». Посыпались идеи: давайте научим его генерировать хокку, порошки, пирожки, депрессяшки. Результаты этих наших экспериментов можно найти на yandex.ru/autopoet.

Эксперименты с материалом

Внезапный интерес к «Автопоэту» со стороны публики побудил нас продолжить эксперименты с разными подходами и массивами текстов. Коллеги из различных сервисов «Яндекса» приносили нам свои текстовые данные, чтобы мы их зарифмовали. Так, например, появилась рифмовка названий остановок из базы приложения «Яндекс.Транспорт»:

молодежный центр россия
комбинат стройиндустрия
академия футбола
старый рынок автошкола.

Мы воспроизвели и классическую шутку с рифмовкой числительных:

905 13 16
850 60
5 700 819
18 650.

В этом году на 1 апреля мы опубликовали стихи из заголовков российских новостей. Были и внутренние эксперименты — например, стихи на базе англоязычных поисковых запросов, а также перерифмовка строк известных поэтов (лимерики из Бродского и прочее). Так или иначе, со структурной составляющей практически все вопросы уже закрыты.

Стиль

Структурные характеристики формализовать достаточно просто. Куда сложней определить стиль текста и управлять им. Достаточно начитанный человек, скорее всего, сможет отличить стихотворение Пушкина от стихотворения Бродского, даже если он никогда не читал конкретно эти произведения. Но как формализовать принципы, по которым происходит такая идентификация?

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

Яркий пример больших успехов на этом поприще — приложение Prisma, которое много обсуждают в последнее время. Оно позволяет одним нажатием на кнопку стилизовать фотографию под того или иного известного художника. Тонкость состоит в том, что для обработки фотографий используются не классические фильтры, а нейросетевой подход. В последнее время он активно развивается. Похожие алгоритмы появились больше года назад, но в виде продукта выстрелила именно Prisma, поэтому я привожу её как пример.

Как это работает? Крайне упрощая, можно сказать, что некоторая математическая модель (нейросеть) была обучена воспроизводить стиль некоторого художника. Здесь очень важно, что она не сделана для подражания конкретному художнику, а именно обучена.

Мы берём эту модель и показываем ей много картин Мондриана — и она сама начинает копировать его стиль. Если мы возьмём ту же сеть и будем показывать ей Мунка, то она научится подражать Мунку. Нам не требуется объяснять, в чём состоит специфика стиля того или иного художника, чем Мунк отличается от Мондриана. Мы просто показываем нейросети разные картины, пока она сама не ухватит суть.

Этот же подход можно применить и к текстам. Примерно месяц назад специально под эту задачу мы собрали нейросеть, научили её строить фонетику и заставили «прочитать» очень много русской поэзии. Это длительный процесс — сеть обучается десятки дней. Затем, когда обучение закончено, можно запрашивать у неё случайные тексты в стилистике заданного автора. Вот несколько примеров:

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

* * *

на мне
на всех
что так сквозь сон
все ближе

и мне
ни разу не скажу
не видно где

откуда же тоска
что я умру в ночи
теперь с утра хоть

* * *

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

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

Структура и стиль

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

и взор смущенный уж нежданный
ее призывный приговор
все чувства ваши постоянный
мой холоден певец и вор

нет ты не знаешь ты не спросишь
но он душою обуян
ты не прочтешь и ты не бросишь
густой порой лежит фонтан

с кем мы с тобою потеряли
где нивы липы обвились
и плачем мы о них страдали
на западе огни зажглись

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

Достаточно ли для произведения искусства соблюдения стиля и структуры? Для музыки — кажется, что достаточно. А для текста?

Бок о бок

Как показывает наш эксперимент, поэтам пока рано всерьёз переживать за профессию, а компьютерным специалистам есть над чем работать. Сейчас автоматическим текстам не хватает сквозной структуры, семантики — но их образность уже достаточно высокая для того, чтобы по мере чтения можно было попытаться самостоятельно придумать какой-то смысл, даже если его нет. А теперь представьте, что через год-другой появится «Prisma для текстов», и любой школьник, написав несколько предложений, сможет нажатием на пару кнопок обработать их «под Чехова» или «под Лермонтова».

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

Можно ли будет считать, что человек — автор картины или произведения, если его участие сводится к нажатию на несколько кнопок, а остальное делает алгоритм? В любом случае, мне кажется, эти споры — лишь терминологические. Для меня проекты в духе «Автопоэта» — это не искусство, а возможность исследования того, как люди, то есть читатели, взаимодействуют с текстами, и как тексты при этом воздействуют на людей. Я думаю, в ближайшие годы в этом направлении будет происходить ещё много интересного.

Присылайте колонки, соответствующие требованиям редакции, на secret@vc.ru

Статьи по теме
Призма Моисеенкова: Как устроен проект Prisma и сможет ли он повторить успех MSQRD20 июня 2016, 17:39
Популярные статьи
Показать еще
Комментарии отсортированы
как обычно по времени по популярности

Вот так вот. Тратят время и деньги на разработку сервиса, который в лучшем случае поможет школьнику написать сочинение "под Чехова", а в худшем - обесценит труд писателей, потому что "это даже яндекс может!". И убили уникальный сервис Яндекс.Словари, который ежедневно кормил десятки тысяч переводчиков.

Морали не будет.

Список претензий к яндекс-переводчику настолько велик, что проще нагуглить петицию на Change.org или сообщение в блоге Яндекса о закрытии ЯС и почитать там комментарии "восторженных" пользователей.

Если вкратце, яндекс-транслейт технически работает хуже даже гугл-транслейта, а по содержимому они оба совсем не сравнимы со Словарями. Яндекс-транслейт может помочь максимум понять общий смысл статьи на иностранном сайте. Яндекс.Словари помогали сделать из "Lord of the Rings" "Властелина колец". Закрытие сервиса - это боль тысяч профессиональных переводчиков и десятков тысяч лингвистов-любителей. И как бы ни ссылались на транслейт и другие ресурсы работники Яндекса, реальность такова, что адекватной замены сейчас нет. Просто нет нигде.

Какой вообще толк от сервиса, который даже фразеологизмы переводит дословно? "Дождит кошками и собаками", каково, а?
Словари это переводили корректно.

Отличным решением будет сделать такой автопоэт для web страниц. Достаточно будет указать url страницы и он будет рифмовать основной текст.

Например из этой статьи вот что могло бы получиться:

Яркий пример больших успехов
Но дальше я для простоты
На творчестве каких поэтов
Горит дотла без суеты

Подход можно применить
Специалистам есть над чем работать
Сегодня я не буду говорить
Нажатием на пару кнопок обработать

В разделе "Стиль" Пушкин - Маяковский - Есенин?

0

Теперь рэперов станет еще больше, спасибо Яндекс.

Можно ли автопоэт заставить писать стихи на основе собственных стихов?

0

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

Сейчас обсуждают
Vladislav Eliseev

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

IKEA оспорит арест 9 млрд рублей на счетах российской «дочки»
1
Filipp Lyakh

> а год выпуска написан винтажным шрифтом.

Пиксельный шрифт — новый винтаж)

15 примечательных винных бутылок: шрифт Брайля, зашифрованный портвейн и посадочный талон
0
Александр Кадетов

Вот эту вкладку можно вообще навсегда удалить.

Кейс из России: Зачем команда «Альфа-Мобайл​» меняет дизайн своего приложения
0
Michael

Фильтры по местностям как-то странно работают. Ожидаешь, что при выборе своего города изменяться цифры в категориях товара. Ан нет, цифры общие, что сбивает с толку.

DamProdam — сайт покупки-продажи подержанной техники
0
Anton Mansurov

У Билайна нет больше поддержки на 0611. Просто нет такого выбора "поговорить с оператором". Чат на сайте и в приложении весьма убогий. Если что-то оборвалось - пиши заново, никакой истории. Так что случись какая проблема - остаешься с ней один на один. Ну или или в офис, к некомпетентным сотрудникам. Вот куда перевести свои 6 номеров?)

Как избавиться от лишних платных подписок — советы абонентам «Мегафона», МТС, «Билайна» и Tele2
0
Показать еще