Оборона нейронной обороны (вместо введения)

В 2016 году сотрудники «Яндекса» Алексей Тихонов и Иван Ямщиков выпустили «Нейронную оборону» — музыкальный альбом, стилизованный под творчество Егора Летова. Слова для песен «Нейронной обороны» написала искусственная нейросеть, обученная на оригинальных текстах «ГрОба». Правда, музыка и исполнение остались «человеческими» — альбом записали сами Ямщиков и Тихонов, попытавшись придать ему нужное «гаражное звучание» и даже специально расстроив для этого гитару.

Новость о «Нейронной обороне» облетела СМИ. Реакция в соцсетях была противоречивой. Кому-то «алгоритмический трибьют» Летову понравился, другие громко плевались и рассуждали в духе «Летов неповторим», «Да как они смеют», «Бездушной машине не понять глубины творчества Егора». Похоже высказалась и вдова Летова Наталья Чумакова:

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

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

Поверхностные свойства стиля

Нам, людям, интуитивно понятно, что авторы в своих произведениях часто проявляют себя, используя те или иные приёмы. Это может быть узнаваемая структура текста, излюбленная метафора, особая лексика или что-то ещё — приёмы разнятся от одного автора к другому, и довольно сложно формализовать все варианты того, что можно назвать «авторским стилем».

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

Выделение значимых признаков

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

Грубый подсчёт: количество уникальных слов

Несколько исследований разной степени подробности были посвящены рэперам и их текстам. Один из самых легко извлекаемых признаков — количество уникальных слов [1]: получив все тексты треков, можно привести слова в них к их лемме, или нормальной форме, и посчитать количество уникальных. Если, например, отобразить на графике величину вокабуляра с учётом эры, в которую творил автор, то можно увидеть, что со временем словарный запас текстов «беднеет». При этом стоит отметить, что в среднем в текстах рэперов уникальных слов будет больше, чем в текстах рок- или поп-исполнителей того же объёма.

Сравнение количества уникальных слов в выборке 35 000 текстов: даже несмотря на тренд на сужение вокабуляра, рэп остаётся в лидерах

Частично вдохновлённый анализом сразу многих рэперов, автор более детального исследования стиля Дрейка [2] сравнил между собой девять альбомов — и пришёл к выводу, что ни один из них не выделяется чем-то особенным с точки зрения вокабуляра. В среднем в одном треке можно ожидать около 100–200 уникальных слов.

Распределение количества уникальных слов по трекам в альбомах. По горизонтали — альбомы (один столбец = один альбом). Отдельные кружки обозначают треки в альбоме

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

Менее очевидная, но тоже интересная деталь стиля — упоминаемые личности. Здесь на помощь приходят инструменты для распознавания именованных сущностей (named entity recognition или просто NER). Такие инструменты в большом количестве разработаны для многих языков — в том числе, конечно, и для русского с английским. Они отличаются лишь точностью выделяемых сущностей и временем работы. Инструмент Stanford NER из набора Stanford NLP помог выяснить, что больше всего Дрейк упоминает самого себя.

Самые упоминаемые сущности в текстах Дрейка. Скромность — наше всё!

Учим машину копировать

На пике популярности нейросетей и машинного обучения было бы странно не увидеть попытки «скопировать» с помощью таких инструментов чей-нибудь стиль — и раз уж мы начали с рэпа, то им и продолжим. Допустим, что мы хотим создать нового Оксимирона — или как минимум приблизиться, сделать что-то похожее.

Слова имеют значение

(source: @partisanpress)

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

Из плюсов: с высокой долей вероятности итоговые тексты будут достаточно осмысленны, так как от линейного порядка слов зависит и некоторая грамматика в языке; на большом корпусе результаты могут быть достаточно правдоподобны. Довольно большой минус заключается в том, что для генерации используется тот же корпус, на котором происходило обучение, а значит, не получится создать текст в стилистике Оксимирона о том, о чём сам Оксимирон не писал, да и с семантикой текстов можно промахнуться.

Больше нейросетей богу нейросетей

Можно поступить «проще» — и, не выделяя каких-либо черт и формальных свойств, пропустить исходные тексты через нейросети, созданные для генерации текстов, например, char-RNN. Сеть такой архитектуры использовали для генерации текстов в стиле Обамы, и получилось неплохо — вплоть до того, что сеть выучила единое окончание всех речей.

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

Объединяем усилия

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

Сначала тексты были пропущены через алгоритм Soundex. Он позволил «закодировать» слова, оставив от них только звонкие звуки и первую букву — гласные были заменены цифрами, а глухие звуки и вовсе были выброшены. Теперь можно производить замену исключительно между словами с одинаковыми кодами — это будет означать, что они совпадают по своей ритмике. Но что, если в корпусе текстов больше нет слова с таким же soundex-кодом, как и у слова, которое мы хотим заменить? В таком случае мы можем позволить себе небольшое отступление — например, поискать слова с кодом, отличающимся от исходного на один символ. Для этого можно использовать популярное расстояние Левенштейна. После обучения на таких данных СharRNN может выдавать более ритмически похожий текст, но он стал бессмыслицей.

Тут полная диконатердать, дале в меня половиние,
Я не может издеть на всем до подошвой.

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

(значения словам «издеть», «деби парадели» и «полишить» можно попробовать придумать самим)

Добавим ещё несколько признаков к коду, чтобы у нас было больше значимых признаков:

  • легко добавить часть речи: для этого нужно пропустить все слова в корпусе через морфологический анализатор, например, pymorphy, Mystem или встроенный анализатор в NLTK;
  • ещё можно автоматически добавить ударения — Soundex учитывает гласные звуки, но не их ударность. Для более точного описания используем модели Зализняка;
  • количество слогов.

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

Итоговый результат может выглядеть так:

я обходил цилиндр
это тор
второго смотрю я набор
нейтронов камня смысл — пар
мы шли с символикой града на невилл и тор

Тоже, в общем-то, не без изыска, да? Эти стихи породила нейросеть Василия Зубарева (он же vas3k), обученная совмещать ритмический рисунок текстов Оксимирона с лексикой из книги знаменитого физика Стивена Хокинга «Краткая история времени».

Вот еще пара прекрасных примеров такого творческого симбиоза:

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

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

Вторым донором лексического материала в эксперименте vas3k’а выступал Уголовный кодекс РФ. При переносе на него флоу Оксимирона получилось местами очень жизненно:

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

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

Источники

[1] The Largest Vocabulary In Hip Hop
[2] Drake — Using Natural Language Processing to understand his lyrics
[3] Нейромирон: Как мы с нейросетью пытались писать рэп, но зря
[4] Перенос авторского стиля через нейросеть: Как создавался Нейромирон