Мы рады представить Вам нашу разработку - Русскоязычный чат-бот для Discord на архитектуре Transformer.
Нейронная сеть обучена на 36M+ публично доступных сообщениях наиболее популярных русскоязычных серверов Discord в течение одной эпохи (5 суток на GTX 1080). Обучение проходило по принципу: какое сообщение вероятнее всего будет отправлено после 10-ти предыдущих на уровне character trigram embeddings.
Данный бот не использует готовую базу данных сообщений, а генерирует новые уникальные сообщения, реализуя концепцию seq2seq на архитектуре Transformer. Основа сети взята из этого руководства по TensorFlow 2.
Эта модель была актуальна в 2019 году, но довольно быстро устарела. Вы можете найти что-то более качественное и современное, проследовав сюда.
Поехали!
Протестировано на 2 x 2.6 ГГц CPU + 4 ГБ RAM.
Install launcher for all users (recommended)
и Add Python 3.8 to PATH
scipy
Git Bash Here
git clone https://github.com/sergree/DolboNet
cd DolboNet
pip install -r requirements.txt
в появившемся окнеconfig.py
, вставив токен бота в token = "..."
python bot.py
Бот заработает только на 64-разрядной версии Windows и Python.
Протестировано на 2 x 2.6 ГГц CPU + 2 ГБ RAM.
git clone https://github.com/sergree/DolboNet
cd DolboNet
pip3
, то установите его: sudo apt install python3-pip
pip3 install -r requirements.txt
nano config.py
, вставив токен бота в token = "..."
python3 bot.py
Если на машине присутствует видеокарта NVIDIA, то Вы можете запустить бота используя CUDA, что даст прирост в скорости работы.
tensorflow
, если успели установить зависимости: pip uninstall tensorflow
pip install tensorflow-gpu>=2.3.1
или pip install -r requirements_gpu.txt
В файле config.py
можно отредактировать некоторые параметры, чтобы изменить характер и поведение бота:
temperature
- температура семплирования - регулирует характер и разнообразие генерируемого текстаЗначение | Описание |
---|---|
0.01 | Я знаю только слово Привет |
0.3 | Попугай-повторюшка |
0.65 | По-умолчанию |
1.3 | Пьяный поэт |
3 | Уснул на клавиатуре |
Для удобства экспериментирования присутствует команда !temp значение
, которую можно отправлять в Discord, чтобы редактировать это значение на ходу. Команда работает только у пользователей с привилегией Администратор.
mention_prob
- вероятность того, что бот ответит на сообщение, в котором его упомянули. Может принимать значения от 0
до 1
. По умолчанию: 1
, т.е. 100%no_mention_prob
- вероятность того, что бот ответит на сообщение, в котором его не упоминали. Может принимать значения от 0
до 1
. По умолчанию: 0.2
, т.е. 20%command_temperature_change
- команда изменения температуры, если не нравится !temp значение
?use_delay
- эмуляция человеческой скорости печати на клавиатуре, по-умолчанию False
, т.к. на CPU процесс генерации и так не быстрыйdiscord_game_name
- статус бота в DiscordОстальные параметры лучше не редактировать.
☕ Если Вы заинтересованы в развитии проекта, Вы можете купить мне кофе. ☕
Спасибо!
У меня половина сервера таких долбонетов, зачем нужен ещё один?
А если серьёзно, причина только одна.
Хостите ли вы этого бота? Могу ли я обойтись публичной версией? Дайте ссылку!
Ссылка. Бот доступен не всегда и иногда отвечает медленно.
Мы не хостим публичную версию бота. Чтобы он появился на Вашем Discord сервере, его необходимо установить.
На каких серверах этот бот уже есть?
Мы знаем, что бот уже хостится здесь:
Напишите нам, чтобы попасть в этот список.
Что-то он в основном бессвязный бред отправляет. ?
Да, есть такое. Но иногда получается забавно.
Это же бесполезная фигня, вы понимаете?
Конечно. Как и многое другое в нашем современном мире.
Бот отправил мне оскорбление или угрозу! Беспредел! ?
Нейронная сеть бота лишь отражает публичные данные, на которых проходило обучение. Возможно, это тревожный звоночек о том, что стало с нашим обществом. В любом случае, мы не хотели.
Что насчёт английского языка?
На данном этапе мы решили не расходовать ёмкость сети на латинские триграммы. Латиница автоматически транслитерируется в кириллицу с помощью opendatakosovo/cyrillic-transliteration. Мы тестировали много подобных библиотек, эта - самая быстрая.
Почему триграммы?
Потому-что великий и могучий. Идея, конечно же, не наша, а взята из этой книги.
Может было бы лучше использовать стемминг?
В данном кейсе нет. Так как лдюи в чатах пиушт с очепятками, а инагда с ашебками. A inogda translitom, ile fse vmesti. ?
Другое дело википедию или новостные ленты разбирать.
Он и эмодзи умеет отправлять?
Да. Только пока рандомно. Всем кастомным эмодзи присвоен единый токен в словаре. В будущем есть планы привязать CNN с классификатором.
Вы просто скопировали гайд для TensorFlow 2, что вы сделали сами?
А как же LSTM?
Мы просто оставим это здесь.
Что дальше?
?