import gradio as gr from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch # 加载模型和 tokenizer model_name = "LilithHu/mbert-manipulative-detector" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name) # 设置为评估模式 model.eval() # 设置运行设备 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model.to(device) # 标签名 labels = ["Non-manipulative / 非操纵性", "Manipulative / 操纵性"] # 推理函数 def classify(text): inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True).to(device) with torch.no_grad(): outputs = model(**inputs) probs = torch.softmax(outputs.logits, dim=1)[0] threshold = 0.7 # 自定义阈值(你可以改成别的) if probs[1].item() > threshold: pred = 1 # 判为操纵性 else: pred = 0 # 判为非操纵性 confidence = min(probs[pred].item(), 0.95) # 置信度依然可以控制上限 percent = round(confidence * 100, 2) result = f"Prediction / 预测:\n{labels[pred]}\n" return result #谁大选谁 #pred = torch.argmax(probs).item() #confidence = min(probs[pred].item(), 0.95) # 限制置信度最大为95% # Gradio 界面 interface = gr.Interface( fn=classify, inputs=gr.Textbox( lines=4, placeholder="Enter text in English or Chinese... / 输入中文或英文句子", label="📝 Input Text / 输入文本" ), outputs=gr.Markdown(label="📊 Prediction / 预测结果"), title="🔍 Manipulative Language Detector / 操纵性语言识别器", description=""" 🧪 输入英文或中文句子,系统将判断其是否包含操纵性语言。 Enter a sentence in English or Chinese to detect if it's manipulative. 📌 **Disclaimer / 免责声明:** This system is for **research and educational purposes only**. It **does not guarantee accuracy** and **should not be used as legal or clinical evidence**. 本工具仅用于**学术研究与教学演示**,不构成法律、医疗或其他正式用途的依据。 🤖 **Model Info**: - Model: `LilithHu/mbert-manipulative-detector` - Base: `mDeBERTa-v3` multilingual pre-trained model - Fine-tuned using HuggingFace Transformers on 10,000 labeled Chinese data 🌐 Built with Gradio and hosted on HuggingFace Spaces. """, examples=[ ["If you really cared, you'd do what I say."], ["你不爱我就证明给我看!"], ["今天的天气真不错"] ], theme="default", allow_flagging="never" ) interface.launch()