/bot_toxic

Vk bot with neural network for toxic comments classification

Primary LanguagePython

bot_toxic

Чат-бот для Вконтакте, использующий нейросеть.

Вступление

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

Бот на языке Python с использованием базы данных MySQL. Для запуска требуется предустановленный Docker.

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

Описание

Бот работает как в своих личных сообщениях, так и в беседах, если его туда добавить.

  • Любое написанное в беседе сообщение (кроме команд) анализируется ботом и классифицируется на 'токсичное' или 'нетоксичное'.
  • Любые сообщения (за исключением команд), написанные в личные сообщения боту, ботом не рассматриваются.

Функционал бота следующий:

  • >команды - выводит список всех доступных команд.
  • >чек *ваше слово или предложение* (без звездочек) - выводит уровень токсичности вашего сообщения.
  • >моя стата - выводит количество токсичных и нетоксичных комментариев пользователя, а также его рейтинг токсичности. Если написать эту команду в личные сообщения боту, то он выдаст только глобальную статистику (по всем пользователям из всех бесед за все время). Если написать эту команду в беседе, то, помимо глобальной статистики, бот выдаст аналогичную статистику пользователя в рамках этой беседы.

Рейтинг токсичности - введенная мною метрика для численного определения токсичности пользователя. Формула рейтинга: $$R_{user} = \frac{M_{toxic}^2}{M_{all}}$$где $M_{toxic}$ - количество токсичных сообщений пользователя, а $M_{all}$ - всех. Такая метрика учитывает не только соотношение токсичных и нетоксичных сообщений пользователя, но и количество токсичных сообщений. Таким образом, у пользователя с 10-ю токсичным сообщениями из 10-ти рейтинг будет меньше, чем у человека с 11-ю токсичными из 11-ти.

  • >юзеры - выводит количество зарегистрированных пользователей. Зарегистрированным пользователь считается тогда, когда он написал хотя бы одно сообщение. Аналогично функции >моя стата выводит количество зарегистрированных пользователей в беседе, если команда была отправлена в ней.
  • >топ общий - выводит топ 10 зарегистрированных пользователей по рейтингу токсичности.
  • >топ беседы - выводит топ 10 зарегистрированных в беседе пользователей по рейтингу токсичности.

Нейросеть

Полностью мое исследование вы можете посмотреть у меня morowenka/toxic_comments_classification. Если в двух словах, то использовал я предобученную нейросеть, основанную на Bert-Transformer. Больше узнать про нейросеть вы можете тут.

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

Как запустить самостоятельно

Создание и настройка сообщества

  • Создаем сообщество в вк.
  • В настройках сообщества во вкладке 'Сообщения' ставим 'Сообщения сообщества: Включены'. В том же разделе во вкладке 'Настройки для бота' ставим галочку напротив 'Разрешать добавлять сообщество в чаты'.

По желанию можете создать чат сообщества в разделе 'Чаты'.

  • Далее переходим во вкладку 'Настройки'->'Работа с API' и создаем LongPoll API. Во вкладке 'Типы событий' отмечаем галочками все. Во вкладке 'Ключи доступа' появится длинный ключ, который надо скопировать и сохранить. Это наш токен группы, через который мы будем с ней взаимодействовать. Его нельзя никому показывать и передавать.

Настройка сервера MySQL

  • Скачиваем и устанавливаем MySQL. Я использовал MySQL версии 8.0.20, потому что последняя не работала. Старые версии вы можете найти по этой ссылке, а последнюю по этой.
  • Запускаем MySQL Workbench. Создаем новое подключение и заполняем все данные. Порт лучше оставить как он есть по умолчанию - 3306.
  • Заходим в созданное нами подключение и создаем там новую схему. Назвать можно как угодно, но у меня по дефолту называется 'chats'. Это наша база данных, в которой в будущем автоматически появятся таблицы для каждой беседы, а также одна общая таблица всех пользователей.

Настройка докера

  • Скачиваем все файлы git clone https://github.com/morowenka/bot_toxic.git.
  • Создаем в созданной папке файл .env (да, он без имени) и заполняем его (как он должен выглядеть вы можете посмотреть в файле .env-example).

Если у вас сервер MySQL открыт не на дефолтном порту 3306, или вы хотите, чтобы в докер контейнере был другой порт, измените эти параметры в файле docker-compose.yml.

Запуск

  • Скачиваем докер, если не установлен. Для проверки корректной установки открываем терминал и пишем docker run hello-world.
  • Открываем терминал, пишем docker-compose up и ждем конца сборки и запусков контейнеров (~5 минут, в зависимости от скорости интернета). Запуск самого бота начнется через пару минут, как закончат выводиться логи в консоль.

Использование

  • Заходим в личку нашего бота и пишем ему >команды. Если бот не отвечает, вероятно он еще не запустился. Подождите еще пару минут.

Если бот не отвечает слишком долго, вероятнее всего, вы неправильно что-то настроили. Попробуйте исправить ошибку самостоятельно или пишите мне в VK или в Telegram.

  • Добавляете его в ваш чат и даете ему права администратора.
  • Profit!