Younes13 commited on
Commit
4ee575c
·
verified ·
1 Parent(s): c85e7c2

Update app.py

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