Что меня побудило это делать?
Есть известная проблема с токсичными людьми в чатах. У модераторов чатов не всегда получается отслеживать и банить токсичных людей, хотелось бы автоматизировать процесс.
Стек проекта
Весь проект будет писаться на python, с использованием библиотек pytorch и pyTeleramBotApi.
Разделение проекта на этапы
Я разделил проект на 3 этапа.
1 этап - написать телеграм-бота, который ведёт статистику о токсичности пользователей, написать определение токсичности по простейшим правилам.
2 этап - найти датасет с токсичными комментариями, выбрать архитектуру нейросети, написать нейросеть, обучить нейросеть.
3 этап - отладить телеграм бота в большом чате.
1 Этап - написание бота
Сначала я написал обычного телеграм бота, который собирает и выводит статистику, и уведомляет админа чата о токсичных пользователях, если их рейтинг < -5. На первом этапе для определение токсичных предложений я решил использовать поиск матерных слов.
2 Этап - написание и обучение нейросети
Перед тем, как начать писать и обучать нейросеть, я нашёл датасет на kaggle с токсичными комментариями. В датасете около 14000 сообщений и 2 класса(токсичный, позитивный)
Следующий шаг. Надо выбрать архитектуру нейросети. Я остановился на CNN + GRU.
Дальше я поставил нейросеть обучаться на Google Colab`e. Нейросеть обучилась за 30-45 минут.
После обучения нейросети я построил табличку, где показано, как справились другие варианты классификации токсичных сообщений.
Осталось, только интегрировать нейросеть в бота.
3 этап - отладка проекта
Я запустил своего телеграм бота в чат с 65 людьми. В течение 3 дней у бота были обнаружены не большие баги, которые были исправлены.
Итог
Бот более-менее справляется со своей задачей, но иногда нормальное сообщение определяет, как токсичное. Эта проблема решается, нахождением датасета побольше и усложнением архитектуры нейросети, но при усложнении архитектуры ресурсов Google Colab`а может не хватить.
Ссылки
Комментарии (26)
eternum
07.10.2021 15:11+3Хохотнул на "Вы уроды!!!"
"Уроды - это нехорошо! Но на Вы - это хорошо! В целом на троечку. Не нарушайте..."
stekov27
07.10.2021 15:30-1Может проще культуру в чате взрастить, чтоб саморегуляцией, могли поправить оступившегося? Товарищей что приходят похамить проще и дешевле сразу банить.
ну и пример для бота - "котик, ты что совсем дурачок?" намеренно смазал на "дурачок".
По факту это вопрос, а не оскорбление.)
Wizard_of_light
07.10.2021 15:58+1ИМХО, только как первая линия обороны сойдёт. Не, появление автобанхамера обычно таки поднимает культуру общения, но, к сожалению, обычно только с уровня банальной ругани до уровня утонченных издевательств. К тому же меняющаяся повесточка заставит постоянно переучивать нейросеть и в части ключевых слов и фраз - люди постоянно находят новые способы обидеться.
tuxi
07.10.2021 16:22+2Эта проблема решается, нахождением датасета побольше и усложнением архитектуры нейросети
Другими словами, чтобы достичь 99% эффективности, нужен датасет с 99% всех возможных реплик и оборотов, так?
AlexNikiforov
09.10.2021 18:33Тут скорее исходный датасет кривоват, как будто не человек его делал, а нейросеть.
nullptr
07.10.2021 18:50+2Нужен бот для распознавания токсичных чатов - тех, в которых съехавшие с катушек админы автоматом банят людей по стоп-листу на нейроночках.
amarao
07.10.2021 23:31Рано или поздно эту проблему кто-то решит, потому что на самом деле, токсичность найти проще, чем сарказм или язвительность.
Для сравнения:
Будет грандиозный успех, как в прошлый деплой было. // Сарказм.
Прошлый деплой мы долго не забудем, спасибо тебе. // Язвительность.
Только такому мастеру деплоев как ты мы можем поручить создать новый инфоповод. // токсичность
Все три обсуждают следующий деплой в контексте предыдущего, который закончился 8 часовым дауном (фейсбука), например. При том, что второй обидный, он заслуженный. А вот третий - чистой воды токсичность.
sunsexsurf
08.10.2021 19:481/ не понял в чем преимущество нейронок по сравнению с svm (именно для данной задачи toxic comments)
2/ не увидел гиперпараметров (и как их подбирали), почему выбрана именно такая архитектура? (В принципе, вытекает из первого вопроса.)
Kwent
13.10.2021 11:54+1преимущество нейронок в том, что текст (картинки и звук туда же) - это неструктурированные данные, где нейронки классику выкинули давно и безвозвратно, в качестве "мерила" могу предложить любое соревнование, где опытным путем показано преимущество: качество работы. Например, 4 года назад в https://www.kaggle.com/c/jigsaw-toxic-comment-classification-challenge уже на первом месте CNN+RNN
sunsexsurf
13.10.2021 12:011/ не горячился бы насчет "классику выкинули давно". Соревнование, которое вы приводите, это соревнование не про 1/0, а про то, какая именно токсичность. И поэтому если речь все же про 1/0, то, как написал выше, классика продолжает работать.
2/ если есть ссылка на модель - не могли бы дать поиграться?
Kwent
13.10.2021 12:53+11/0 от какая именно отличается по сути активацией и функцией потерь, не больше. Жду пример, где классика работает лучше в обработке естественного языка, если классика продолжает работать :)
В том же соревновании куча кернелов, с которыми можно поиграться, например один из последних на берте https://www.kaggle.com/oceands/bert-model-for-dummies
P. S. Кажется, вы немного отстали от темы, очень тяжело объяснять, почему атомные ледоколы лучше парусных. NLP уже давно про глубокое и сложное "word to vector", и модели отличаются тем, какую новую крутую штуку вы придумаете, которая красиво переведет слова в латентное пространство. "Детские" TF-IDF, SVM, мешки слов и прочие архаизмы работают только в купе с новыми методами в качестве поддержки, "чистая классика" проигрывает непозволительно много на всех задачах NLP.
sunsexsurf
13.10.2021 14:21да, возможно отстал, ок. на кернелы погляжу, ок. Про то, что NLP - это про эмбеддинги - это понятно.
butsan
09.10.2021 19:26Необходимо добавить распознавание мимики лица пишущего в чат человека, чтобы по микро мимике регистрировать наличие желания по-токсикозить в процессе написания сообщения.
kai3341
10.10.2021 02:01Я открыл исходники. В исходниках много прекрасного
DenisIndenbom Автор
10.10.2021 19:03Прошу прощение за мой "прекрасный" код.
Если в нём, что то не так можно сделать pull request.
kai3341
10.10.2021 20:08Мне бы свои конюшни разгрести.
А ваш код вам и разгребать. С таким отношением я не удивлён, куда мы катимся, почему всё так тормозит и глючит на элементарных задачах. Успехов.
DenisIndenbom Автор
10.10.2021 21:13Если в нём, что то не так можно сделать pull request.
Я имел виду, что вы можете помочь исправить ошибки(сделав pull request), если у вас есть на то желание. В любом случае я не надеялся на помощь и код разгребать всё равно мне.
Спасибо, что указали на некоторые ошибки.
amarao
Я сейчас покажу пример токсичного комментария, по мотивам IRL чата. И что ваш бот на это скажет?
Чтобы дать комментарию должную токсичность, я вынужден использовать имена личные. Заранее прошу прощения, но комментарий требует.
Ещё раз прошу прощения, но это реальный парофраз недавно пролетевшей токсичной реплики в рабочем чате.
opckSheff
Не, ну это бан! Уровень токсичности зашкаливает.
P.S. Идея для новой капчи - расставить несколько фраз по возрастанию уровня токсичности. Человек справится, машина нет.
Kwent
Расставьте:
1. Жизни черных важны
2. Жизни белых важны
MentalBlood
Ну и что тут токсичного?
Надо так:
Kwent
"не токсичные фразы" это фразы с токсичностью близкой к 0, оператор сравнения должен быть определен и для них, условно фраза с 0.1 токсичности токсичнее фразы с 0.05, так что "отсортировать по токсичности" можно все :)
MentalBlood
Токсичность уровня "Хабр"