Younes13 commited on
Commit
d173465
·
verified ·
1 Parent(s): a3030ce

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -29
app.py CHANGED
@@ -2,6 +2,12 @@ import gradio as gr
2
  from transformers import AutoTokenizer, AutoModelForCausalLM
3
 
4
 
 
 
 
 
 
 
5
  faq_dict = {
6
  "زمان انتخاب واحد": "معمولاً پایان شهریور و بهمن است.",
7
  "زمان حذف و اضافه": "حدود یک هفته پس از شروع ترم تحصیلی است.",
@@ -10,6 +16,9 @@ faq_dict = {
10
  "شرایط مهمان شدن": "با موافقت دانشگاه مبدا و مقصد انجام می‌شود.",
11
  }
12
 
 
 
 
13
 
14
 
15
  # بارگذاری پرسش و پاسخ‌های FAQ
@@ -31,35 +40,18 @@ chat_history = []
31
 
32
  # تابع پاسخ‌دهی
33
  def student_bot(question):
34
- # بررسی وجود پاسخ در دیکشنری FAQ
35
- for key in faq_dict:
36
- if key in question:
37
- return faq_dict[key]
38
-
39
- # اگر یافت نشد، مدل زبانی فعال شود
40
- prompt = f"""پرسش: زمان انتخاب واحد چه زمانی است؟
41
- پاسخ: معمولاً پایان شهریور و بهمن است.
42
-
43
- پرسش: زمان حذف و اضافه کی هست؟
44
- پاسخ: حدود یک هفته پس از شروع ترم تحصیلی است.
45
-
46
- پرسش: {question}
47
- پاسخ:"""
48
-
49
- inputs = tokenizer(prompt, return_tensors="pt")
50
- outputs = model.generate(
51
- **inputs,
52
- max_new_tokens=60,
53
- pad_token_id=tokenizer.eos_token_id,
54
- repetition_penalty=1.8,
55
- no_repeat_ngram_size=3,
56
- temperature=0.7,
57
- top_p=0.9,
58
- top_k=50,
59
- do_sample=True
60
- )
61
- answer = tokenizer.decode(outputs[0], skip_special_tokens=True)
62
- return answer.split("پاسخ:")[-1].strip()
63
 
64
 
65
 
 
2
  from transformers import AutoTokenizer, AutoModelForCausalLM
3
 
4
 
5
+ from sentence_transformers import SentenceTransformer, util
6
+
7
+ # بارگذاری مدل SBERT فارسی
8
+ embedder = SentenceTransformer("HooshvareLab/sbert-fa-zwnj-base")
9
+
10
+ # سوالات پر تکرار (FAQ)
11
  faq_dict = {
12
  "زمان انتخاب واحد": "معمولاً پایان شهریور و بهمن است.",
13
  "زمان حذف و اضافه": "حدود یک هفته پس از شروع ترم تحصیلی است.",
 
16
  "شرایط مهمان شدن": "با موافقت دانشگاه مبدا و مقصد انجام می‌شود.",
17
  }
18
 
19
+ # پیش‌پردازش FAQ برای تبدیل به embedding
20
+ faq_questions = list(faq_dict.keys())
21
+ faq_embeddings = embedder.encode(faq_questions, convert_to_tensor=True)
22
 
23
 
24
  # بارگذاری پرسش و پاسخ‌های FAQ
 
40
 
41
  # تابع پاسخ‌دهی
42
  def student_bot(question):
43
+ question_embedding = embedder.encode(question, convert_to_tensor=True)
44
+
45
+ # محاسبه شباهت با سوالات ثبت شده
46
+ cos_scores = util.pytorch_cos_sim(question_embedding, faq_embeddings)[0]
47
+ best_score = cos_scores.max().item()
48
+ best_idx = cos_scores.argmax().item()
49
+
50
+ if best_score >= 0.7: # آستانه شباهت
51
+ best_question = faq_questions[best_idx]
52
+ return faq_dict[best_question]
53
+ else:
54
+ return "❗️متاسفم، پاسخ این سؤال فعلاً در سیستم ثبت نشده است."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
 
56
 
57