OpenAI GPT-2 переписала финал Игры Престолов

Я обучил языковую модель GPT-2 на серии книг Джорджа Мартина «Песнь Льда и Пламени» и дал ей переписать финал сериала, снятого HBO. Может ли она написать что-то, что будет лучше, чем катастрофически провальный 8-й сезон Игры Престолов?

PIC: Сюжетная линия 8-го сезона Игры Престолов оставила миллионы поклонников разочарованными своим стремительным финалом, который не принес никакого удовлетворения зрителям. Дисклеймер: Мнение, выраженное в этой статье, является исключительно моим собственным.

Сюжетная линия 8-го сезона Игры Престолов оставила миллионы поклонников (включая меня) разочарованными своим стремительным и неправдоподобным финалом. Многие фанаты требуют переснять последний сезон сериала, а некоторые уже придумали свою версию финала, чтобы получить достойное завершение истории. Остальные же ждут, когда Мартин закончит писать книги, надеясь, что он сумеет убедительно объяснить странные действия персонажей, но на это может уйти много лет. Так что я захотел заставить AI изучить стиль Джорджа Мартина и дать ему переписать финал сериала.

Курс по Machine Learning
Идет набор в группу 3 800₽ в месяц

В этой статье я объясню, как этого добиться, используя языковую модель генерации текста под названием GPT-2, которую исследователи OpenAI представили в начале 2019 года. А после я поделюсь результатами работы модели на примере сюжетных линий трех главных злодеев 8-го сезона: Короля Ночи, Серсеи Ланнистер и Дейенерис Таргариен.

Модель генерации текста GPT-2

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

1. Большое количество данных: 8 миллионов веб-страниц были отфильтрованы и обработаны, чтобы сформировать текст объемом 40 ГБ для обучения модели. Этот текст охватывает множество различных тем, поэтому предварительно обученная модель действительно показывает себя очень хорошо при использовании в конкретных областях: в нашем случае, это книги Джорджа Мартина.

2. Много вычислений: она использует 1,5 миллиарда (!!) параметров в своей сетевой архитектуре на базе Transformer. Однако OpenAI выпустили только уменьшенную версию этой модели, содержащую «всего» 345 миллионов параметров, ссылаясь на соображения безопасности. Мы используем эту версию предварительно обученной модели для трансферного обучения.

Transformer 

GPT-2 использует сетевую архитектуру Transformer вместо традиционных сетей RNN / LSTM / GRU, которые обычно используются для моделирования последовательностей. Вместо рекуррентных блоков с логическими элементами и временными шагами Transformer использует так называемый механизм внимания (прим.: attention-based mechanism) с парой энкодер / декодер.

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

Архитектура модели Transformer. [источник: Attention Is All You Need, Vaswani et al.]

Обратите внимание, что GPT-2 обучена предсказывать следующее слово во входном предложении с предположением, что чтобы достаточно точно предсказать следующее слово, модель будет вынуждена узнать о контекстуальном значении всех слов, с которыми она столкнулась до сих пор. Без понимания текста языковая модель может только предсказать грамматически правильные слова, но сгенерированный текст не будет иметь смысла. Можно сформулировать это таким образом: сеть будет предсказывать достаточно подходящее следующее слово в предложении, если GPT-2 получит глубокое понимание текста, подаваемого на вход. Илья Суцкевер отлично объясняет эту концепцию в этом видео.

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

Курс по нейронным сетям
Идет набор в группу 4 200₽ в месяц

Обучение модели

Я взял текст из всех 5 книг серии книг Джорджа Р. Р. Мартина «Песнь Льда и Пламени» и соединил их для подготовки учебного текста. Мы используем предварительно обученную модель GPT-2 с 345 миллионами параметров для переноса обучения на этот текст.

Серия книг Джорджа Р. Р. Мартина «Песнь Льда и Пламени».

Интересно, что предварительно обученная модель даже сама по себе неплохо пишет о персонажах Игры Престолов, а, значит, информация о сериале попала в те 8 миллионов веб-страниц, использованных во время первоначального обучения. В любом случае, я хотел добиться, чтобы модель писала только в стиле Джорджа Мартина, так что я решил сузить возможности этой «обобщенной» модели и продолжить обучение на тексте «Песни Льда и Пламени». Модель обучалась в течение примерно 12 часов на графическом процессоре Google Colab K80.

