Токсичность чатов Telegram: измеряем машинным обучением

Во времена ковида я работал в компании, где мы с коллегой написали приложение на анализе больших данных для оценки уровня наших программистов. Я подумал: что если применить похожую логику к нашим рабочим чатам в Telegram — насколько они токсичны?

Токсичность чатов Telegram: измеряем машинным обучением

С 2015 года я экспериментирую с Data Science, с 2018-го пишу на Go. В 2020-м для первых прототипов я готовил датасеты из result.json через Node.js и Swift, графики строил на R — классический рисерч в DS. Заметил что коллегам интересно гораздо больше, чем просто подсчёт сообщений: кто какой вайб к кому испытывает, какой у кого словарный запас, кто больше матюкается, у кого какие самые частые слова.

Перед тем как я начал билдить бота на Go, я собрал вьюер result.json на Rust.

Вьюер result.json <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fgithub.com%2FExey%2Ftgxplorer&postId=2841971" rel="nofollow noreferrer noopener" target="_blank">https://github.com/Exey/tgxplorer</a>
Вьюер result.json https://github.com/Exey/tgxplorer

Готового инструмента не было. Я решил сделать его сам, с одним принципиальным условием: никакие данные не уходят дальше бота и удаляются после рендера графиков.

Токсичность чатов Telegram: измеряем машинным обучением

Бот я уже реализовал на чистом Go. Общий объём кода — около 4 тысяч строк на четыре микросервиса.

Анализ исходников бота с помощью <a href="https://api.vc.ru/v2.8/redirect?to=https%3A%2F%2Fgithub.com%2FExey%2Fgoscope&postId=2841971" rel="nofollow noreferrer noopener" target="_blank">https://github.com/Exey/goscope</a>
Анализ исходников бота с помощью https://github.com/Exey/goscope

Токсичность — это не мат, и простым фильтром по словам её не посчитать. Я изучал разные системы оценки, в том числе rubert-toxic-pikabu-2ch — специализированную модель детекции токсичных комментариев на русском языке на базе RuBERT. Тащить её в бота не стал: изучил логику, квантовал LLM до более быстрого DS. Токсичность и вайбы оцениваются через паттерны поведения, которые можно достать из экспорта чата Telegram.

Пользователь получает альбом из 8-9 картинок: force-граф связей между участниками, тепловая карта активности по часам, топы слов, vibe-матрица из эмодзи-реакций. Топ слов — неожиданно самая любимая фича: частые слова собеседника, если читать их столбиком, часто складываются во что-то смешное. Именно это люди первым делом скидывают друг другу.

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

Токсичность чатов Telegram: измеряем машинным обучением

Сложные алгоритмы и оптимизацию я делал руками: моя DS-токсик-модель на больших файлах выходила за пределы RAM.

Насчет билдинга на LLM: Claude Opus 4.6 на проекте в четыре тысячи строк не помнит всего контекста кода, поэтому часто забывает и функции и файлы. Ощущение, что работаешь с Junior разрабом: рутину доверить можно, за качество и архитектуру отвечаешь сам. Мои 70% времени — написание кода и отладка, 30% — промпт-инжиниринг.

При этом LLM реально даёт возможность больше заниматься творческими и сложными задачами, а рутину типа основы проекта и тулинга скидывать нейронки. Для написания сложных и эффективных алгоритмов LLM ещё будут долго расти, потому как нейронка знает только о решённых и опубликованных задачах.

7
Начать дискуссию