ForModelTest / app.py
NeuroSpaceX's picture
Update app.py
ff2438f verified
raw
history blame
1.96 kB
import gradio as gr
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import torch
import os
import re
import emoji
MODEL_NAME = "NeuroSpaceX/ruSpamNS"
TOKEN = os.getenv("HF_TOKEN")
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME, use_auth_token=TOKEN)
model = AutoModelForSequenceClassification.from_pretrained(MODEL_NAME, use_auth_token=TOKEN)
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
model.to(device)
def clean_text(text):
# Удаляем эмодзи
text = emoji.replace_emoji(text, replace='')
# Удаляем цифры и символы, кроме букв, пробела, точки и запятой
text = re.sub(r'[^a-zA-Zа-яА-ЯёЁ .,]', '', text, flags=re.UNICODE)
# Приводим текст в нижний регистр
text = text.lower()
# Делаем первую букву заглавной
text = text.capitalize()
# Убираем лишние пробелы
text = re.sub(r'\s+', ' ', text).strip()
return text
def classify_text(text):
message = clean_text(text)
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():
outputs = model(input_ids, attention_mask=attention_mask).logits
prediction = torch.sigmoid(outputs).cpu().numpy()[0][0]
label = "СПАМ" if prediction >= 0.5 else "НЕ СПАМ"
return f"{label} (вероятность: {prediction*100:.2f}%)"
iface = gr.Interface(
fn=classify_text,
inputs=gr.Textbox(lines=3, placeholder="Введите текст..."),
outputs="text",
title="ruSpamNS - Проверка на спам",
description="Введите текст, чтобы проверить, является ли он спамом."
)
iface.launch()