Учим AI Dungeon говорить по-русски

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/, но бесплатно и на русском. Что еще для счастья надо?

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

Заключение

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

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

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

Similar posts

Ads
AdBlock has stolen the banner, but banners are not teeth — they will be back

More

Comments 9

    +1
    А сколько памяти на картах бесплатного колаба? На 16Gb Colab Pro мне удалось файнтюнить ruGPT-3 Medium, по идее, она более хорошие результаты диалогов должна выдать
      +1
      Странно, у меня как раз в Colab Pro не влезла средняя модель(ruGPT-3 Medium). Ты какие параметры задавал?
      +1
      Почему нельзя просто загнать туда все имеющиеся на русском языке фэнтези-книги?
      Ну и странно, что только готика — есть же балдурс гейт и все сиквелы, планескейп, дивинити…
        +1

        Нужны размеченные книги. И это должны быть книги в жанре CYOA, упомянутом в статье — как у Гарри Гаррисона в "Стальная Крыса поёт Блюз" был аппендикс "Теперь ты — Стальная Крыса".


        Ну и странно, что только готика

        Готики 1 и 2 (единственные игры, которые оказались на моем ноутбуке)
          +1
          Нужны размеченные книги.

          А нельзя для начала включить неразмеченные?
          Ну например просто диалоги из книг повырезать, чтобы улучшить функцию «say»?
        +1
        А можно ли как-то управлять весом данных? Например указать, что вот эта книга весит в 10 раз больше чем другие. В смысле управлять степенью влияния конкретных кусков тренировочних данных на тренируемую нейросеть.
          +2
          Да, можно управлять весами по-разному (простое решение в лоб — продублировать 10 раз нужный кусок в тренировочных данных). Но это может привести к тому, что модель выродится в простой генератор этого куска текста, так что разнообразие в тренировочных данных лучше сохранять.
          +1
          Спасибо, очень интересный проект!
          Кстати, я играл в AI Dungeon на русском — просто поставил рядом плагин Google Translator. Вывод он переводил на русский автоматически. Ввод я делал, переводя команды с русского на английский на отдельной странице, и копируя результат.
          Получалось очень прилично :)
            +3
            Насчёт «где достать»: есть такой open source движок для текство-графических игр INSTEAD, и есть репозиторий игр к нему. По жанровой принадлежности и качеству придётся фильтровать, разумеется.

            Only users with full accounts can post comments. Log in, please.