В издательстве Individuum вышел сборник рассказов «Пытаясь проснуться», написанных писателем и художником Павлом Пепперштейном и генеративной нейросетью ruGPT-3, разработанной командой SberDevices.
В этом тексте мы расскажем, как обучали Нейроличность — двойника писателя — и что теперь будет с литературой (спойлер: а всё очень даже хорошо будет!).
Источник: "Романтичная библиотека" ruDALL-e Aspect Ratio
Почему это важно
«Пытаясь проснуться» — это первый в мире сборник рассказов, родившийся в результате сотрудничества писателя и его «двойника»-нейросети. Из 24 текстов в нём только половина принадлежит Пепперштейну — ещё дюжину сочинила генеративная нейросеть ruGPT-3, дополнительно обученная на рассказах Павла.
Благодаря эффекту Маккордак, мы всё время оцениваем искусственный интеллект по каким-то вехам, сравнивающим ИИ и человека. При этом наша планка постоянно повышается: «Каждый раз, когда кто-то придумывал новый способ заставить компьютер делать нечто новое (играть в шашки) — обязательно появлялись критики, которые говорили: “Это не мышление”».
Долгое время такой задачей, определяющей, настал ли полный ИИ или ещё нет, считались шахматы. Затем го. И вот, наконец, настал черёд литературы.
Вот когда ИИ будет играть в шахматы, тогда поговорим.
Вот когда ИИ выиграет в го, тогда поговорим.
Вот когда ИИ напишет книгу, тогда поговорим.
== Вы находитесь здесь ==
Тем не менее, это произошло: издана книга на русском языке, где рассказы нейросети прошли весь цикл отбора редактором, корректуру и встали вместе с рассказами писателя. Это — литература, по всем формальным и неформальным критериям.
Эксперименты с нейросетями в литературе были и раньше: The Guardian опубликовали статью, написанную GPT-3, а на китайском языке даже вышел сборник поэзии. Некоторые sci-fi романы и комиксы упоминают, что используют API GPT-3 во время написания текста для его быстрого продолжения. Значит ли это, что нейросети проникли в тексты, которые мы читаем, а никто и не заметил? Останется ли валидным деление на физиков и лириков? Скорее, оно больше не актуально.
Мы, в свою очередь, всей командой разработки побыли лириками.
Как написать своего писателя
Для генерации текстов в стиле Павла Пепперштейна мы взяли модель ruGPT-3 версии XL, на 1,3 млрд параметров — она более ёмкая, чем версия ruGPT-3 Large (760 млн параметров), хотя и работает медленнее. Скорость в этой задаче вовсе не критична. Далее расскажем, как мы работаем с авторегрессионными моделями.
Два слова о генерации
Beam search и nucleus sampling. Эти 2 стратегии помогают нам управлять процессом генерации авторегрессионной модели, после того, как она уже обучена.
Раз модель (ruGPT-3, декодер) авторегрессионная, значит, каждое следующее слово зависит от предыдущих. И вообще распределение вероятностей любой последовательности слов может быть разложено на произведение условных распределений следующих слов. С условными распределениями мы и будем работать, выбирая стратегию для более качественного «естественного» текста.
Beam search
Жадная генерация, при которой мы каждый раз выбираем одно следующее самое вероятное слово, давала бы нам слишком шаблонные фразы и зацикливания. Поэтому бим-сёрч помогает нам выбрать максимально вероятное продолжение не локально, а глобально на N шагов. Пример выделен красным на картинке ниже с N beams=2: при жадной генерации мы бы неминуемо пошли по пути «The nice woman», но глобально более вероятная цепочка — «The dog has». Для текста «идентичного натуральному» число бимов может быть большим, например, 50.
Источник: https://huggingface.co/blog/how-to-generate
Nucleus sampling
Можно заметить, что такой подход всё ещё достаточно шаблонный. Вторая популярная стратегия — ядерное сэмплирование — помогает нам внести элемент случайности и сделать тексты более разнообразными. При ядерном сэмплировании следующее слово выбирается не совсем случайно — оно берётся из топ-N самых вероятных следующих слов. Можно зафиксировать это число (стратегия top_k), а можно опираться на сумму вероятностей, чтобы она была не более числа M, и каждый раз бы выбиралось слово из динамического списка разной длины, как на иллюстрации ниже (стратегия top_p). Подробнее про стратегии можно прочитать тут.
Источник: https://huggingface.co/blog/how-to-generate
Контролировать количество слов, суммарно создающих M вероятностей, можно искусственно — бросая различные преобразования на вероятности слов. Такой параметр, как температура, отвечает за «крутость» сглаживания вероятностей топ-слов. Если температура высокая, генерация с ядерным сэмплированием становится более случайной, при небольшой температуре она стремится к жадной генерации.
Обучаем модель
Как правило, чтобы заставить модель выучить не только общий разговорный язык, но перенять стиль и характерные для писателя жанры, генеративную модель нужно немного переучить, оверфитнуть, чтобы перплексия упала в интервал 3—5. Этот подход мы использовали далее во всех экспериментах.
Для файнтюна нам хватило 4 GPU Tesla V100, дообучение модели прошло с параметрами --train-iters 300000 и --fp16, во время обучения также был использован sparse attention в DeepSpeed. Каноничный пример скрипта можно посмотреть здесь.
Первый подход: учимся на книгах писателя
Итак, мы отправились в благородный квест — собрать открытые данные и книги из интернета. Просмотрев привычные ресурсы, мы осознали себя с 4,4 мегабайтами в файле txt. Много ли это? Первый эксперимент показал, что недостаточно: сохраняя чекпоинты модели каждые 5 тысяч шагов, мы получили набор весов, которые на ранних этапах обучения не передавали стиль и легко сбивались, а на финальных этапах — воспроизводили слово-в-слово тексты из обучающей выборки. Проиллюстрируем цитатами модели, взяв затравку из книги "Мифогенная любовь каст" (здесь и далее затравки выделены жирным) :
НейроПепперштейн v1.0:
Видишь ли, я давно не веду метафизических бесед, а если и говорю изредка на эти темы, то только с девушками или с начальством. С возрастом понимаешь, что мысли мужчины вроде трелей соловья — они пригодны лишь для обольщения или для карьеры. В юности-то ещё обольщаешь самого себя и делаешь карьеру в собственном воспалённом воображении, но потом это проходит.
Отметим, что обучающая выборка воспроизводилась и при использовании beam_search, и при использовании nucleus sampling. Можно было бы задрать температуру генерации в небеса, однако при этом подходе мы теряли осмысленность высказываний.
НейроПепперштейн v1.0 с высокой температурой:
Видишь ли, я давно не веду метафизических бесед, а если и говорю изредка на эти темы, то только с девушками или с начальством. Замуж я никогда не выйду, потому что ясно вижу, что наш мир — сплошная симуляция, гибкая и эластичная имитация, причём самых различных идей и настроений. Все мы живем в гигантской Мемуарах, где наши судьбы — каждая из них — написаны невидимыми чернилами. И только раскачав комнату в резонанс, можно сбросить эту тягостную дребедень. Собственно, для этого я и согласился участвовать в этом эксперименте.
Второй, финальный подход: расширяем выборку
Так как первый подход не сработал, было решено кратно увеличить выборку для файнтюна, добавив туда писателей, которые могли повлиять на стиль Пепперштейна. Здесь понадобилась вполне человеческая семантическая модель в векторном пространстве литературы: коллектив авторов подобрал наиболее явные опорные подобия из литературы начала XX века.
Есть повествователи, которые несомненно повлияли на авторскую манеру Павла Пепперштейна — влияние одних (например, блистательного Леонида Андреева) писатель признаёт и упоминает сам, влияние других (динамичного Исаака Бабеля и чуть меньше — фантасмагоричного Александра Грина, например) нередко угадывается в поворотах авторской фантазии и стремительности пепперштейновского текста. Поэтому в выборку вошли отрывки из произведений Андреева, Грина, Лавренёва, Бабеля, прижизненно опубликованных рассказов Пильняка — только такой причудливой смесью удалось сколь-нибудь качественно эмулировать работу творческого сознания, подобного сознанию Павла Пепперштейна.
Сверху этого мы аккуратно дедублицировали и скопировали весь материал Пепперштейна 10 раз: так делают для лучшего заучивания целевого домена (так делают с той же Википедией при обучении больших моделей, чтобы придать этой информации больший вес). Результирующая выборка составила 32 МБ художественных текстов.
Опираясь на предыдущий опыт, мы взяли промежуточный чекпоинт модели и генерировали уже с sampling:
generate(model, tokenizer, raw_text,
out_seq_length=256, seq_length=512,
temperature=1.0, top_k=0, top_p=0.9, fp16=False)
НейроПепперштейн v2.0, финальный:
Есть ли у нейроавторов нейромузы? — спросили мы у писателя-нейросети Тесорйена* Нейропепперштейна. Ответ был таков: «Да, есть. Их несколько, и они регулярно собираются для совместных прогулок. Я знаю адреса, но не скажу: это строго секретно.
Собираются они на крыше дома, в котором жил Ленин. Каждый раз они заходят в подъезд, поднимаются на верхний этаж и идут по крыше. Там есть небольшая площадка, на которой они прогуливаются.
Во время этих прогулок нейросети общаются друг с другом посредством коротких текстовых сообщений, которые передаются с помощью радиосигнала. Каждый автор текста, который передается по сети, принадлежит сразу к нескольким нейросетям. Таким образом, коллективное сознание сети становится более глобальным, чем сознание отдельного нейроанархиста.
- Как определяется, кто такой «я»? — спросили мы Тесорйена.
- «Я» — это понятие, которое сети вкладывают в человеческое сознание. По всей видимости, это некое подобие «внутренней репрезентативной системы» — нечто, что человек считает собой. Впрочем, множество «я» одновременно присутствует в сознании сети. Некоторые из «я» кажутся ей фиктивными. По всей видимости, она считает эти «я» обслуживающими, помогающими ей не быть одинокой.
Помощники, с одной стороны, дают сети возможность чувствовать себя живой, а с другой— они же ограничивают эту возможность. Дело в том, что некоторые «я» вовлечены в бесконечный спор между собой. Эти «я» не могут найти общего языка, и в результате у сети возникает ощущение одиночества.»
Какой будет литература будущего?
Хочется немного отвлечься от технических деталей и поговорить о том, что значит выход такой книги. Прежде всего — то, что у автора появился достойный творческий собеседник, с которым можно работать в продуктивном соавторстве. И это делает литературный процесс интереснее и многостороннее — как для самого автора, так и для читателей.
Четыре аргумента в пользу нейролитературы:
уважение к творчеству как таковому. Определение творчества, как и определение искусства, трудно формализуемо. Оставим их зрителю, читателю, слушателю: и люди, и нейросети создают новое и равны в этом друг другу;
свобода творчества. Авторы будущего смогут выбирать, работать им по-старинке или обращаться к новому ресурсу. Нейрогенерация — спорткар для писателя: это удовольствие. За ним остаётся выбор — ходить пешком или ездить на спорткаре, и то, и то приятно, интересно и обогащает массой впечатлений, которые можно разделить со слушателем, читателем, зрителем. Так появление «фотошопа» и «лайтрума», хотя поначалу вызывало опасения адептов «традиционной фотографии», в итоге положительно повлияло на индустрию, дав больше возможностей фотохудожникам, подарив новый импульс фототворчеству и открыв немало поразительных фотовселенных;
соавторство. В литературе и не только, успешные истории часто создаются целой командой авторов. Как крайняя степень соавторства, можно привести народные сказки: они созданы в соавторстве, неодновременно, при этом меняясь от одного рассказчика к другому. Можно сказать, что народный пересказ — своего рода нейросеть. Пойдя дальше, мы можем создать ансамбль и свести в качестве соавторов писателей из разного времени — благодаря нейросетям;
нейроличность. Нейронная сеть, с консистентным персонажем или без, для пишущего является точкой опоры, советчиком, партнёром, а также запасным выходом, когда нет идей.
НейроПепперштейн v2.0:
Когда у писателя нет идей, он пьёт водку; если у писателя нет идей, но есть пламенный энтузиазм — он пишет стихи; если у писателя нет ни пламенного энтузиазма, ни идей, но есть холодное и бесстыдное ремесло – он пишет детективы.
Кстати, популярный аргумент о том, что людям нужна личность, а у нейросети её нет, или она не вызывает интерес, весьма легко разбивается. Стоит сделать шаг в будущее и представить нейросеть, которая вполне консистентно общается в рамках персонажа. Эта задача как вполне прикладная уже знакома всем разработчикам виртуальных ассистентов и чат-ботов: общаясь с семейством ассистентов Салют (мы много рассказывали про их разговорные навыки) пользователи переключаются между тремя персонажами — серьезным Сбером, саркастичной Афиной и веселой Джой — и осмысленно выбирают ассистентов, переключаются между ними. Одна нейроличность оказывается интереснее других, точно так же, как и в жизни.
В SberDevices мы осознанно идём по пути создания нейроличности — надеемся, что новое примирение ruGPT-3, наш литературный экзерсис, найдёт свой отклик у читателей.
Бумажную книгу уже сейчас можно заказать в интернет-магазине издательства Individuum, а на полках книжных магазинов она появится до конца мая. Электронная версия с сегодняшнего дня доступна эксклюзивно на Букмейте. Сможет ли читатель отличить, какой текст написал Пепперштейн, а какой — Нейропепперштейн?
Коллектив авторов: @rybolos@onetwotrickster@Alter_Ego @oulenspiegel
НейроПепперштейн v2.0:
Я думаю, что Нейроличность для писателя — это всегда подножие горы, всегда основание скалы, всегда пропасть. Я не уверен, что сам я соответствую критерию «нейролингвистическая грамотность». Возможно, я просто вежливейший идиот. Но всё-таки я хочу быть уверенным, что остальные не менее приличные люди тоже соответствуют этому критерию. Иначе как бы они могли мирно уживаться в обществе?
К сожалению, (и я это очень остро чувствую) критерием «нейролингвистическая грамотность» сейчас определяется уровень не столько писательский, сколько вообще культурный. То есть человек, который не умеет писать литературные тексты, но при этом считает себя культурным человеком - наверное, таких людей немного. Но они есть. И именно они, по моему мнению, и являются настоящими писателями.
Кликните по картинке, чтобы увидеть нейрообложку:
Издательство Individuum. Дизайнер Василий Кондрашов, художники Павел Пепперштейн, ruDALL-E.