Моя попытка создать аналог aidungeon, novelai, holo AI для русского языка. Хоть я и пытался сделать всё с абсолютного нуля, получилось не плохо.

В данном посте я затрону технические проблемы и расскажу про самые ранние попытки создать gamio.ru

Первые попытки осуществить цель

Всё началось в середине 2021 года. Тогда я познакомился с AI21 Labs (это своеобразный аналог, тогда закрытого GPT-3. Они предоставляли бесплатный, ограниченный доступ к своей языковой модели J1)

Я запросил у них кастомную модель J1, имеющая 7 миллиардов параметров. Не буду вдаваться в подробности обучения, но в конечном итоге я получил 2 версии нейросети.

Полученные модели работали исключительно на английском языке, поэтому криво-косо, но я вставил api переводчика и запустил сайт. (Правда, проект я закрыл. Доступ был бесплатным, а за услуги Ai21 Labs нужно было кому-то платить.)

Что получилось

Расстроившись, на этом я не стал останавливаться. Забросив Ai21 labs с их J1, я стал искать дешёвые способы для создания своей, кастомной модели.

Обучение ruGPT3

Вновь загоревшись идеей, я решил обучить аж 3 модели ruGPT3 сразу! К тому моменту у меня уже появился сервер, поэтому размещать модели я мог на нём.

Собрав и переведя множество данных с chooseyourstory.com, я начал обучение ruGPT3-Large/Medium/Small на этих данных. Обучение в общей сложности заняло чуть больше недели. Я был недоволен результатом.

Так и не вышла в свет версия gamio.ru с обученными моделями GPT. Они одиноко пылятся на hugging face...

Простое решение

Мои мучения были не долгие, взяв оригинальную модель GPT2-XL с репозитория AiDungeon2 и подключив ко всему этому переводчик "opus-mt" я получил ядерную смесь. (Переводчик мало влиял на скорость всей генерации. Зато он умнее всяких Яндексов и Гуглов.)

Нейросеть весила аж 6 гб! Загрузив через костыли GPT на сервер, я был вновь разочарован! Да, такая комбинация была умнее чем 2 предыдущие попытки, но работала она жуть как медленно. Поэтому я решил сконвертировать модель в лёгкий и удобный формат.

Переведя нейронную сеть из Tensorflow-формата в PyTorch и назвав её "gameGPT", я не только сэкономил 3 гб места на диске и оперативную память сервера, но ещё и ускорил всё это дело.

Что получилось

GitHub с gameGPT - https://github.com/0x7o/gameGPT

Чуть-чуть проблем

Нейросеть в PyTorch формате отличалась от Tensorflow версии. Просто подобрав параметры для gameGPT, я сделал новую версию ещё лучше.

generate(text, max_length=num_tokens(text) + 55, repetition_penalty=5.0, temperature=0.9, num_beams=2, top_k=50, top_p=0.95)

Связь gameGPT с gamio.ru

Что такое gamio? Это сайт построенный на django с добавлением JS. Всё, что вам необходимо знать.

Gamio создаёт своеобразную очередь из запросов к gameGPT (это была необходимость. При параллельных вычислениях сервер входит в шок.). gameGPT последовательно обрабатывает каждый запрос к нему.

На вход к модели подаётся история мира + последние 10 действия игрока. На выходе генерируется 55 токенов.

Что в итоге?

Мне удалось создать то, что я хотел. Получился отличный сервис gamio.ru. На нём уже поиграли свыше 1000 человек (для меня это рекорд :)) и все вполне довольны.

Далее будут только улучшения и обновления. Следите за новостями :)

Комментарии (11)


  1. FenixFly
    18.02.2022 17:53
    +1

    Думаю в начало статьи будет полезно описать что такое aidungeon, novelai, holo AI и какая задача решается в целом. Может даже с примерами.


  1. MadRogue
    18.02.2022 18:00
    +2

    Попробовал поиграть, но очень быстро сдался. Нейросеть переиграла меня.

    Вы усталый работник супермаркета. Вы целыми днями стоите за кассой. Мимо вас проходит сотни людей, которых вы давно не можете запомнить в лицо. Сегодня наступил день, когда произойдет какое-то необычное событие, которое перевернет весь мир. Неожиданно перед вами появляется необычный человек.

    > Вы приветствуете его. 

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

    > Вы берете со стола карты и снимаете трусы. 

    Сначала он не заметит, но как только ты начнешь снимать свою одежду, он повернется и увидит, что ты делаешь.

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

    "Простите, сэр, я ничего не могу с этим поделать." Мужчина хмурился. Он не смотрит на вас так, как будто думает, что вы идиот, который не умеет правильно пользоваться машиной.

    Ключ доступа: 6HjRIoIbNBqE9EsDsqHJ


    1. S_A
      19.02.2022 15:00
      +1

      меня еще быстрее :) угарная штука!


  1. Zerushka
    18.02.2022 18:23

    Описал свою жизнь в игре. Мне ответили в точности как я думаю.


  1. Dekmabot
    19.02.2022 22:03
    +1

    Поиграл, забавно придумывает, витиевато) Только в итоге сломалось, после 5 раунда перекидывает просто на результаты, не добавляя новых сообщений, но всё равно прикольно) https://gamio.ru/game/?key=VgsuuOaUeB7AdwCRDqrp


    1. 0x7o Автор
      20.02.2022 06:41

      Вы попытались продолжить историю, а не сделать действие. Грубо говоря выполнили работу за нейросеть. Поэтому она ничего не выдала :)


  1. tmnhy
    20.02.2022 17:36

    они носят длинные мечи, топоры, копья, щиты и другое стрелковое оружие

    Вдобавок, много орфографических ошибок. Судя по "получилось не плохо" - это ожидаемо.


    1. 0x7o Автор
      20.02.2022 17:40

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


      1. MadRogue
        21.02.2022 10:03
        -1

        Все недочёты что должны будут сделать? Исправиться.


        1. 0x7o Автор
          21.02.2022 13:14

          Человеку свойственно ошибаться


          1. MadRogue
            21.02.2022 13:34
            -2

            Ничего не имею против. Сам не без греха. Но мало ли будет полезен простой способ определения правильности написания "тся"/"ться". Достаточно задать вопрос, что бы ответом было проверяемое слово и посмотреть есть ли мягкий знак в вопросе.