Антискам-бот на грязных данных: как собрать классификатор без размеченного датасета

Создание антискам-бота, способного в реальном времени выявлять мошеннические сообщения в Telegram, — задача, с которой сталкиваются многие разработчики. Но что делать, если у вас нет размеченного датасета, а данные текут потоком с опечатками, сленгом и смесью языков? В этой статье автор делится опыт

Антискам-бот на грязных данных: как собрать классификатор без размеченного датасета

Создание антискам-бота, способного в реальном времени выявлять мошеннические сообщения в Telegram, — задача, с которой сталкиваются многие разработчики. Но что делать, если у вас нет размеченного датасета, а данные текут потоком с опечатками, сленгом и смесью языков? В этой статье автор делится опытом построения классификатора и типизатора на «грязных» данных, используя методы слабой разметки и итеративного обучения. Вы узнаете, как обойти отсутствие чистой разметки, какие метрики действительно важны и как архитектура системы связывает все компоненты.

Как работает антискам-бот: классификатор и типизатор

Система состоит из двух ключевых компонентов: классификатора, который определяет, требует ли сообщение вмешательства (бинарная классификация — «скам» или «не скам»), и типизатора, который уточняет тип проблемы (например, фишинг, социальная инженерия, подозрительная ссылка). Оба модуля работают на основе машинного обучения, но обучены на «грязных» данных — потоке сообщений из Telegram-чатов с опечатками, сленгом и смесью языков.

Автор подчёркивает, что задача была нетривиальной: размеченного датасета не было, метрики часто врали, а данные приходили в реальном времени. Поэтому пришлось применять методы слабой разметки (weak supervision) и итеративного улучшения модели.

Почему данные оказались «грязными» и как с этим работать

Данные собирались из публичных Telegram-чатов, где общаются русскоязычные пользователи. Сообщения содержат опечатки, сленг, сокращения, а иногда и несколько языков в одном сообщении (например, русский с английскими терминами). Кроме того, мошенники постоянно меняют тактику, поэтому данные быстро устаревают. Разметка вручную была невозможна из-за объёмов — тысячи сообщений в день.

Автор применил подход слабой разметки: использовал набор эвристик (например, наличие подозрительных ссылок, ключевых слов, паттернов) для автоматической генерации меток. Затем эти метки использовались для обучения классификатора. Однако такой подход даёт много ложных срабатываний, поэтому потребовалась итеративная настройка.

Технические подробности: архитектура и метрики

Классификатор построен на основе трансформеров (BERT), дообученных на собранных данных. Типизатор — это мультиклассовая модель, которая определяет тип скама. Архитектура включает пайплайн: сообщение сначала попадает в классификатор, и если оно признаётся скамом, то передаётся в типизатор для уточнения.

Автор отмечает, что метрики на валидации часто были обманчивы: высокая точность могла скрывать перекос в сторону одного класса. Поэтому он использовал F1-меру и матрицу ошибок для оценки. Реальные цифры из логов показали, что точность классификатора составляет около 85%, а полнота — 80%. Типизатор показывает точность 75% по всем классам.

Как избежать ошибок при обучении на неразмеченных данных

Главная проблема слабой разметки — шум в метках. Автор решил её путём итеративного обучения: сначала модель обучалась на слабых метках, затем её предсказания проверялись вручную на небольшой выборке, и на основе этих уточнений модель дообучалась. Это позволило постепенно улучшать качество, не требуя полной ручной разметки.

Ещё один важный приём — использование ансамбля эвристик. Вместо одной эвристики автор применил несколько (например, проверка ссылок, ключевые слова, анализ длины сообщения), а затем агрегировал их с помощью голосования. Это снизило количество ложных срабатываний.

Кого затронет и как

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

В российском контексте проблема скама особенно актуальна: по данным Лаборатории Касперского, количество фишинговых атак в мессенджерах выросло в 2024 году на 40%. Поэтому проект автора может быть полезен для администраторов крупных чатов и каналов.

Какие инструменты и библиотеки использовались

Для реализации классификатора автор использовал Hugging Face Transformers для дообучения BERT, а также библиотеку Snorkel для слабой разметки. Для обработки данных применялись Pandas и регулярные выражения. В качестве бэкенда для бота использовался python-telegram-bot. Все инструменты с открытым исходным кодом, что облегчает воспроизведение.

Что будет дальше

Автор планирует улучшить модель за счёт сбора большего количества данных и внедрения активного обучения (active learning), чтобы уменьшить количество ложных срабатываний. Также он рассматривает возможность открыть исходный код проекта, чтобы сообщество могло дорабатывать его.

Ожидается, что в будущем такие системы станут стандартом для крупных Telegram-сообществ, особенно тех, где обсуждаются финансовые вопросы или криптовалюты.

Итог

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