Результаты

Давайте попробуем разобраться с некоторыми поворотами в сюжетных линиях, которые разочаровали фанатов сериала, и попытаемся получить альтернативные сценарии, используя нашу обученную модель GPT-2.

Разочарование №1: Гибель Короля Ночи

Исходные данные: Король Ночи медленно подошел к Трехглазому Ворону. Джона удерживал Ледяной Дракон, а Дейенерис была окружена вихтами. Король Ночи потянулся к своему ледяному мечу, чтобы убить Брана, но внезапно…

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

GPT-2 считает, что Ходор все еще жив и приходит на помощь Брану, вот это поворот! Или, возможно, это неживое тело Ходора, в которое вошел Бран, воспользовавшись способностями варга. Правда, я понятия не имею, что модель пыталась сказать после этого.

Исходные данные: Король Ночи медленно подходит к Трехглазому Ворону. Джона удерживает Ледяной дракон, а Дейенерис окружена вихтами. Король Ночи потянулся к своему ледяному мечу, чтобы убить Брана, но вдруг происходит нечто неожиданное.

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

DS
Специализация Data Science
Идет набор в группу 12 500₽ в месяц

Хотя организаторы шоу забыли об этом, GPT-2 помнит о пророчестве Азор-Ахай и танцует вокруг идеи Светоносного — меча, которым убьют Короля Ночи. Как круто было бы, если ледяной меч Короля Ночи оказался бы Светоносным и, в итоге, убил бы его?!

Исходные данные: Бран говорит: «Теон, ты хороший человек. Спасибо.» Теон, завершивший свое искупление, бежит к Королю Ночи, чтобы умереть. И как только он собирается пронзить Ночного Короля своим копьем…

Результат: Дракон — или это был Другой? — выпустил поток пламени в его лицо, пока Король Ночи спокойно смотрел. Мир сжался до трех человек, стоящих плечом к плечу; красный священник и его копье, и король в синем, его корона на голове. Порыв ветра ворвался сквозь холодный воздух в голову Теона, и он услышал крики своих братьев. Если бы я не был таким сильным… «Убей его,» — он хотел кричать, но мужество оставило его, как часть его, которую вынудили замолчать. Вместо этого он согнул свою искалеченную руку, отбросив древко копья. «Спаси себя от лишних ран,» — сказал он себе, «и беги так быстро, как только можешь».

Эта часть поразила меня. И не потому, что это блестящее написано (это не так), а потому, что модель знает, что дракон на самом деле был «Другим» (в книгах это синоним для Белых Ходоков). Откуда модель знает, что Визерион — это дракон-нежить, управляемый Королем Ночи? Визерион дышит огнем в Теона и ломает его копье. Теон в этот момент решает бежать в страхе, как он делал и раньше в сериале. Слишком много совпадений, чтобы получить все эти детали в одном абзаце. Действительно удивительно, что модель умудрилась узнать все эти детали о персонажах!

Разочарование №2: Серсея Ланнистер сдается без боя 

Исходные данные: Дракон сжег всю армию Ланнистеров, Железный флот и армию Золотых мечей, но Серсея оставалась уверенной, что Красная крепость не падет. Когда дракон вот-вот был готов сжечь башни Красной крепости, Серсее на помощь пришел Джейме. В этот момент,

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

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

Исходные данные: Дракон сжег всю армию Ланнистеров, Железный флот и армию Золотых мечей, но Серсея оставалась уверенной, что Красная крепость не падет. Когда дракон вот-вот был готов сжечь башни Красной крепости, Серсее на помощь пришел Джейме. В этот момент,

