Как стать автором
Обновить

Реально Бесконечное (лето) RuGPT3.5: Генерация новеллы на ходу нейросетью

Уровень сложностиСредний
Время на прочтение24 мин
Количество просмотров25K
Всего голосов 27: ↑26 и ↓1+30
Комментарии23

Комментарии 23

Мне кажется, что кусок текста, который вы назвали удручающим результатом, гораздо выразительнее, чем то, что сеть сгенерировала более удачно. Я про этот пассаж

И танцевала балет!

Мысли (в панике): Что за…?!

Ольга Дмитриевна (танцуя): А вот и ты!

Мысли(в панике): Что за?!

Ольга Дмитриева: А вот и я!

Мысли в панике: Что за?!

Мысли в ужасе: Что за?!
Мысли: Что за?!
Ольга Дмитриевна: Ну что ты стоишь?

ситуация то - страшная

Я может глупость спрошу, почему в тексте везде про "Бесконечное лето", а картинки из "Врат Штейна"? У меня разрыв шаблона.

Автор попал то ли в микроволновку, то ли под грузовик...

(шутка, а вообще статья интересная)

такие вот, суровые микроволновки нынче

Оно не "бесконечное" оно будет "хаотичное".
Постоянно (как минимум немного) разные тексты и картинки. Унылого качества(хотя "нетленок" от VN ждать не приходится, но всеже, тут может вообще бред начаться, недетерминированность это такое себе развлечение).

А если генерировать заранее и поставлять уже готовое - потеряем ту самую "как бы бесконечность".

НЛО прилетело и опубликовало эту надпись здесь

Kobold так умеет, но это не vn, а общее. Проблема в том, что это надо либо vram, либо терпение - ждать пока в орде запрос обработается бесплатно без смс и без регистрации.
У меня stable diffusion 1.5 и нормальные llm одновременно не вмещаются. Есть также коммерческий Endless Visual Novel(Так оригинально называется). free tier не впечатлил.

Есть ещё AI roguelite в стиме. Умеет использовать бесплатные облака и орду как для текста, так и для картинок. Однако эту генеративную сову пробуют натянуть на глобус обычных компьютерных рпг с кубиками. Тут нельзя расписать прозой как ты сражаешься, чтобы получить результат. Тут обычные кубики. написать действие можно, но оео мало к чему приводило. Плюс игра создавала большие картинки для иконок и просто скейлила их на ходу, поэтому за пару часов карта начинала лагать(из-за того что там при открытии десятки 512х512 картинок уменшалось до 64х64). Забросил.

НЛО прилетело и опубликовало эту надпись здесь

А какой смысл использовать достаточно крупную модель там, где хватит и простой gpt-2 на 300M параметров? И нет проблем с зацикливанием, обучением, скоростью?

У меня модели по wh40k (en_l_wh40k_full, l_wh40k_full), WoW (ru_warcraft) и StarTrek (ru_startrek) чудесно работают и в генерацию текстов и в ролеплей при 700M параметров. А здесь испрользуется неплохая изначально модель и в ней портятся веса тренировкой на урезанном, неправильно форматировнном датасете. В итоге чем модель кормили - то и получили. К тому же при обучении LoRA вы никогда точно не знаете, какие веса заморожены и что вы обучаете. Для StableDiffusion ошибка в сотку в 50% обученных весов всё равно даст картинку "похожую" на требуемый результат, а в LLM оно так не работает, все "восторги" от быстродообученных LLM при помощи LoRA полагаются на хорошее обучение базовой модели, которое не смогли испортить. Метрики качества обучения очень условны и охватывают вовсе не генерацию того, что хочется получить.

НЛО прилетело и опубликовало эту надпись здесь

Все зависит от цели обучения. Всегда желательно перед целевым обучением прогнать хотя бы эпоху на текстах, с тематикой итоговой модели. Можно в 2 этапа, сначала на маленьких блоках (256, 512), потом на максимально возможном (2048 или менее, в зависимости от модели) и НЕ добавлять в этот базовый датасет разметку и токены (BOS, EOS и прочие). Далее уже обучать на целевом датасете.
Важно учесть, что все гайды и рекомендации для _англоязычных_ моделей не подходят под русский язык, он очень сложный и комплексный, любая ошибка будет бросаться в глаза.

Не хватит.

Чем больше у модели параметров, тем лучше она может преобразовать контекст по своим весам и тем лучше будет генерировать ответ.

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

Большая модель, по крайней мере потенциально, меньше страдает от этих проблем. Просто сравните, какой ответ дают 7B и 70B Ламы, и поймёте разницу. ИМХО, на данный момент минимальный размер удобоваримой roleplay-модели - это 13B, а оптимальный- 33B. Потому что такая модель должна создавать иллюзию осмысленного ответа, отыгрыша. По сравнению с 33B, 300M - это просто бредогенератор.

