Younes13 commited on
Commit
c85e7c2
·
verified ·
1 Parent(s): 873e1bf

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +24 -21
app.py CHANGED
@@ -4,34 +4,35 @@ from transformers import AutoTokenizer, AutoModel
4
  from sklearn.metrics.pairwise import cosine_similarity
5
  import numpy as np
6
 
7
- # بارگذاری مدل FarsiBERT
8
  tokenizer = AutoTokenizer.from_pretrained("HooshvareLab/bert-fa-base-uncased")
9
  model = AutoModel.from_pretrained("HooshvareLab/bert-fa-base-uncased")
10
 
11
- # داده‌های پرسش و پاسخ
12
  faq_dict = {
13
- "زمان انتخاب واحد": "معمولاً پایان شهریور و بهمن است.",
14
- "زمان حذف و اضافه": "حدود یک هفته پس از شروع ترم تحصیلی است.",
15
- "معدل لازم برای 24 واحد": "حداقل معدل 17 نیاز است.",
16
- "حذف اضطراری": "تا هفته هشتم ترم مجاز است.",
17
- "شرایط مهمان شدن": "با موافقت دانشگاه مبدا و مقصد انجام می‌شود.",
18
  }
19
 
20
  faq_questions = list(faq_dict.keys())
 
21
 
22
- # تابع استخراج embedding از جمله
23
  def get_embedding(text):
24
  inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
25
  with torch.no_grad():
26
  outputs = model(**inputs)
27
- # میانگین‌گیری از همه توکن‌ها در آخرین لایه
28
- embeddings = outputs.last_hidden_state.mean(dim=1)
29
- return embeddings[0].cpu().numpy()
30
 
31
- # پیش‌محاسبه embedding تمام سوالات FAQ
32
- faq_embeddings = [get_embedding(q) for q in faq_questions]
 
 
33
 
34
- # تابع اصلی ایجنت
35
  def student_bot(user_question):
36
  try:
37
  user_emb = get_embedding(user_question)
@@ -39,21 +40,23 @@ def student_bot(user_question):
39
  best_idx = int(np.argmax(sims))
40
  best_score = sims[best_idx]
41
 
42
- if best_score > 0.75:
 
 
 
43
  return faq_dict[faq_questions[best_idx]]
44
  else:
45
- return "متأسفم، پاسخ این سوال در حال حاضر موجود نیست."
46
  except Exception as e:
47
  return f"❗️خطا در سیستم: {str(e)}"
48
 
49
- # رابط کاربری
50
  iface = gr.Interface(
51
  fn=student_bot,
52
- inputs=gr.Textbox(label="سؤال خود را وارد کنید"),
53
  outputs=gr.Textbox(label="پاسخ"),
54
- title="ایجنت راهنمای دانشجویان با FarsiBERT",
55
- description="پاسخ به پرسش‌های رایج بر اساس تشابه معنایی"
56
  )
57
 
58
  iface.launch()
59
-
 
4
  from sklearn.metrics.pairwise import cosine_similarity
5
  import numpy as np
6
 
7
+ # بارگذاری مدل
8
  tokenizer = AutoTokenizer.from_pretrained("HooshvareLab/bert-fa-base-uncased")
9
  model = AutoModel.from_pretrained("HooshvareLab/bert-fa-base-uncased")
10
 
11
+ # پرسش و پاسخ‌ها (سوالات باید طبیعی‌تر شوند)
12
  faq_dict = {
13
+ "زمان انتخاب واحد چه موقع است؟": "معمولاً پایان شهریور و بهمن است.",
14
+ "چه زمانی می‌توان حذف و اضافه انجام داد؟": "حدود یک هفته پس از شروع ترم تحصیلی است.",
15
+ "چه معدلی برای انتخاب ۲۴ واحد لازم است؟": "حداقل معدل 17 نیاز است.",
16
+ "تا چه زمانی امکان حذف اضطراری وجود دارد؟": "تا هفته هشتم ترم مجاز است.",
17
+ "چگونه می‌توان مهمان شد؟": "با موافقت دانشگاه مبدا و مقصد انجام می‌شود.",
18
  }
19
 
20
  faq_questions = list(faq_dict.keys())
21
+ faq_embeddings = []
22
 
23
+ # تابع استخراج embedding
24
  def get_embedding(text):
25
  inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True)
26
  with torch.no_grad():
27
  outputs = model(**inputs)
28
+ return outputs.last_hidden_state.mean(dim=1)[0].cpu().numpy()
 
 
29
 
30
+ # پیش‌محاسبه embeddingها
31
+ for question in faq_questions:
32
+ emb = get_embedding(question)
33
+ faq_embeddings.append(emb)
34
 
35
+ # پاسخ‌دهی
36
  def student_bot(user_question):
37
  try:
38
  user_emb = get_embedding(user_question)
 
40
  best_idx = int(np.argmax(sims))
41
  best_score = sims[best_idx]
42
 
43
+ # 👇 برای دیباگ
44
+ print("Similarity Score:", best_score)
45
+
46
+ if best_score > 0.6:
47
  return faq_dict[faq_questions[best_idx]]
48
  else:
49
+ return "متأسفم، پاسخ این سؤال در حال حاضر موجود نیست."
50
  except Exception as e:
51
  return f"❗️خطا در سیستم: {str(e)}"
52
 
53
+ # رابط Gradio
54
  iface = gr.Interface(
55
  fn=student_bot,
56
+ inputs=gr.Textbox(label="سوال خود را بنویسید"),
57
  outputs=gr.Textbox(label="پاسخ"),
58
+ title="ایجنت راهنمای دانشجویان",
59
+ description="پاسخ به سوالات رایج با استفاده از مدل FarsiBERT و تشابه معنایی"
60
  )
61
 
62
  iface.launch()