Skip to content

🤪 Русскоязычный чат-бот для Discord на архитектуре Transformer

License

Notifications You must be signed in to change notification settings

sergree/DolboNet

Repository files navigation

Dear English speaking users, unfortunately this project is only in Russian at the moment. Sorry for the inconvenience.

DolboNet

Привет!

Мы рады представить Вам нашу разработку - Русскоязычный чат-бот для Discord на архитектуре Transformer.

Нейронная сеть обучена на 36M+ публично доступных сообщениях наиболее популярных русскоязычных серверов Discord в течение одной эпохи (5 суток на GTX 1080). Обучение проходило по принципу: какое сообщение вероятнее всего будет отправлено после 10-ти предыдущих на уровне character trigram embeddings.

Дота?

Данный бот не использует готовую базу данных сообщений, а генерирует новые уникальные сообщения, реализуя концепцию seq2seq на архитектуре Transformer. Основа сети взята из этого руководства по TensorFlow 2.

Дурачок

Эта модель была актуальна в 2019 году, но довольно быстро устарела. Вы можете найти что-то более качественное и современное, проследовав сюда.

Поехали! 🚀

Установка

Илон

Windows 10 64-bit

Протестировано на 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 в настройках аккаунта бота Message Content Intent
  • И наконец, запустите бота: python bot.py
  • Бот будет загружаться 5-10 минут

Бот заработает только на 64-разрядной версии Windows и Python.

Ubuntu 20.04 LTS

Протестировано на 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 в настройках аккаунта бота Message Content Intent
  • И наконец, запустите бота: python3 bot.py
  • Бот будет загружаться 5-10 минут

Поддержка GPU

Если на машине присутствует видеокарта NVIDIA, то Вы можете запустить бота используя CUDA, что даст прирост в скорости работы.

  • Удалите tensorflow, если успели установить зависимости: pip uninstall tensorflow
  • Установите CUDA® Toolkit и cuDNN SDK - инструкция
  • Установите pip install tensorflow-gpu>=2.3.1 или pip install -r requirements_gpu.txt

Хз

⚠️ Не советуем настраивать поддержку GPU, если Вы делаете это впервые и у Вас нет желания потратить на процесс установки весь вечер ⚠️

Дополнительные настройки

В файле config.py можно отредактировать некоторые параметры, чтобы изменить характер и поведение бота:

Значение Описание
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

Остальные параметры лучше не редактировать.

Кофе

Кофе

☕ Если Вы заинтересованы в развитии проекта, Вы можете купить мне кофе. ☕

Спасибо! 🙏

FAQ

У меня половина сервера таких долбонетов, зачем нужен ещё один?

  • Он может помогать в модерации:

Плохо

  • Иногда даже очень хорошо:

ПоФорме

  • Любит аниме:

Anime

  • Делится свежими новостями:

News

  • А ещё он не даст заскучать:

Pings

  • Ну и, конечно же, у него отличный вкус:

Blind

А если серьёзно, причина только одна.

Хостите ли вы этого бота? Могу ли я обойтись публичной версией? Дайте ссылку!

Ссылка. Бот доступен не всегда и иногда отвечает медленно. Мы не хостим публичную версию бота. Чтобы он появился на Вашем Discord сервере, его необходимо установить.

На каких серверах этот бот уже есть?

Мы знаем, что бот уже хостится здесь:

Напишите нам, чтобы попасть в этот список.

Что-то он в основном бессвязный бред отправляет. 🤔

Бред

Да, есть такое. Но иногда получается забавно.

Это же бесполезная фигня, вы понимаете?

Конечно. Как и многое другое в нашем современном мире.

Бот отправил мне оскорбление или угрозу! Беспредел! 😠

Юра

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

Что насчёт английского языка?

Транслит

На данном этапе мы решили не расходовать ёмкость сети на латинские триграммы. Латиница автоматически транслитерируется в кириллицу с помощью opendatakosovo/cyrillic-transliteration. Мы тестировали много подобных библиотек, эта - самая быстрая.

Почему триграммы?

Потому-что великий и могучий. Идея, конечно же, не наша, а взята из этой книги.

Может было бы лучше использовать стемминг?

В данном кейсе нет. Так как лдюи в чатах пиушт с очепятками, а инагда с ашебками. A inogda translitom, ile fse vmesti. 🤪

Другое дело википедию или новостные ленты разбирать.

Он и эмодзи умеет отправлять?

Emoji

Да. Только пока рандомно. Всем кастомным эмодзи присвоен единый токен в словаре. В будущем есть планы привязать CNN с классификатором.

Вы просто скопировали гайд для TensorFlow 2, что вы сделали сами?

  • Алгоритм токенизации русского текста и разбора сущностей Discord: упоминания пользователей / ролей / каналов, ссылки, эмодзи и т.д.
  • Перелопатили уйму доступных реализаций Transformer
  • Нашли подходящую реализацию и связали её с нашим токенизатором и Discord API
  • Спарсили 36M+ публичных сообщений русскоязычного Discord комьюнити и обучили трансформер на нём
  • Напечатали этот текст

А как же LSTM?

Мы просто оставим это здесь.

Что дальше?

  • Больше парсить, дольше обучать
  • CNN для классификации эмодзи без учителя
  • Пробуем Universal Transformer
  • И Transformer XL
  • Если не закончится кофе

Пошла

🤖

About

🤪 Русскоязычный чат-бот для Discord на архитектуре Transformer

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

No packages published

Languages