Spaces:
Sleeping
Sleeping
| # 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() |