NeuroSpaceX's picture
Update README.md
09e9e1f verified
metadata
language: ru
tags:
  - spam-detection
  - text-classification
  - russian
  - spam-filter
  - ruSpamNS
  - ruSpam
license: cc-by-nc-4.0
metrics:
  - F1
model-index:
  - name: spamNS_v9
    results:
      - task:
          name: Классификация текста
          type: text-classification
        metrics:
          - name: F1
            type: F1
            value: 0.9
extra_gated_prompt: Для получения доступа к модели, пожалуйста, заполните форму ниже.
extra_gated_fields:
  Зачем вам нужна модель?: text
  Согласие с правилами использования (обязательно): checkbox
  'Я подтверждаю, что: использование модели в коммерческих целях запрещено; при использовании модели в своих проектах я обязуюсь указывать ссылку на репозиторий модели; в противном случае я могу нести юридическую ответственность, а также доступ к модели будет незамедлительно отозван': checkbox
  Ваше имя: text
  Ваша фамилия: text
  Ваш номер телефона: text
datasets:
  - NeuroSpaceX/ruSpamData_v13

NeuroSpaceX/ruSpamNS_v9_Precision

🚨 Для всех, кто запрашивал доступ, но он был закрыт или не выдан: ❗ Пожалуйста, отмените запрос и отправьте его заново, иначе доступ не будет предоставлен!

Описание

Это модель определения спама, основанная на архитектуре руберта, дообученная на русскоязычных данных о спаме. Она классифицирует текст как спам или не спам. Модель была обучена на 2,5 млн сообщений и содержит улучшения в обработке сложных случаев, таких как рекламные сообщения со схожей структурой с нормальным текстом.

Модель NeuroSpaceX/ruSpamNS_v9_Precision рекомендуется использовать совместно с NeuroSpaceX/ruSpamNS_v9_Detector. Детектор оценивает вероятность того, что сообщение является спамом. Если вероятность попадает в диапазон от 0.5 до 0.8, итоговое решение уточняется через Precision.

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

import re
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

model_detector = 'NeuroSpaceX/ruSpamNS_v9_Detector'
model_precision = 'NeuroSpaceX/ruSpamNS_v9_Precision'
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')

# Загрузка моделей
model_detector = AutoModelForSequenceClassification.from_pretrained(model_detector, num_labels=1).to(device).eval()
model_precision = AutoModelForSequenceClassification.from_pretrained(model_precision, num_labels=1).to(device).eval()
tokenizer = AutoTokenizer.from_pretrained(model_detector)

def clean_text(text):
    # Также очищайте текст от эмодзи!
    text = text.strip()
    text = text.replace('\n', ' ')
    text = re.sub(r'[^\w\s,.!?]', '', text, flags=re.UNICODE)
    text = re.sub(r'[!?]', '', text)
    return text.lower()

def classify_message(message):
    message = clean_text(message)
    encoding = tokenizer(message, padding='max_length', truncation=True, max_length=128, return_tensors='pt')
    input_ids = encoding['input_ids'].to(device)
    attention_mask = encoding['attention_mask'].to(device)

    with torch.no_grad():
        # Предсказание через Detector
        outputs_detector = model_detector(input_ids, attention_mask=attention_mask).logits
        pred_detector = torch.sigmoid(outputs_detector).cpu().numpy()[0][0]

    if 0.5 <= pred_detector <= 0.8:
        # Если вероятность сомнительная, уточняем через Precision
        with torch.no_grad():
            outputs_precision = model_precision(input_ids, attention_mask=attention_mask).logits
            pred_precision = torch.sigmoid(outputs_precision).cpu().numpy()[0][0]
        is_spam = int(pred_precision >= 0.5)
    else:
        is_spam = int(pred_detector >= 0.5)

    return is_spam

if __name__ == '__main__':
    while True:
        message = input("Введите сообщение для классификации (или 'exit' для выхода): ")
        if message.lower() == 'exit':
            break
        is_spam = classify_message(message)
        print(f"Сообщение {'является спамом' if is_spam else 'не является спамом'}")

Просьба при использовании данной модели указывать ссылку на данный репозиторий!

Цитирование

@MISC{NeuroSpaceX/ruSpamNS_v9,
    author  = {Kirill Fedko (NeuroSpaceX), Andrey Tolstóy},
    title   = {Russian Spam Classification Model},
    url     = {https://huggingface.co/NeuroSpaceX/ruSpamNS_v9},
    year    = 2024
}

Телеграм канал автора: https://t.me/spaceneuro

Бот, работающий на базе модели: https://t.me/ruSpamNS_bot