Skip to content

C0pyBara/Reshare

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Telegram Spam Classifier

Мультиметочный классификатор спама для Telegram постов с использованием эвристики и BERT.

Описание

Система multilabel классификации для определения категорий спама в Telegram постах:

  • ads (реклама)
  • crypto (криптовалюты, блокчейн)
  • scam (мошенничество)
  • casino (казино, ставки)

Архитектура

Telegram сообщение
  ↓
Очистка текста (удаление ссылок, артефактов)
  ↓
Параллельная классификация:
  ├─ Heuristics (быстрая проверка по правилам)
  └─ BERT (rubert-tiny2 через transformers)
  ↓
Объединение результатов (среднее арифметическое)
  ↓
Мультиметочное предсказание (ads, crypto, scam, casino)
  ↓
NER-детектор дубликатов (Natasha)
  ↓
Фильтрация (спам/дубликаты) → Публикация

Быстрый старт

1. Установка зависимостей

pip install -r requirements.txt

Примечание: Для работы NER-детектора дубликатов требуется библиотека natasha. Она автоматически установится при установке зависимостей. При первом запуске Natasha загрузит необходимые модели (это может занять некоторое время).

2. Настройка конфигурации

Создайте файл .env:

API_ID=your_api_id
API_HASH=your_api_hash
TARGET_GROUP=your_target_group_id

3. Запуск бота

python main.py

Бот будет:

  • Мониторить указанные каналы
  • Классифицировать новые сообщения
  • Пересылать сообщения в целевую группу с результатами классификации

Классификация

Методы

  1. Эвристика (spam_rules_multilabel.py):

    • Анализ ключевых слов по категориям
    • Проверка паттернов (регулярные выражения)
    • Структурный анализ (ссылки, капс, эмодзи)
  2. BERT (classifier_multilabel.py):

    • Использует cointegrated/rubert-tiny2
    • Zero-shot classification (если поддерживается)
    • Fallback на text-classification

Пороги классификации

Настраиваются в classifier_multilabel.py:

DEFAULT_THRESHOLDS = {
    "ads": 0.4,
    "crypto": 0.3,
    "scam": 0.2,  # Ниже порог для scam (важнее recall)
    "casino": 0.3
}

Структура проекта

Основные файлы

  • main.py - главный файл бота
  • classifier_multilabel.py - мультиметочный классификатор (эвристика + BERT)
  • spam_rules_multilabel.py - эвристические правила для каждой категории
  • ner_duplicate_detector.py - NER-детектор дубликатов постов (Natasha)
  • config.py - конфигурация (API ключи, каналы)
  • data_logger.py - логирование сообщений для сбора датасета

Дополнительные файлы (для ML обучения)

  • label_data_ml.py - инструмент для multilabel разметки
  • train_ml_multilabel.py - обучение ML модели (опционально)
  • ml_model_multilabel.py - класс ML классификатора (опционально)
  • telegram_features.py - извлечение Telegram-специфичных признаков

Использование в коде

from classifier_multilabel import classify_multilabel

# Классификация текста
result = classify_multilabel("🔥 Скидка 50% на токены!")

print(f"Оценки: {result['scores']}")
# {'ads': 0.85, 'crypto': 0.60, 'scam': 0.20, 'casino': 0.10}

print(f"Предсказания: {result['predictions']}")
# {'ads': 1, 'crypto': 1, 'scam': 0, 'casino': 0}

print(f"Методы: {result['methods']}")
# {'ads': 'heuristics+bert', 'crypto': 'heuristics+bert', ...}

Особенности

Telegram-специфичные признаки

Эвристика анализирует:

  • Структурные признаки (длина, строки, CAPS ratio)
  • Ссылки (URL, короткие домены, t.me)
  • Маркетинговые паттерны (проценты, валюты, промокоды)
  • Эмодзи и символы
  • Ключевые слова по категориям

Параллельная обработка

Эвристика и BERT работают параллельно для максимальной скорости.

Семантический детектор дубликатов

Система использует векторные эмбеддинги для обнаружения дубликатов постов:

  1. Создание эмбеддингов: Каждый пост преобразуется в векторное представление через модель paraphrase-multilingual-MiniLM-L12-v2
  2. Семантическое сравнение: Используется косинусное сходство между векторами постов
  3. Быстрый поиск: FAISS для эффективного поиска похожих постов в больших объемах данных
  4. Временное окно: Кэш постов хранится 4 часа (настраивается)
  5. Порог схожести: По умолчанию 0.85 (85% семантического сходства = дубликат)
  6. Учет медиа: Совпадение медиа добавляет бонус к схожести (+0.1)

Пример:

  • Пост 1: "Маршрутка сгорела дотла в Иркутском районе"
  • Пост 2: "Автобус полностью выгорел в Иркутском районе"
  • Эмбеддинги: Векторы отражают семантическое сходство
  • Схожесть: >0.85 → Дубликат

Преимущества:

  • Понимает синонимы и перефразировки
  • Работает с разными формулировками одной новости
  • Быстрый поиск благодаря FAISS

Если sentence-transformers не установлена, детектор дубликатов автоматически отключается, но остальная функциональность продолжает работать. FAISS опциональна - без неё используется медленный поиск.

Конфигурация

Каналы для мониторинга

Настройте в config.py:

CHANNELS = [
    "https://t.me/channel1",
    "https://t.me/channel2",
    # ...
]

BERT модель

Настройте в config.py:

RUBERT_MODEL = 'cointegrated/rubert-tiny2'
USE_RUBERT = True

Требования

  • Python 3.8+
  • telethon
  • transformers
  • torch
  • scikit-learn (опционально, для ML обучения)
  • pandas (опционально, для ML обучения)

Лицензия

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages