TL;DR: потыкать можно тут

Недавно ребята из сбер(-банка) анонсировали и выложили в свободный доступ свою модель gpt-3 и я понял, что можно наконец то реализовать свою давнюю мечту - сделать AI dungeon для русского языка. Данная игра сильно выстрелила в прошлом году, про нее было написано множество статей. Если описать AI dungeon кратко, то это эксперимент с огромной генеративной нейронной сетью, где слово игра используется, чтобы заменить множество непонятных слов. Суть игры проста: вы пишете историю и место действия своему персонажу (или выбираете из заранее готовых). Буквально пишете. Вариантов выборов бесконечно много, результаты всегда непредсказуемы, а приключения по настоящему уникальны. Завораживающе, правда?

Причем особенно сильно эта игра понравилась американский имиджбордам, которые сразу же начали допиливать и улучшать функционал игры. Но в конечном итоге создатель игры решил начать зарабатывать деньги и все последующие обновления для игры стали закрытыми, а добрая половина игры - платной. Аноны с 4chan ушли еще дальше -- обучили gpt2 на огромных корпусах эротики и создали генеративный аналог одной широко известной в узких кругах порнографической текстовой флеш игры corruption of champions (гусары, не гуглить!). Превратили архитектуру для интересных приключений в генератор томов “Похотливой аргонианской девы”, как жаль.

Перейдем к экспериментам

В качестве начальной точки я решил повторить все шаги, которые делал автор оригинальной AI Dungeon. В качестве датасета он использовал распарсенный реддит и сайт ChooseYourStory.com. Формат данных представляет себе структуру Choose Your Own Adventure (рус. Выбери себе приключение). Например:

Вас укусила змея

  1. Если ты решил укусить змею в ответ, то переходи на страницу 10

  2. Если ты решил побежать в больницу за антидотом, то переходи на страницу 12

Данный формат восходит к серии книжек 80ых годов. Эти книжки издавали на русском, так что многие из вас возможно их даже читали. В общем счете у него получилось около 30мб хороших тренировочных данных. 

И тут начинаются проблемы. На русском языке мне удалось получить только ~1мб размеченных данных -- как раз те книжки, которые перевели на русский язык. Небольшие поиски не выдали мне сайтов или форумов на русском языке, где люди бы писали фанфики а-ля CYOA. Поэтому я решил поступить достаточно скверно: просто перевести датасет на русский язык, а затем подмешать к нему хорошие тексты. Из-за перевода конечно же страдает смысл, но я решил, что для модели выучить структуру CYOA будет важнее. Но все равно хороших текстов очень мало. Чтобы хоть как то улучшить ситуацию я добавил в датасет набор диалогов из Готики 1 и 2 (единственные игры, которые оказались на моем ноутбуке). Классический пример диалогов из готики 2:

Немного юмора, магии и фэнтези - хорошие данные для обучения. Это дало еще 8мб текстов. В сумме получается ~45мб текстов. Мало, но сойдет.

Далее, перейдем к самой игре. Для всех экспериментов я взял форк оригинального AI dungeon. В него добавили несколько хороших особенностей, но на них я не буду особенно останавливаться. Подружить данный форк с русским языком оказалось очень просто - достаточно просто в файлах заменить английские местоимения на русские (you say - ты сказал) С обучением тоже не было никаких особенностей: в colab влезает только маленькая rugpt2 модель.

В игровом мире сюжет разворачивается куда интереснее, чем в реальности
В игровом мире сюжет разворачивается куда интереснее, чем в реальности

Я обучил две модели:  с диалогами и без, так как диалоги не соответствуют структуре CYOA. И модель действительно начала генерировать нечто осмысленное. Это конечно не уровень https://play.aidungeon.io/, но бесплатно и на русском. Что еще для счастья надо?

Пример заранее готового сюжета
Пример заранее готового сюжета

Заключение

Готовый колаб

И гитхаб, где русская модель обитает

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