Результат: согласно ее пророчествам, Безумный Король нападет на город… «Серсея», — снова сказал Джейме, пытаясь звучать строго и отдаленно, — «молча и, ох, сладко». Троттеру он писал: «Серсея, помни, ты король в Утесе Кастерли. Помни кто ты такая, кто ты такая. Вспомни, как ты убила Безумного Короля. Прости меня, если я заставлю тебя упираться.» Она не ответила. «Прости меня, — пылко повторил он, — ради матери, которой у меня никогда не было, матери, которой у тебя никогда не было, матери, которую все они знали и любили, но не знали». Орел мерцал на масляной ряби, пока лезвие было в ножнах, и слова сверкали на потолке, блестящие и темные…

Чуть лучше на этот раз. Несмотря на то, что модель ошибается в некоторых деталях, в частности, о Безумном Короле, мне нравится идея Джейме, пытающегося дать силы Серсее в тот момент. Возможно, какой-нибудь лесной пожар в этот момент принес бы некоторое чувство справедливости ее сюжетной линии. Две безумные королевы, пытающиеся бороться с огнем огнем, сжигая остальную часть города. Это было бы неплохим финалом, который бы показал ужас и бессмысленность войны за Железный Трон.

Разочарование №3: Дейенерис необоснованно становится злодейкой 

Исходные данные: В Эссосе и Мирине Дейенерис чувствовала не только страх, но и любовь. В Вестеросе был только страх. В тот момент, когда она выиграла войну за Железный Трон, она могла думать только о том, чтобы внушить страх людям, которыми она собиралась править. Дейенерис, сидящая на вершине своего дракона в Королевской Гавани, решила, что хочет

Выход: есть. «Пища с зубами», — сказал Сир Джорах. «Мне хочется это попробовать», — пожаловалась Дани. «Это будет не по-дотракийски есть поджаренное мясо и пить эль». Она вспоминала старые времена, когда ее кхаласар был Королевскими Кварталами во время Длинных Копий, а великие толстые кхаласары из Дотраки наполняли свои чашки текущим вином. И рыбные блюда, и запеченную репу, все перед тем, как они поехали на юг, чтобы уничтожить других Дотраки. Это только пища для размышлений. Я буду есть, пить и притворяться расслабленной, пока драконы не придут снова, чтобы убить нас всех.

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

Исходные данные: В Эссосе и Мирине Дейенерис чувствовала не только страх, но и любовь. В Вестеросе был только страх. В тот момент, когда она выиграла войну за Железный Трон, она могла думать только о том, чтобы внушить страх людям, которыми она собиралась править. Дейенерис, сидящая на вершине своего дракона в Королевской Гавани, решила, что хочет

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

В этом варианте опять нет никакого смысла, но похоже, что модель придерживается идеи о том, что Дани хочет освободить народ Королевской Гавани от тиранов, которые готовы преклонить колено и не пытаются бежать.

Выводы

Я попытался сгенерировать больше результатов для этих сюжетных линий, но ни один из них не имел смысла в контексте сериала. И хотя модель понимает сюжет не слишком хорошо, она демонстрирует, что способна узнавать о персонажах и их определенных чертах, а также создавать ассоциации между этими персонажами. Например, я вижу, как в сюжетной линии появляется Сир Джорах, когда говорят о Дани, а Ходор появляется, когда говорят о Бране. И часто это правильные отношения между этими персонажами, что действительно впечатляет!

Я думаю, что это показывает, насколько далеко продвинулись NLP-исследования с исследовательской работой OpenAI GPT-2. Мне интересно узнать, насколько лучше «большая» модель GPT-2 выполнила бы эту задачу. Возможно, если она когда-либо будет выпущена, я вернусь обновить эту статью.

Что касается достойного финала для Игры престолов, я думаю, что нынешнее поколение AI нам помочь не в силах, и нам придется ждать, пока Джордж Р. Р. Мартин закончит свои книги. Долгих лет жизни ему!

Если хочешь попробовать эту модель в своем браузере, то ты можешь это сделать в Google Colab notebook для тестирования: Google Colaboratory => Game of Thrones GPT-2 text generator

colab.research.google.com

оригинал текста: OpenAI GPT-2 writes alternate endings for Game of Thrones

перевод: Ухарова Елена

Поделиться:
Опубликовано в рубрике Machine LearningTagged ,

SkillFactory.Рассылка