MonkeyDAnh's picture
Upload 2 files
581a46a verified
raw
history blame
3.18 kB
# app.py
import gradio as gr
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
import torch.nn.functional as F
# 1. Tải mô hình và tokenizer từ Hugging Face Hub
model_name = "MonkeyDAnh/Model-AI-Percentage-used-v2" # Thay thế bằng tên repo model của bạn
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
# Kiểm tra nếu có GPU thì sử dụng GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
model.eval() # Chuyển mô hình sang chế độ đánh giá
# 2. Định nghĩa hàm dự đoán
def predict_ai_human(text):
"""
Hàm dự đoán tỷ lệ AI/Human dựa trên văn bản đầu vào.
"""
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=512)
inputs = {k: v.to(device) for k, v in inputs.items()} # Chuyển inputs sang device
with torch.no_grad():
outputs = model(**inputs)
# Lấy logits và chuyển đổi sang xác suất
# Giả sử mô hình của bạn có 2 lớp: 0 (Human), 1 (AI)
# Hoặc ngược lại, tùy thuộc vào cách bạn huấn luyện
# Cần kiểm tra thứ tự nhãn của mô hình của bạn!
# Ví dụ: model.config.id2label nếu có
# Đối với model binary classification, thường có 2 output logits
# Output thường là logits cho mỗi lớp.
# Nếu mô hình của bạn dự đoán "AI percentage", thì output có thể là 1 giá trị duy nhất
# hoặc 2 giá trị logits (cho Human và AI).
# Nếu output là logits cho 2 lớp (ví dụ: [logit_human, logit_ai])
logits = outputs.logits
probabilities = F.softmax(logits, dim=1) # Áp dụng softmax để có xác suất
# Lấy xác suất của lớp "AI" (giả sử lớp 1 là AI)
# Bạn cần xác nhận lại id của lớp AI từ quá trình huấn luyện của bạn
# Ví dụ: nếu model.config.id2label = {0: 'human', 1: 'ai'}
ai_probability = probabilities[:, 1].item() * 100 # Xác suất của lớp AI
human_probability = probabilities[:, 0].item() * 100 # Xác suất của lớp Human
return f"AI Percentage: {ai_probability:.2f}% (Human Percentage: {human_probability:.2f}%)"
# 3. Tạo giao diện Gradio
# gr.Interface(fn, inputs, outputs, title, description)
# fn: Hàm dự đoán
# inputs: Các thành phần đầu vào (ví dụ: gr.Textbox)
# outputs: Các thành phần đầu ra (ví dụ: gr.Textbox)
# title, description: Tiêu đề và mô tả cho giao diện
iface = gr.Interface(
fn=predict_ai_human,
inputs=gr.Textbox(lines=10, label="Nhập văn bản vào đây để kiểm tra"),
outputs=gr.Textbox(label="Kết quả dự đoán"),
title="Phân loại văn bản AI/Human",
description="Một demo nhỏ để kiểm tra tỷ lệ văn bản được tạo bởi AI so với văn bản của con người."
)
# 4. Khởi chạy giao diện
if __name__ == "__main__":
iface.launch()