--- language: ru tags: - spam-detection - text-classification - russian - spam-filter - ruSpamNS - ruSpam license: cc-by-nc-nd-3.0 metrics: - F1 model-index: - name: spamNS_v9_Detector 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_Detector 🚨 Для всех, кто запрашивал доступ, но он был закрыт или не выдан: ❗ Пожалуйста, отмените запрос и отправьте его заново, иначе доступ не будет предоставлен! ## Описание Это модель первичной классификации текста на спам и не спам, основанная на архитектуре руберта. Она определяет вероятность того, что сообщение является спамом. Если вероятность попадает в диапазон от 0.5 до 0.8, рекомендуется использовать модель [NeuroSpaceX/ruSpamNS_v9_Precision](https://huggingface.co/NeuroSpaceX/ruSpamNS_v9_Precision) для уточнения результата. Модель обучена на 2,5 млн сообщений и оптимизирована для обработки русскоязычного текста, включая сложные рекламные конструкции. ## Использование ```python 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_Detector}, year = 2024 } ``` Телеграм канал автора: https://t.me/spaceneuro Бот, работающий на базе модели: https://t.me/ruSpamNS_bot