Spaces:
Runtime error
Runtime error
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() | |