Как я написал антиспам-бота (TAB) для Telegram на собственной нейросети

от автора

Telegram Antispam Bot (TAB)

Telegram Antispam Bot (TAB)

Привет, Хабр!

Решил наконец-то рассказать о проекте, который уже полгода живёт в тени моего личного репозитория. Речь пойдёт о боте для борьбы со спамом в Telegram‑чатах. Это не просто «очередной антиспам бот», а решение, которое я писал с нуля, включая архитектуру нейросети для классификации текстов.

Забегая вперёд: бот бесплатный и открытый к тестированию. И он работает. Но обо всём по порядку.

Зачем мне все это?

Всё началось в чате автовладельцев, где я сам состою. Там участился спам. Встал вопрос о добавлении антиспам бота в чат. Но родилось альтернативное предложение: написать бота самому, тем более, в тот момент я закончил писать первую версию своей библиотеки по обучению нейросетей. На ней решил и обкатать решение.

Архитектура

Я не стал брать готовые модели с HF. Решил собирать датасет и написать структуру нейросети сам, взяв за основу LSTM. Сети этой группы хорошо учитывают контекст, а прикрутив механику внимания получается уже трансформер на минималках. Для задачи бинарной классификации сообщений из чата думаю это отличный вариант, с учётом что мощности для обучения ограничены.

Набор данных (датасет)

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

Лайфхак, который сэкономил время: я добавил в интерфейс бота кнопку «✅ Это не спам». Когда модератор нажимает её, сообщение автоматически попадает в датасет с пометкой «ложное срабатывание». Так модель набирает знания для дообучения. Сейчас датасет состоит из более чем 25 000 сообщений.

Как бот работает в чате.

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

Бот поддерживает два режима:

  • Стандартный (по умолчанию): сообщение проходит через нейросеть — если классифицируется как «спам» и пользователь в базе спамеров, то бот автоматически удаляет сообщение и банит пользователя. Если пользователь не в базе спамеров, то бот помечает сообщение и зовёт модераторов на принятие решения. Модератор решает: банить или отпустить. Решение сохраняется для дообучения.

  • Автоматический: сообщения удаляются сразу при обнаружении спама. Бан пользователя происходит только если он уже в спамбазе + сообщение распознано как спам.

Команды для пользователей:

/spam — пожаловаться на сообщение

/handbot / /autobot — смена режима (только для админов чатов)

Немного статистики.

Бот работает с 25 мая 2025 года. Ниже представлена свежая статистика на момент написания статьи.

Статистика работы бота

Статистика работы бота

С какими проблемами столкнулся

  • Ручная разметка. Это медленно, трудозатратно. В планах как то автоматизировать этот момент.

  • Постоянная смена стратегии атаки. Спамеры пишут «нyжны» с латинской y, «вαс» с греческой α, вставляют пробелы между буквами. Также меняется подача сообщений, смена контекста и смысла сообщения.

В планах сделать публичных дашборд со статистикой в реальном времени.

Как попробовать

Если хотите протестировать бота в своём чате:

  1. Найдите @tantispam_bot в Telegram

  2. Добавьте его в группу и дайте права администратора на удаление сообщений и на бан.

  3. Готово! Бот начнёт работать в стандартном режиме

Официальный канал с обновлениями: t.me/tantispam

Бот полностью бесплатный. Это пет‑проект, и для меня важна обратная связь от вас)

Вместо заключения

Я не позиционирую это решение как «убийцу всего спама». Есть более совершенные инструменты. Для меня это рабочий инструмент, который я допиливаю в свободное время.

Если тема интересна задавайте вопросы в комментариях.

чсс

ссылка на оригинал статьи https://habr.com/ru/articles/1029034/