Dear English speaking users, unfortunately this project is only in Russian at the moment. Sorry for the inconvenience.
Мы рады представить Вам нашу разработку - Русскоязычный чат-бот для Discord на архитектуре Transformer.
Нейронная сеть обучена на 36M+ публично доступных сообщениях наиболее популярных русскоязычных серверов Discord в течение одной эпохи (5 суток на GTX 1080). Обучение проходило по принципу: какое сообщение вероятнее всего будет отправлено после 10-ти предыдущих на уровне character trigram embeddings.
Данный бот не использует готовую базу данных сообщений, а генерирует новые уникальные сообщения, реализуя концепцию seq2seq на архитектуре Transformer. Основа сети взята из этого руководства по TensorFlow 2.
Эта модель была актуальна в 2019 году, но довольно быстро устарела. Вы можете найти что-то более качественное и современное, проследовав сюда.
Поехали! 🚀
Протестировано на 2 x 2.6 ГГц CPU + 4 ГБ RAM.
- Установите Python 3.8 64-bit
- При установке Python 3.8 64-bit должны стоять галочки
Install launcher for all users (recommended)
иAdd Python 3.8 to PATH
- Установите Git
- Установите Visual C++ Redistributable - необходим для
scipy
- Откройте Git Bash, щелкнув правой кнопкой мыши по пустому месту внутри папки (например, Мои документы) и выбрав
Git Bash Here
- Скачайте репозиторий:
git clone https://github.com/sergree/DolboNet
- Перейдите в папку:
cd DolboNet
- Выполните
pip install -r requirements.txt
в появившемся окне - Получите токен вашего бота - инструкция
- Отредактируйте файл конфигурации
config.py
, вставив токен бота вtoken = "..."
⚠️ Включите Message Content Intent в настройках аккаунта бота- И наконец, запустите бота:
python bot.py
- Бот будет загружаться 5-10 минут
Бот заработает только на 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 = "..."
⚠️ Включите Message Content Intent в настройках аккаунта бота- И наконец, запустите бота:
python3 bot.py
- Бот будет загружаться 5-10 минут
Если на машине присутствует видеокарта NVIDIA, то Вы можете запустить бота используя CUDA, что даст прирост в скорости работы.
- Удалите
tensorflow
, если успели установить зависимости:pip uninstall tensorflow
- Установите CUDA® Toolkit и cuDNN SDK - инструкция
- Установите
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, что вы сделали сами?
- Алгоритм токенизации русского текста и разбора сущностей Discord: упоминания пользователей / ролей / каналов, ссылки, эмодзи и т.д.
- Перелопатили уйму доступных реализаций Transformer
- Нашли подходящую реализацию и связали её с нашим токенизатором и Discord API
- Спарсили 36M+ публичных сообщений русскоязычного Discord комьюнити и обучили трансформер на нём
- Напечатали этот текст
А как же LSTM?
Мы просто оставим это здесь.
Что дальше?
- Больше парсить, дольше обучать
- CNN для классификации эмодзи без учителя
- Пробуем Universal Transformer
- И Transformer XL
- Если не закончится кофе
🤖