Как стать автором
Обновить
22
0
3ndetz @ozlik

Нейросети и всё такое

Отправить сообщение

Кажется, это из раздела, где мы думали над ником. Tyan-таки стало частью ника и в этом моменте я так показывал процесс формирования ника, ну а ники обычно пишут английскими символами, вроде бы все логично, не?) Или вы умерли от кринжа, потому что я не вставил в статью японский иероглиф и инструкцию по его прочтению?

А вот и не угадали)) Скорость на 3090 у меня в разы ниже с запуском Mistral 7b. Я жду 30 сек за 100 токенов, друг с 4090 - 5-15 секунд)) Видеопамяти у обеих 24G GDDR6X. Там влияет как раз новая технология ядер cuda, они в разы быстрее на новых видюхах, да и их количество больше на треть, как тензорных ядер, так и cuda.

Для фильтра вам нужна хорошая классификационная модель по типу BERT. Но для русского языка это больная тема, т.к. все существующие модели очень слабы, много ошибаются и часто обманываются. Можете посмотреть демку от deeppavlov как пример (там есть модель определения токсичности, и она ошибается на элементарных запросах). Какую-нибудь BERT подобную русскую модель можете попробовать взять и попробовать дообучить на датасете ваших комментариев, который, кстати, можно сгенерировать при помощи openai.

Как вариант, можно использовать SBERT. Это модель для определения наиболее сходных по смыслу предложений. В комментариях к этой статье можете отрыть годный пример использования. Для нормальной работы с этим вариантом вам понадобится придумать под сотню (а лучше тысячу) различных малополезных и полезных комментариев и сравнить их моделью с текущим комментарием.

Ну и на десерт, костыльный прикол-способ — заставить генеративную модель по типу FRED-T5 выносить вердикт о полезности сообщения в чате и выдавать что-то вроде "допуск=да" или "допуск=нет")) Для этого варианта на вход просто подаёте промпт с парой примеров этих комментов, как это делал я в этой статье с никами. Этот фан-способ очень легко реализовать, но он адски неоптимизирован (3 сек на каждый запрос, ага) и не всегда может следовать разметке текста (есть вероятность, что вместо ожидаемого результата вроде да\нет он вообще выдаст какой-нибудь бред с рандомными ссылками из инета).

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

Про шаблонизатор: на запрос, в среднем, уходит не менее 1 сек независимо от размера, а, если более 1 запроса, представить страшно, сколько вся генерация займет времени..

Фред с самого начала мне очень понравился тем, что он понимает структуру. В теории, его можно даже пихать в генерацию кода (при дообучении), он четко следит за структурой, в отличие от других русских моделей. Вот я и решил в качестве эксперимента дать ему возможность самому принимать шаблонные решения типа выбора команды или эмоции.

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

какой был формат запроса

Старый формат запроса:

*описание действующих лиц и ситуации*

{Q: вопрос (образец)

A: ответ (образец)}*n раз

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

{Q и A контекста в том же формате}

Q: вопрос

A:(продолжение модели)

Новый формат:

*описание действующих лиц и ситуации*

{Q: вопрос (образец)

A: ответ (образец)}*n раз

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

{Контекст в другом формате, вместо букв Q и A напрямую писалось Вопрос и Ответ соответственно}

Q: вопрос

A:(продолжение модели)

Возможно, выглядит бредово, но этот рефакторинг запроса очень помог) И генерация качественнее стала, будто сетка стала "мыслить глубже".

Буду, кстати, очень рад, если сможете посоветовать пару нейронок-классификаторов, подходящих для этого применения)

Очень странно, но даже при нграм=0 он допускает частые повторения... Разделил по токенам, одни и те же последовательности прям внаглую фигачит. Температура немного помогает, но она очень портит структуру ответа (у меня четко должна в скобках отдавать эмоцию и команду из списка). Вообще есть ощущение, что параметры нграм и репит пенальти вообще не влияют на генерацию..

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

no_repeat_ngram_size вообще походу внаглую игнорируется при генерации, берет и прямо копии частей затравки вставляет в ответ... При любой длине. Может я что-то делаю не так?

параметры generate(), которые я использую

do_sample=True,

top_p=50,

temperature=0.35,

repetition_penalty=2.0,

min_length=10,

max_length=100,

no_repeat_ngram_size = 5,

early_stopping=True

про женщин шутка, конечно же))

