начать бесплатно

Граф истории

Граф истории

Если вы интересуетесь нейросетями или давно играете в Gamio — вы уже знаете, что такое контекстное окно. Это термин, которым называется объём текстовой информации, который нейросеть может обработать, чтобы сгенерировать ответ — вашу историю в Gamio, например. Всё, что не входит в контекстное окно, не может быть использовано при генерации — то есть даже если вы в начале истории заходили в таверну и знакомились с её хозяином, в более дешёвых сервисах, чем Gamio, модель просто забудет об этом и не сможет вспомнить имя, когда начало истории “выпадет” из её памяти.

Как же можно добиться того, чтобы модель всё-таки помнила об этом? Мы придумали и сейчас вам расскажем!

Почему нельзя просто включить максимальную память

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

На самом деле нет: во-первых, это дорого. Если вы выставите максимальную память на нашей лучшей модели, Истинном ИИ, то один ход будет стоить сотни Глифов — умопомрачительная цена, это даже больше, чем даёт Стартовый пакет Глифов.

Во-вторых, основная проблема заключается в том, что чем больше фактов нейросеть "помнит", чем больше материала в её контекстном окне — тем хуже получается её ответ. Удивительно и контринтуитивно, не правда ли? Кажется, что если "скормить" нейросети весь возможный лор вашей игры, расписать ей максимально подробно всех персонажей и их взаимоотношения, объяснить, кто кого любит, а кто кого ненавидит и где всё это происходит — это поможет ей не ошибаться. Но на самом деле в игру вступает деградация контекстного окна: этот феномен достаточно сложен, и вы можете почитать о нём самостоятельно. Но главное, что важно понимать: большая память не равна лучшему качеству модели. Можно привести такую аналогию: если ученика перед уроком на конкретную тему заставить прочитать весь учебник, он ответит хуже, чем ученик, который прочитал только нужную главу. Слишком большое количество информации путает и людей, и нейросети.

Как мы решали это раньше

Что же тогда, играть на маленькой памяти? Мы опять вернулись к тому, с чего начали — начало игры "пропадает" из памяти модели. “Но как тогда в неё хоть что-то поместится — я сделаю пару ходов, и моя игра закончится, потому что модель забудет начало — в чём смысл?”

Начнём с того, что ваша игра не закончится. До этого обновления у нас работала система сжатия: ваши прошлые действия читались специальной отдельной моделью, которая делала их краткий пересказ раз в несколько ходов, чтобы держать объём памяти, занимаемый прошлыми действиями, под контролем — но при этом оставлять у модели, которая пишет вашу историю, понимание цепочки событий, которые происходят в вашей игре.

А ещё в помощь к этой модели, которая делала пересказ, мы создали систему Карточек, в которые ещё одна отдельная модель выписывала ключевые факты: персонажей и их характер с внешним видом; локации, где происходит ваша история; важные предметы и даже события.

Таким образом, мы получили систему, которая снизила случаи ошибок моделей на 70%, по отзывам пользователей.

В чём была проблема

Так в чём же проблема, зачем ещё какое-то обновление?

В том, что пересказ — это всегда решение оставить что-то позади, забыть. Так или иначе, но ошибки иногда случаются. От этого не застрахованы ни одна игра и ни один сервис, которые работают на основе технологии нейросетей — просто из-за их архитектуры. К тому же значительно вырастает шанс ошибки на длинных играх: когда на 200 ходу модель-пересказчик делает пересказ самого начала уже в 20 раз, и от изначальной завязки остаётся только сухой факт "он вышел из дома, его переехал грузовик", а более мелкие факты — например, что грузовик был зелёный — и вовсе будут забыты.

Получается, что модель начинает играть в испорченный телефон сама с собой в прошлом, и, конечно, это сказывается на качестве генераций, давая мелким ошибкам иногда всё же случаться, а поэтому мы не могли оставить эту проблему без внимания. Как-никак, но наша цель в Gamio — создать лучший опыт для русскоязычных пользователей в сфере ИИ-игр, и мы идём к этой цели.

Решение — Граф истории

Мы создали систему Графа Истории.

Он работает как все предыдущие наши системы, только лучше — мы объединили воедино систему пересказа и Карточек. Теперь каждый ваш ход становится источником Фактов — которые записываются в Вершины Графа, которыми может быть всё, что угодно: персонажи, события, локации и даже какие-то группы или фракции.

В чём разница с тем, что было раньше?

Для начала, активация: если до этого система Карточек опиралась на ключевые слова, то теперь активация происходит по смыслу. На каждом ходу наша система сканирует весь текст ваших последних генераций и извлекает из Графа все релевантные Факты сама. Также мы решили проблему, когда система создаёт слишком много или совсем мало Карточек — теперь мы просто фиксируем все возможные факты. И самое главное, появилась связь. Теперь, если какой-то персонаж был задействован в генерации ответа, то нейросеть, генерирующая ответ, получит информацию не только об этом персонаже, но и обо всём и всех, с чем и кем он связан.

Разберём на примере

Давайте разберём на примере: у нас есть Герой Дима. Он пришёл в Таверну, которой владеет Борис, и тот рассказал Диме, что его, Бориса, брата, которого зовут Геннадий, похитили злобные крысы-людоеды. Дима пообещал помочь и спас Геннадия.

Граф истории на примере: вершины Димы, Таверны, Бориса, Геннадия, квеста на спасение и крыс-людоедов и связи между ними

В графе появятся 5 новых вершин (Дима как вершина Героя у нас уже есть): для локации — Таверны; персонажей — Бориса и Геннадия; события — квеста на спасение; и группы — крыс-людоедов. Внутрь каждой вершины будут записаны Факты из истории, которую вы с моделью сотворите: что Борис очень любит своего брата, что Геннадий плохо дерётся с крысами-людоедами, а сами крысы боятся огня, а в квесте будет записано, как Дима спас Геннадия — закидав крыс огненными шарами.

В следующий раз, когда Дима попадёт в передрягу с крысами-людоедами — модель вспомнит и про их слабости, а не выдумает вновь; и как Дима с ними справился — то есть то, что он умеет кидать файерболы; и про Бориса с Геннадием, и, может быть, добавит комментарий, что ваш герой "внутренне содрогнулся, вспомнив ужасные раны, которые оставили когти крыс-людоедов на ноге Геннадия, которого Дима когда-то спас". Все факты в вашей истории теперь будут связаны — как и в реальной книге, как и в реальной жизни.

Кроме того, Граф живой: если после того, как Дима спас Геннадия, он поссорился с Борисом, потому что он не заплатил Диме — то в Граф будут зафиксированы все факты об их взаимоотношениях в динамике: с чего началось и к чему пришло.

Что это даёт

Это работает ещё лучше на огромных Графах, с сотнями Вершин и тысячами фактов — наш специальный алгоритм будет собирать все релевантные и связанные события вместе, передавая модели полностью все факты, которые могут ей понадобиться, чтобы создать лучший ответ.

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

Однако вы всё ещё можете создать карточку самостоятельно: она появится как новая вершина Графа, а при её использовании алгоритм сам будет строить связи с нужными Вершинами.

И главное — теперь модель не забудет имя ни одного встреченного вами персонажа в вашей истории. Тавернщик из начала не останется безымянным.

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

Приятной игры |