Что меня побудило это делать?

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

Стек проекта

Весь проект будет писаться на python, с использованием библиотек pytorch и pyTeleramBotApi.

Разделение проекта на этапы

Я разделил проект на 3 этапа.

1 этап - написать телеграм-бота, который ведёт статистику о токсичности пользователей, написать определение токсичности по простейшим правилам.

2 этап - найти датасет с токсичными комментариями, выбрать архитектуру нейросети, написать нейросеть, обучить нейросеть.

3 этап - отладить телеграм бота в большом чате.

1 Этап - написание бота

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

Пример вывод статистики
Пример уведомления

2 Этап - написание и обучение нейросети

Перед тем, как начать писать и обучать нейросеть, я нашёл датасет на kaggle с токсичными комментариями. В датасете около 14000 сообщений и 2 класса(токсичный, позитивный)

Следующий шаг. Надо выбрать архитектуру нейросети. Я остановился на CNN + GRU.

Архитектура нейросети

Дальше я поставил нейросеть обучаться на Google Colab`e. Нейросеть обучилась за 30-45 минут.

После обучения нейросети я построил табличку, где показано, как справились другие варианты классификации токсичных сообщений.

Имя

accuracy

precision

recall

CNN+GRU

0.9

0.9

0.85

CatBoost

0.86

0.75

0.83

Rules (проверка на матные слова)

0.66

0.69

0.53

Осталось, только интегрировать нейросеть в бота.

3 этап - отладка проекта

Я запустил своего телеграм бота в чат с 65 людьми. В течение 3 дней у бота были обнаружены небольшие баги, которые были исправлены.

Итог

Пример обработки сообщений

Бот более-менее справляется со своей задачей, но иногда нормальное сообщение определяет, как токсичное. Эта проблема решается, нахождением датасета побольше и усложнением архитектуры нейросети, но при усложнении архитектуры ресурсов Google Colab`а может не хватить.

Ссылки

Репозиторий проекта

Бот в телеграмме

2 Часть - Немного об архитектуре нейросети бота