Большое спасибо за код, может быть очень полезно для исключения большей части самых вредных диалогов!

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

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

необоснованная агрессия
необоснованная агрессия

Также модель не всегда может корректно обрабатывать "запрещенные" темы, несмотря на то, что в запросе есть шаблон ответа на подобную запрещенную тему.

так модель ответила спустя пару попыток (содержит сомнительный элемент)
так модель ответила спустя пару попыток (содержит сомнительный элемент)
как-то так модель должна отвечать (согласно шаблону)
как-то так модель должна отвечать (согласно шаблону)

Кстати, у этой модели есть кое-какой баг.. У меня в чат-боте сейчас запрос длиной около 500 токенов. Раньше, когда запрос был поменьше, она спокойно выдавала ответ и всё было норм. В начале запроса надо вводить спецтокен <LM>, в конце </s>. Так вот, когда запрос стал длиной более 500 токенов, модель начала выдавать полную несуразицу, будто обрезала начало и теряла токен <LM>. Потом я [случайно] запихал токен начала <LM> в конец запроса, и всё снова заработало... Странно всё это, не логично.. Если его убрать, она опять начнет выдавать бред в виде случайных символов...

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

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

Классификационные модели в русском весьма слабы и требовательны (как и женщины). Приличного успеха там добился deeppavlov, но всё равно слабовато для нормального использования(

Просто классификационная модель, которая отслеживает семантику, весит 4 чертовых гига. Просто семантику текста! И то, эта модель работает "весьма относительно"...

Способов испортить ник всякими гадкими замыслами настолько много, что в идеале нужна модель, способная понять его реальный "смысл", а не просто классифицировать как допуск\нет. Как вариант, можно использовать 2 модели: первая определяет смысл, вторая по смысловому описанию определяет, есть ли нарушения в нике, или нет. Но опять же, я не знаю таких классификационных моделей в русском языке, которые безошибочно способны определять какую-либо характеристику текста. Если такие есть, буду очень рад увидеть)

Клиент-сервер вроде как уже основа жанра для любых систем с ИИ. Любая модель весит до**рища, и, если куда-то встраивать, эта архитектура просто неизбежна...

Что касается 18+, то с этим всё настолько в порядке, что, даже если в запросе нет ни единого матерного или пошлого слова, или даже намека, модель с небольшой вероятностью захочет в сексуальные темы. Я намучился с чатботом на фреде, и, порой, мне выскакивал порнорассказ там, где, это, поверьте, совсем не нужно)) Так что, если использовать где-то профессионально, после дообучения в любом случае ещё понадобится мутить фильтр..

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

Осторожно, тут есть пара токсичных моментов)

Первые три раза введено "FoMu", остальные на русском - "ФоМу".
Первые три раза введено "FoMu", остальные на русском - "ФоМу".

Ещё один вариант рецензии на этот ник
Ещё один вариант рецензии на этот ник

Естессно надо дообучать, если ваша цель - профессиональное использование. При обучении фреда использовалось всего 300гб текста, и английского там было не так уж много. Удивительно, что она вообще его различает)

С другой стороны, смайл, это ведь что-то очевидное, а модель выдала неожиданный и не лишенный смысла, весёлый ответ)

Да, я сказал пару слов об этом полезном применении в статье. Тут скорее просто фан-тест генеративной языковой модели, не совсем подходящей под задачи классификации. Фильтры никнеймов уже давно есть в нормальных играх, но они завязаны скорее на тупых алгоритмах, чем на нейросетях.

Для этого дела нужна мощная классификационная модель вроде BERT, но в русском языке по-настоящему рабочих+открытых нет (я пробовал, например, семантическую модель от deeppavlov, но это прямо скажем "такое", ну явно не подходит для больших проектов).

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

Здесь в статье, кстати, по формату, кроме критики ника, она ещё отдаёт эмоцию. Так вот, вместо эмоции можно написать что-то вроде "допуск=да" после анализа ника и вот, вы грубо говоря получаете первую версию импровизированного мега-нейро-фильтра ников (ну и конечно же предварительно надо поработать с промптом, чтобы там было то что вам нужно, запрещенные темы для ников, политика, все дела + примеры ников которые получили отказ по разным причинам..)

Информация

В рейтинге
1 978-й
Откуда
Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Motion Designer, ML Enthusiast
Lead
Python
Adobe After Effects
Pytorch
NLP
C#
Java
Node.js
Intellij IDEA
Docker
Computer vision