File size: 3,181 Bytes
581a46a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# 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()