В данной ситуации, на столь малом датасете в большой модели параметры "размажутся", т.к. они достаточно общие, нет основной "линии". Поэтому большая модель здесь лишняя и на таком датасете GPT-2 (medium - large) будет меньше отходить от датасета.


Я много экспериментирую и результат, который даёт GPT-2 large на хорошем датасете, лучше, чем LoRA на крупной модели. В особенности на написании длинных связанных текстов с "скользящим окном контекста". Большая модель в таких задачах начинает повторяться, заикаться. При полном обучении результат лучше, но затраты на обучение слишком велики, плюс "закладки на вежливость" в базовой модели сильно влияют на результат.

Также любая языковая модель - это и есть бредогенератор, почти как дополненые вниманием цепи Маркова. На хорошем датасети и цепи Маркова очень хорошо работают. Еще на ЕС-1841 в дремучих годах делал текстовую RPG.

Огромные компании: Сбер, Яндекс, Вк!

Должны объединиться для создания сильной ruGPT.

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

Потому что сейчас основная проблема с coherency как раз заключается в том, что сетка забывает всё, кроме совсем небольшой последней части истории.

*нейросеть генерирует полную х...ю на уровне пиратского перевода 90-х*

Автор: да это успех!

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

Я уж было подумал, что эпоха локальных трансформерных нейросетей ушла, оставив после себя невеликое наследие (можно пересчитать на пальцах)

Странное наблюдение. За этот год вышли BTLM, XGen, Falcon, llama2, stablelm2, mpt, cerebrasgpt, pythia, не считая их тюнингов(их точно на пальцах не пересчитать). Большая часть из этого вышла летом. По-моему эпоха только пришла, особенно учитывая что раньше autogptq и exllama, да и flash attention не было, q4 не было, 11GB считалось топом и падало с OoM, .

То, что модель нельзя заставить писать rpy не значит, что rpy нельзя генерировать. Разделять диалоги по ^[А-Яа-я]+: и вычленять прозу от диалога через \n\n не требует сети.
Хотя лучше свой движок делать так как rpy для ии не задумывался.

Можно ещё в датасет добавить явные разделители частей - это нам людям всякие ((END_REPLY)) уродливы, модели все равно. И чем легче ей генерировать текст который мы можем парсить, тем лучше. Ещё можно посмотреть на промпты моделей для чатов, где описание персонажа вставляется до текста, чтобы модель лучше знала о чем она пишет. Для полноценной вн одной модели недостаточно - нужно ещё чем-то трекать кто есть кто и где с кем находится

То, что модель нельзя заставить писать rpy не значит, что rpy нельзя генерировать. Разделять диалоги по ^[А-Яа-я]+: и вычленять прозу от диалога через \n\n не требует сети.

Хотя лучше свой движок делать так как rpy для ии не задумывался.

Вешать на голый текст rpy - без проблем, вот только сценарием визуальной новеллы он от этого не станет. Renpy нужен для интеграции анимаци спрайтов и задников прямо в текст. Т.е. в память уже подгружен некий oleg.png, и мы можем его визуализировать вместе и репликами. В первую очередь, от модели будет требоваться строгое соответствие имён и умение конструировать сцену.

Я довольно далек от разработки похожих моделей и возможно не прав. Но почему бы не использовать для такого рода проекта связку из нескольких нейросетей и алгоритмов, для корректировки генерируемых результатов. Условно мы берем какой-то небольшой кусочек текущего контекста, а потом делаем поиск по сохранненой истории важных для контекста эпизодов и присоединяем их к запросу. Да и наверное будет правильным использование английского языка как базового, потому что модели к нему готовы гораздо лучше, да и если я все правильно понимаю, токенов будет тратиться меньше. На этапе обработки пропускать полученный текст через перевод (deepl и Yandex translate достаточно неплохо сейчас справляется), а потом уже отдельным алгоритмом форматировать в понятный для движка вид. Кажется, что попытки повесить все сразу на GPT приводят к "Что за?!"

Silly tavern так в целом и делает. Исторически (времена ai dungeon), использовался просто словарь world info: туда заносится информация вроде "Рин Тосака - маг-тсундере, умеет то-то и то-то", на неё вешались ключевые слова вроде "маг, Рин". Если в промпте хоть одно слово встречалось встречались - определение приклеиливали в начало промпта. Сейчас от этого не ушли, но добавили именно подобное что ты описываешь.
Расширение в SillyTavern использует именно отдельную модель для суммаризации. И векторные базы данных для "бесконечного" контекста

Спасибо за идею! Вот моя попытка её реализовать: https://habr.com/ru/companies/ruvds/articles/759226/

На счет того, что квантованая модель "сломалась". Она не сломалась, просто прямое обучение квантованой модели не поддерживается, только через peft. Это даже на сайте HF написано

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории