Время от времени сотрудники Яндекса рассказывают о своей работе на конференциях и семинарах. Часто такие рассказы интересны более широкому кругу людей, чем может вместить зрительный зал, поэтому мы решили публиковать стенограммы некоторых выступлений в блоге. Сегодня это текстовая версия лекции Лёши Тихонова «Автопоэт: к вопросу о возможности автоматизации некоторых аспектов творчества», которую он прочитал 29 июня 2016 года в школе литературного мастерства «Хороший текст».
Алексей Тихонов,
аналитик Яндекса
Здравствуйте, меня зовут Лёша Тихонов, и я аналитик Яндекса. Так случилось, что несколько лет назад я шутки ради сделал Автопоэта, поэтому сегодня меня позвали про него рассказать.
Но сначала — несколько оговорок. Во-первых, когда я говорю «я сделал Автопоэта», надо понимать, что в этом процессе участвовало много разных прекрасных людей. В первую очередь, это Юра Зеленков, наш лингвист, чьи эвристики я использовал для построения фонетической транскрипции. Были и другие соучастники, например, в работе с нейронными сетями мне помогал Илья Едрёнкин, наш специалист по голосовым технологиями. Но дальше я для простоты буду рассказывать от собственного имени. Во-вторых, в дихотомии физиков и лириков я — физик, поэтому мой подход к поэзии кому-то может показаться циничным. Пожалуйста, не обижайтесь и в крайнем случае воспринимайте мой рассказ как шутку или игру.
Для начала дадим рабочее определение поэзии. Это вопрос сложный и философский, но нам сойдёт и что-то приблизительное. Предлагаю в широком смысле подразумевать под поэзией текст, который вызывает эмоции и оказывает эстетическое воздействие на читателя, а в узком смысле — тот же самый текст, но ещё и соответствующий определённым структурным требованиям (стопа, рифма, аллитерация и так далее). Заметьте, я ничего не говорю о чувствах автора и его богатом внутреннем мире — это довольно важный момент. То есть наша система содержит лишь текст как субъект воздействия и читателя как объект.
Далее я расскажу об автоматической генерации поэтических текстов, выделив три аспекта влияния текста на читателя — это смысл, структура и стиль. Такая декомпозиция довольно произвольна и, может быть, совсем не идеальна, но я выбрал её, поскольку мне представляется удобным построить дальнейшее изложение именно в таких терминах.
Смысл
Хорошая для человечества новость — в том, что качественная генерация невырожденных «смыслов» (например, сюжетов, сценариев или нарративов) пока остаётся уделом людей. Сейчас в мире идёт напряжённая научно-техническая работа в области задач «понимания» текста машиной. Уже есть весьма значительные успехи — например, машинный перевод, — но пока что понимать текст (или, скажем, отвечать на вопросы по тексту) человеку по-прежнему удаётся лучше, чем компьютеру — в отличие, скажем, от игры в го или классификации изображений.
Поэтому сегодня я не буду говорить про формирование смысла, но зато покажу несколько приёмов — они позволяют автоматически генерировать тексты, которые могут создавать у читателя ложное ощущение осмысленности. С другой стороны, почему ложное? В нашей системе из субъекта-текста и объекта-читателя ощутить смысл может только читатель — поэтому всякий смысл, который он ощущает, одинаково настоящий.
Структура
Разберёмся со структурой — эту часть поэзии достаточно просто формализовать. Во-первых, мы ожидаем, что стих состоит из последовательности строк, сгруппированных в строфы. Во-вторых, для этих строк должны выполняться некоторые ритмические условия. В силлабическом, тоническом, силлабо-тоническом и других стихах эти условия формулируются по-разному, но так или иначе всё сводится к оценке ударности и длительности каждого слога. В-третьих, может потребоваться некоторая фонетическая согласованность между разными строками — это, например, может быть рифма или аллитерация.
Таким образом, если мы умеем (а мы умеем) строить фонетическую транскрипцию произвольной строчки текста, то остаётся чисто техническая задача — написать алгоритм, который определяет, подходят ли две строки друг другу. В дополнение к транскрипции нужно посчитать слоги и определить длительность каждого из них, установить соответствие строки желаемому стихотворному размеру и проверить две строки на наличие взаимной рифмы. Если у нас очень много текстовых строк, мы можем их автоматически отфильтровать и составить случайные наборы, согласованные с точки зрения поэтической структуры.
Поисковые запросы
В силу специфики своей работы я довольно много изучал поток поисковых запросов к Яндексу — естественно, обезличенный, без привязки к конкретным пользователям. В день люди задают Яндексу примерно триста миллионов запросов, и около половины из них — уникальные, то есть не повторяющие друг друга. Из поисковых запросов можно почерпнуть много занимательного: они отражают интересы и чаяния людей, а кроме того, это бездонная кладезь текстового материала.
В своё время лингвисты Яндекса сделали несколько докладов о языке, который люди используют в поисковых запросах. Этот язык упрощён, а его неписаные правила не всегда соответствуют русской грамматике. Часто правила обусловлены обратной связью: если поиск долгое время не находит нужного по тому или иному запросу, люди перестают его задавать и начинают спрашивать по-другому. Постепенно вырабатываются определённые коллективные привычки, своего рода пиджин. Появляются монструозные конструкции наподобие «смотреть онлайн бесплатно в хорошем качестве без регистрации без смс». Но в редких, низкочастотных запросах по-прежнему видна настоящая человеческая жизнь:
[что повесить в квартире чтобы выйти замуж],
[тададададам хоккей мелодия],
[порно для нокии 320х240],
[красные трусы на люстре к любви отзывы],
[я так и думала что это ЧМ мы не выиграем].
За каждым подобным примером легко представить ту или иную жизненную историю. Часто в группу низкочастотных попадают детские запросы. Дети ещё не научились подыгрывать поиску: они не искажают и не упрощают свой язык и пишут запросы примерно так, как думают:
[что подарить девочке на восьмое марта недорого я ещё в школе учусь],
[что делать если тебе 11 а ей 13].
Структурные эксперименты
За неделю поиск обрабатывает пару миллиардов запросов. Среди них можно найти строки в каком угодно размере: хорее, ямбе и так далее. Самые первые «стихи», которые сгенерировал Автопоэт, были белыми — я поставил фильтрацию с учётом стихотворного размера, но не требовал наличия рифмы:
пословицы-камертоны
посмертные медальоны
улыбчивый меланхолик
символика президента
Затем Автопоэт научился рифмовать строки. Я придумал простейший алгоритм — решил сравнивать концовки фонетических транскрипций запросов, начиная от последнего ударного слога. Если концовки совпадают, можно считать, что строки рифмуются. Надо лишь убедиться, что мы не срифмовали слово само с собой. На удивление, такая простая эвристика оказалась вполне рабочей (хотя и может быть ослаблена). Вот пример простейшей рифмовки:
купить в москве ботинки
хочу к тебе картинки
игра плохие свинки
смотреть кино новинки
На этом этапе я выложил Автопоэта во внутреннюю соцсеть Яндекса. Посыпались идеи: давайте научим его генерировать хокку, порошки, пирожки, депрессяшки. Результаты наших экспериментов можно найти на yandex.ru/autopoet.
Эксперименты с материалом
Внезапный интерес к Автопоэту со стороны публики побудил нас продолжить эксперименты с разными подходами и массивами текстов. Коллеги из различных сервисов Яндекса приносили нам свои текстовые данные, чтобы мы их зарифмовали. Так, например, появилась рифмовка названий остановок из базы приложения Яндекс.Транспорт:
молодежный центр россия
комбинат стройиндустрия
академия футбола
старый рынок автошкола
Мы воспроизвели и классическую шутку с рифмовкой числительных:
905 13 16
850 60
5 700 819
18 650
В этом году на 1 апреля мы опубликовали стихи из заголовков российских новостей. Были и внутренние эксперименты — например, стихи на базе англоязычных поисковых запросов, а также перерифмовка строк известных поэтов (лимерики из Бродского и прочее). Так или иначе, со структурной составляющей практически все вопросы уже закрыты.
Стиль
Структурные характеристики формализовать достаточно просто. Куда сложней определить стиль текста и управлять им. Достаточно начитанный человек, скорее всего, сможет отличить стихотворение Пушкина от стихотворения Бродского, даже если он никогда не читал конкретно эти произведения. Но как формализовать принципы, по которым происходит такая идентификация? Описание авторского стиля может включать большое число различных аспектов: и своеобразный словарь, и предпочтения в стихотворных размерах и рифмах, и специфическая для автора звукопись, и порядок слов, и кто знает что ещё. Означает ли это, что задачу определения — а также воспроизведения — авторского стиля нельзя решить? К счастью, нет.
Яркий пример больших успехов на этом поприще — приложение Prisma, которое много обсуждают в последнее время. Оно позволяет одним нажатием на кнопку стилизовать фотографию под того или иного известного художника. Тонкость состоит в том, что для обработки фотографий используются не классические фильтры, а нейросетевой подход. В последнее время он активно развивается. Похожие алгоритмы появились больше года назад, но в виде продукта выстрелила именно Prisma, поэтому я привожу её как пример.
Как это работает? Крайне упрощая, можно сказать, что некоторая математическая модель (нейросеть) была обучена воспроизводить стиль некоторого художника. Здесь очень важно, что она не сделана для подражания конкретному художнику, а именно обучена. Мы берём эту модель и показываем ей много картин Мондриана — и она сама начинает копировать его стиль. Если мы возьмём ту же сеть и будем показывать ей Мунка, то она научится подражать Мунку. Нам не требуется объяснять, в чём состоит специфика стиля того или иного художника, чем Мунк отличается от Мондриана. Мы просто показываем нейросети разные картины, пока она сама не ухватит суть.
Этот же подход можно применить и к текстам. Примерно месяц назад специально под эту задачу мы собрали нейросеть, научили её строить фонетику и заставили «прочитать» очень много русской поэзии. Это длительный процесс — сеть обучается десятки дней. Затем, когда обучение закончено, можно запрашивать у неё случайные тексты в стилистике заданного автора. Вот несколько примеров:
но уж заря зажглась и вмиг горит
ее заря по-прежнему дымится
на плитах в море над ручьем луна
на своде вод но скоро уж никто
в прохладе хладной рощи и ограды
в их зрящих рощах не пленит
все только чуткой радости на лоне
* * *
на мне
на всех
что так сквозь сон
все ближе
и мне
ни разу не скажу
не видно где
откуда же тоска
что я умру в ночи
теперь с утра хоть
* * *
на палубе в полях где ни шиша
на каменном пиру как будто в сене
я ехал по дорожке через гладь
с огромной челюстью из горла споря
вода горит дотла без суеты
зато как ни на миг ни на войну
там для игры и в этом виноваты
в большом отеле у других домов
от вечной женщины навек явился
в пустой залив как будто на крыльцо
и будто все он тронул эту землю
здесь было только две земли во сне
Можете попробовать самостоятельно определить, на творчестве каких поэтов мы обучили нейронную сеть, выдавшую эти отрывки. Конечно, в целом текст напоминает шизофазийный бред, но про смысл мы с вами уже говорили. Оценивать надо именно стилистическую составляющую.
Структура + стиль
Итак, у нас есть структура и есть стиль. Давайте составим их вместе. Как вы, наверное, заметили, нейросеть не научилась самостоятельно рифмовать строки, хотя стихотворный размер удерживает достаточно хорошо. Ей несложно помочь в этом, добавив эвристику, про которую я уже рассказывал ранее. И попросить сгенерировать текст в стиле Пушкина:
и взор смущенный уж нежданный
ее призывный приговор
все чувства ваши постоянный
мой холоден певец и вор
нет ты не знаешь ты не спросишь
но он душою обуян
ты не прочтешь и ты не бросишь
густой порой лежит фонтан
с кем мы с тобою потеряли
где нивы липы обвились
и плачем мы о них страдали
на западе огни зажглись
стоял великий дерзновенный
как лебедь в поле утомленный
Достаточно ли для произведения искусства соблюдения стиля и структуры? Для музыки — кажется, что достаточно. А для текста?
Бок о бок
Здесь Лёша показал зрителям несколько карточек. На каждой было два стихотворения: одно сочинила машина, а другое — человек. (Для эксперимента Лёша использовал стихи Александра Ерёменко, Всеволода Некрасова, Ники Скандиаки, Велимира Хлебникова и других поэтов.) Нужно было угадать, где стихотворение компьютера, а где — живого автора. Зрители совещались, а затем коллективно выбирали ответ. Во всех случаях он оказался правильным, хотя во время обсуждения единогласного мнения об авторстве не было.
Как показывает наш эксперимент, поэтам пока рано всерьёз переживать за профессию, а компьютерным специалистам есть над чем работать. Сейчас автоматическим текстам не хватает сквозной структуры, семантики — но их образность уже достаточно высокая для того, чтобы по мере чтения можно было попытаться самостоятельно придумать какой-то смысл, даже если его нет. А теперь представьте, что через год-другой появится «Prisma для текстов», и любой школьник, написав несколько предложений, сможет нажатием на пару кнопок обработать их «под Чехова» или «под Лермонтова».
Сегодня всё чаще слышны споры о том, можно ли называть творчеством результат работы алгоритма, бездушной машины. Не хорошим или плохим творчеством, а просто творчеством. И надо признать, что грань между человеческим творчеством и компьютерными результатами постепенно истончается, а вопросы авторства становятся совсем размытыми.
Можно ли будет считать, что человек — автор картины или произведения, если его участие сводится к нажатию на несколько кнопок, а остальное делает алгоритм? В любом случае, мне кажется, эти споры — лишь терминологические. Для меня проекты в духе Автопоэта — это не искусство, а возможность исследования того, как люди, то есть читатели, взаимодействуют с текстами, и как тексты при этом воздействуют на людей. Я думаю, в ближайшие годы в этом направлении будет происходить ещё много интересного.