File size: 2,390 Bytes
6aa5690
175598c
 
 
 
d173465
175598c
 
 
6aa5690
175598c
df561c7
 
 
 
 
 
 
 
d173465
df561c7
175598c
 
 
 
 
 
 
 
 
 
 
d173465
175598c
 
6aa5690
175598c
 
 
 
 
 
 
6aa5690
175598c
6aa5690
 
f51748e
175598c
7e7a410
 
 
 
175598c
 
7e7a410
6aa5690
8796cef
6aa5690
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
import torch
import gradio as gr
from transformers import AutoTokenizer, AutoModel
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np

# بارگذاری مدل FarsiBERT
tokenizer = AutoTokenizer.from_pretrained("HooshvareLab/bert-fa-base-uncased")
model = AutoModel.from_pretrained("HooshvareLab/bert-fa-base-uncased")

# داده‌های پرسش و پاسخ
faq_dict = {
    "زمان انتخاب واحد": "معمولاً پایان شهریور و بهمن است.",
    "زمان حذف و اضافه": "حدود یک هفته پس از شروع ترم تحصیلی است.",
    "معدل لازم برای 24 واحد": "حداقل معدل 17 نیاز است.",
    "حذف اضطراری": "تا هفته هشتم ترم مجاز است.",
    "شرایط مهمان شدن": "با موافقت دانشگاه مبدا و مقصد انجام می‌شود.",
}

faq_questions = list(faq_dict.keys())

# تابع استخراج embedding از جمله
def get_embedding(text):
    inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
    with torch.no_grad():
        outputs = model(**inputs)
    # میانگین‌گیری از همه توکن‌ها در آخرین لایه
    embeddings = outputs.last_hidden_state.mean(dim=1)
    return embeddings[0].cpu().numpy()

# پیش‌محاسبه embedding تمام سوالات FAQ
faq_embeddings = [get_embedding(q) for q in faq_questions]

# تابع اصلی ایجنت
def student_bot(user_question):
    try:
        user_emb = get_embedding(user_question)
        sims = [cosine_similarity([user_emb], [emb])[0][0] for emb in faq_embeddings]
        best_idx = int(np.argmax(sims))
        best_score = sims[best_idx]

        if best_score > 0.75:
            return faq_dict[faq_questions[best_idx]]
        else:
            return "متأسفم، پاسخ این سوال در حال حاضر موجود نیست."
    except Exception as e:
        return f"❗️خطا در سیستم: {str(e)}"

# رابط کاربری
iface = gr.Interface(
    fn=student_bot,
    inputs=gr.Textbox(label="سؤال خود را وارد کنید"),
    outputs=gr.Textbox(label="پاسخ"),
    title="ایجنت راهنمای دانشجویان با FarsiBERT",
    description="پاسخ به پرسش‌های رایج بر اساس تشابه معنایی"
)

iface.launch()