/ Модель

Характеристики

Лицензия
MIT
Базовая модель
rubert-base-cased
Опубликована
29 июл 2026

Russian-Spam-classifier

Классификация текстаТекст → label4 профессии

Русскоязычный классификатор SafeTechDev определяет, является ли отдельное сообщение спамом, для фильтрации и модерации, включая Telegram-чаты.

181скачиваний за 30 дней0лайковвеса обновлены9 окт 2026

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

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

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

SafeTechDev разработала AIMS-RU-Binary-Spam-Classifier — бинарный классификатор русскоязычных сообщений, который оценивает вероятность спама. Модель дообучена на DeepPavlov/rubert-base-cased: энкодер BERT использует представление токена [CLS], а классификационная голова выдаёт один логит для класса SPAM. Репозиторий содержит веса PyTorch; лицензия — MIT.

Модель предназначена для фильтрации спама и автоматической модерации сообщений, в частности в Telegram-чатах. В README приведены результаты проверки на внешнем датасете alt-gnome/telegram-spam: F1 0,95, precision 0,98 и recall 0,92. Перед подачей рекомендуется нормализовать текст по правилам, использованным при обучении: убирать разрежённое написание и ссылки, заменять гомоглифы, схлопывать повторы букв и приводить текст к нижнему регистру.

Модель обучена и проверена на русском тексте; качество на других языках не гарантируется. Она классифицирует отдельное сообщение без учёта контекста переписки. Порог 0,7 можно настроить под данные и требуемый баланс между precision и recall; стандартный Transformers pipeline для text-classification не запускает эту модель напрямую из-за пользовательской классификационной головы.

Сценарии применения

  • фильтрация спам-сообщений в Telegram-чатах
  • автоматическая модерация русскоязычных сообщений
  • проверка сообщений перед публикацией
  • отбор спама для очереди ручной проверки

Ограничения

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

Для каких профессий подходит4

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

AIMS-RU-Binary-Spam-Classifier

Бинарный классификатор спама для русскоязычных сообщений, часть проекта AIMS (AI Moderation System).

Модель дообучена поверх DeepPavlov/rubert-base-cased и определяет, является ли сообщение SPAM или SAFE. Лёгкая и быстрая модель.

Обновлено. Фикс некоторых ложных срабатываний

Обучающие данные

Обучение проводилось на сообщениях, собранных в активных публичных Telegram чатах осенью-весной 2025-2026 года.

Метрики

Оценка проводилась на внешнем датасете alt-gnome/telegram-spam, не пересекающемся с обучающей выборкой:

МетрикаЗначение
F10.95
Precision0.98
Recall0.92

Высокий precision (0.98) означает низкую долю ложных срабатываний — модель редко помечает безопасные сообщения как спам, что важно для автоматической модерации без риска задеть живых пользователей.

Архитектура

  • Энкодер: DeepPavlov/rubert-base-cased
  • Голова классификации: Dropout(0.2) → Linear(hidden_size, 1)
  • Пулинг: эмбеддинг токена [CLS]
  • Функция потерь при обучении: BCEWithLogitsLoss с весом положительного класса (pos_weight) для компенсации дисбаланса SAFE/SPAM
  • Выход: один логит → sigmoid → вероятность класса SPAM

РЕКОМЕНДАЦИЯ Нормализация текста

Перед подачей в модель рекомендуется нормализовать текст, это использовалось при обучении.

  • убирает "разрежённое" написание (п.р.и.в.е.т. → привет)
  • заменяет гомоглифы (похожие символы из других алфавитов — ᴀ, α, латиница вместо кириллицы и т.д.) на кириллические эквиваленты
  • удаляет ссылки и команды ботов (/cmd@bot)
  • схлопывает повторяющиеся буквы (приввееееет → привет)
  • приводит текст к нижнему регистру

Быстрый запуск

pip install torch transformers huggingface_hub
import re
import json
import torch
import torch.nn as nn
from transformers import AutoTokenizer, AutoModel
from huggingface_hub import hf_hub_download

REPO = "SafeTechDev/Russian-Spam-classifier"
device = "cuda" if torch.cuda.is_available() else "cpu"

# ── Архитектура ──────────────────────────────────────────────────────────
class BinaryModel(nn.Module):
    def __init__(self, model_name):
        super().__init__()
        self.bert = AutoModel.from_pretrained(model_name, low_cpu_mem_usage=True)
        hidden = self.bert.config.hidden_size
        self.binary = nn.Sequential(
            nn.Dropout(0.2),
            nn.Linear(hidden, 1)
        )

    def forward(self, input_ids, attention_mask):
        outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask)
        pooled = outputs.last_hidden_state[:, 0]
        return self.binary(pooled).squeeze(-1)

# ── Загрузка ─────────────────────────────────────────────────────────────
config_path = hf_hub_download(REPO, "config.json")
weights_path = hf_hub_download(REPO, "pytorch_model.bin")

with open(config_path, encoding="utf-8") as f:
    cfg = json.load(f)

MAX_LENGTH = cfg.get("max_length", 40)

tokenizer = AutoTokenizer.from_pretrained(REPO)

model = BinaryModel(cfg["model"]).to(device)
model.load_state_dict(torch.load(weights_path, map_location=device, weights_only=True))
model.eval()

# ── Инференс ─────────────────────────────────────────────────────────────
def classify(text: str) -> dict:
    enc = tokenizer(
        text, truncation=True, padding="max_length",
        max_length=MAX_LENGTH, return_tensors="pt"
    )
    with torch.no_grad():
        logits = model(enc["input_ids"].to(device), enc["attention_mask"].to(device))

    prob_spam = float(torch.sigmoid(logits).squeeze().cpu().item())
    label = "SPAM" if prob_spam >= 0.7 else "SAFE"

    return {"label": label, "prob_spam": prob_spam}


print(classify("Дам денег, работу, пишите в лс"))
# {'label': 'SPAM', 'prob_spam': 0.98...}

print(classify("Привет, как дела?"))
# {'label': 'SAFE', 'prob_spam': 0.02...}

Через pipeline (упрощённо, без кастомной нормализации)

Модель хранит веса в формате pytorch_model.bin с кастомной головой, поэтому напрямую через transformers.pipeline("text-classification", ...) она не запустится — используйте код выше.

Ограничения

  • Модель обучена и валидирована на русскоязычном тексте; на других языках качество не гарантируется.
  • Порог 0.7 используется по умолчанию для разделения SAFE/SPAM — в проде рекомендуется подбирать порог под свои данные (например, по максимальному F1), т.к. соотношение precision/recall меняется в зависимости от домена.
  • Модель не учитывает контекст переписки — классифицируется только отдельное сообщение.

Автор

SafeTechDev

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Нельзя запустить

Архитектура ? неизвестна transformers в образе рантайма.

Ревизия весов
bdd5b4a

0 моделей