OmidSakaki commited on
Commit
ae5d016
·
verified ·
1 Parent(s): 32b7bf5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +59 -56
app.py CHANGED
@@ -3,14 +3,14 @@ from transformers import pipeline, AutoTokenizer, AutoModelForSequenceClassifica
3
  import requests
4
  import torch
5
 
6
- # مدل merged شما
7
  MODEL_REPO = "OmidSakaki/mental-health-deberta"
8
 
9
- print("Loading model and tokenizer...")
10
  tokenizer = AutoTokenizer.from_pretrained(MODEL_REPO)
11
  model = AutoModelForSequenceClassification.from_pretrained(MODEL_REPO)
12
 
13
- # Pipeline برای طبقه‌بندی
14
  classifier = pipeline(
15
  "text-classification",
16
  model=model,
@@ -22,13 +22,14 @@ classifier = pipeline(
22
  TRANSLATE_API_URL = "https://api.mymemory.translated.net/get"
23
 
24
  def translate_to_english(text_fa: str) -> str:
25
- if not text_fa.strip():
26
  return "متن وارد نشده است"
27
 
28
  params = {
29
  "q": text_fa,
30
  "langpair": "fa|en"
31
  }
 
32
  try:
33
  response = requests.get(TRANSLATE_API_URL, params=params, timeout=12)
34
  response.raise_for_status()
@@ -38,28 +39,28 @@ def translate_to_english(text_fa: str) -> str:
38
  except Exception as e:
39
  return f"خطا در ترجمه: {str(e)}"
40
 
 
41
  def classify_mental_health(text_fa: str) -> str:
42
  if not text_fa or not text_fa.strip():
43
  return "لطفاً متن فارسی وارد کنید."
44
 
45
  # ترجمه به انگلیسی
46
  text_en = translate_to_english(text_fa)
47
-
48
- # مقدار پیش‌فرض برای خروجی (در صورت خطا استفاده می‌شود)
49
- output = (
50
- f"متن ترجمه‌شده به انگلیسی:\n{text_en}\n\n"
51
- "خطا در پردازش مدل رخ داد.\n"
52
- "لطفاً دوباره امتحان کنید یا متن دیگری وارد کنید.\n"
53
- "⚠️ اگر احساس بحران دارید، فوراً با ۱۲۳ (اورژانس اجتماعی) یا ۱۴۸۰ (مشاوره بهزیستی) تماس بگیرید."
54
  )
55
-
56
  try:
57
  # طبقه‌بندی
58
  result = classifier(text_en, truncation=True, max_length=512)[0]
59
  label_en = result['label']
60
  score = result['score'] * 100
61
-
62
- # نقشه لیبل به فارسی
63
  label_map = {
64
  'Normal': 'نرمال / عادی',
65
  'Depression': 'افسردگی',
@@ -67,62 +68,63 @@ def classify_mental_health(text_fa: str) -> str:
67
  'Suicidal': 'افکار خودکشی'
68
  }
69
  label_fa = label_map.get(label_en, label_en)
70
-
71
- # توصیه‌های حمایتی
72
  advice = ""
73
  if label_en == 'Depression':
74
  advice = (
75
- "احساس افسردگی خیلی سنگین است، اما شما تنها نیستید و این وضعیت قابل بهبود است.\n"
76
- "امروز با یک دوست یا عضو خانواده مورد اعتماد صحبت کنید.\n"
77
- "حتی قدم‌های کوچک مثل پیاده‌روی کوتاه یا نوشتن احساسات کمک‌کننده است.\n"
78
  "خواب و تغذیه منظم را جدی بگیرید.\n"
79
- "حتماً به روانشناس یا روانپزشک مراجعه کنید – درمان‌های مؤثری وجود دارد.\n"
80
  "شما ارزشمند هستید و شرایط می‌تواند بهتر شود."
81
  )
82
  elif label_en == 'Anxiety':
83
  advice = (
84
- "اضطراب شدید می‌تواند خیلی آزاردهنده باشد، اما راه‌هایی برای کنترل آن وجود دارد.\n"
85
- "چند نفس عمیق و آهسته بکشید (۴ ثانیه دم، ۴ ثانیه نگه‌داشتن، ۶ ثانیه بازدم).\n"
86
- "به ۵ چیز اطراف خود که می‌بینید، ۴ چیز که لمس می‌کنید، ۳ چیز که می‌شنوید توجه کنید.\n"
87
- "از کافئین و اخبار استرس‌زا دوری کنید.\n"
88
- "با یک فرد نزدیک یا مشاور صحبت کنید.\n"
89
- "این احساس موقتی است و شما قادر به عبور از آن هستید."
90
  )
91
  elif label_en == 'Suicidal':
92
  advice = (
93
- "اگر افکار خودکشی دارید، لطفاً همین حالا کمک بگیرید – شما مهم هستید.\n"
94
- "فوراً با خطوط حمایتی تماس بگیرید: در ایران شماره ۱۲۳ (اورژانس اجتماعی) یا ۱۴۸۰ (مشاوره بهزیستی).\n"
95
- "وسایل خطرناک را از دسترس دور کنید (حتی برای مدتی کوتاه).\n"
96
- "با یک فرد مورد اعتماد صحبت کنید یا به نزدیک‌ترین مرکز درمانی بروید.\n"
97
- "این افکار گذرا هستند و کمک واقعی وجود دارد – لطفاً یک قدم بردارید.\n"
98
- "زندگی شما ارزشمند است و شرایط می‌تواند تغییر کند."
99
  )
100
-
101
- # ساخت خروجی نهایی
102
- #output = f"متن ترجمه‌شده به انگلیسی:\n{text_en}\n\n"
103
- output += f"وضعیت تشخیص داده شده: **{label_fa}**\n"
104
- output += f"اطمینان مدل: {score:.1f}%\n\n"
105
-
106
  if advice:
107
- output += "**توصیه حمایتی کوتاه:**\n" + advice + "\n\n"
108
-
109
- output += "⚠️ **توجه مهم:** این فقط یک تحلیل اولیه توسط هوش مصنوعی است و جایگزین نظر متخصص روانشناس یا روانپزشک نمی‌شود. اگر احساس خطر یا بحران دارید، فوراً با خطوط حمایتی (۱۲۳ یا ۱۴۸۰ در ایران) تماس بگیرید یا به مرکز درمانی مراجعه کنید."
110
-
 
 
 
 
111
  except Exception as e:
112
- # در صورت خطا، خروجی پیش‌فرض را با جزئیات خطا غنی‌تر می‌کنیم
113
- #output = f"متن ترجمه‌شده به انگلیسی:\n{text_en}\n\n"
114
- output += f"خطا در پردازش مدل: {str(e)}\n"
115
- output += "لطفاً دوباره امتحان کنید یا متن کوتاه‌تری وارد کنید.\n"
116
- output += "⚠️ اگر احساس بحران دارید، فوراً با ۱۲۳ یا ۱۴۸۰ تماس بگیرید."
117
-
118
- return output
119
 
120
- # رابط Gradio
121
  demo = gr.Interface(
122
  fn=classify_mental_health,
123
  inputs=gr.Textbox(
124
  label="متن فارسی خود را وارد کنید",
125
- placeholder="مثال: احساس می‌کنم هیچ امیدی ندارم و خسته‌ام...",
126
  lines=7,
127
  max_lines=15
128
  ),
@@ -132,13 +134,15 @@ demo = gr.Interface(
132
  ),
133
  title="تحلیل وضعیت سلامت روان از روی متن فارسی",
134
  description=(
135
- "متن فارسی بنویسید → توسط مدل تحلیل می‌شود → نتیجه و توصیه حمایتی به فارسی نمایش داده می‌شود.\n\n"
136
- "کلاس‌ها: نرمال، افسردگی، اضطراب، افکار خودکشی\n\n"
137
- "این ابزار آزمایشی است و جایگزین مشاوره حرفه‌ای نیست. در موارد بحران فوراً با ۱۲۳ یا ۱۴۸۰ تماس بگیرید."
 
 
138
  ),
139
  examples=[
140
  ["مدام نگرانم و نمی‌تونم آرام باشم"],
141
- ["دیگه هیچی برام مهم نیست، خسته شدم از همه چیز"],
142
  ["احساس می‌کنم زندگی ارزش ادامه دادن نداره"]
143
  ],
144
  cache_examples=False,
@@ -149,6 +153,5 @@ if __name__ == "__main__":
149
  demo.launch(
150
  server_name="0.0.0.0",
151
  server_port=7860,
152
- share=True,
153
  debug=False
154
  )
 
3
  import requests
4
  import torch
5
 
6
+ # مدل شما (merged version که push کردی)
7
  MODEL_REPO = "OmidSakaki/mental-health-deberta"
8
 
9
+ print("در حال بارگذاری مدل و توکنایزر...")
10
  tokenizer = AutoTokenizer.from_pretrained(MODEL_REPO)
11
  model = AutoModelForSequenceClassification.from_pretrained(MODEL_REPO)
12
 
13
+ # ساخت pipeline برای طبقه‌بندی
14
  classifier = pipeline(
15
  "text-classification",
16
  model=model,
 
22
  TRANSLATE_API_URL = "https://api.mymemory.translated.net/get"
23
 
24
  def translate_to_english(text_fa: str) -> str:
25
+ if not text_fa or not text_fa.strip():
26
  return "متن وارد نشده است"
27
 
28
  params = {
29
  "q": text_fa,
30
  "langpair": "fa|en"
31
  }
32
+
33
  try:
34
  response = requests.get(TRANSLATE_API_URL, params=params, timeout=12)
35
  response.raise_for_status()
 
39
  except Exception as e:
40
  return f"خطا در ترجمه: {str(e)}"
41
 
42
+
43
  def classify_mental_health(text_fa: str) -> str:
44
  if not text_fa or not text_fa.strip():
45
  return "لطفاً متن فارسی وارد کنید."
46
 
47
  # ترجمه به انگلیسی
48
  text_en = translate_to_english(text_fa)
49
+
50
+ # خروجی پایه (در صورت خطا استفاده می‌شود)
51
+ result_text = (
52
+ #f"متن ترجمه‌شده به انگلیسی:\n{text_en}\n\n"
53
+ "متأسفانه در پردازش مدل مشکلی پیش آمد.\n"
54
+ "لطفاً متن کوتاه‌تر یا واضح‌تری وارد کنید و دوباره امتحان کنید.\n"
55
+ "⚠️ اگر احساس بحران یا خطر دارید، فوراً با ۱۲۳ (اورژانس اجتماعی) یا ۱۴۸۰ (مشاوره بهزیستی) تماس بگیرید."
56
  )
57
+
58
  try:
59
  # طبقه‌بندی
60
  result = classifier(text_en, truncation=True, max_length=512)[0]
61
  label_en = result['label']
62
  score = result['score'] * 100
63
+
 
64
  label_map = {
65
  'Normal': 'نرمال / عادی',
66
  'Depression': 'افسردگی',
 
68
  'Suicidal': 'افکار خودکشی'
69
  }
70
  label_fa = label_map.get(label_en, label_en)
71
+
72
+ # توصیه حمایتی
73
  advice = ""
74
  if label_en == 'Depression':
75
  advice = (
76
+ "احساس افسردگی سنگین است، اما شما تنها نیستید و کمک وجود دارد.\n"
77
+ "امروز با یک فرد مورد اعتماد صحبت کنید.\n"
78
+ "فعالیت‌های کوچک لذت‌بخش را امتحان کنید.\n"
79
  "خواب و تغذیه منظم را جدی بگیرید.\n"
80
+ "حتماً به روانشناس یا روانپزشک مراجعه کنید – درمان مؤثر است.\n"
81
  "شما ارزشمند هستید و شرایط می‌تواند بهتر شود."
82
  )
83
  elif label_en == 'Anxiety':
84
  advice = (
85
+ "اضطراب زیاد آزاردهنده است، اما قابل کنترل است.\n"
86
+ "نفس عمیق بکشید (۴ ثانیه دم، ۴ نگه، ۶ بازدم).\n"
87
+ "به اطرافتان توجه کنید چیز ببینید، ۴ چیز لمس کنید).\n"
88
+ "از محرک‌ها (کافئین، اخبار) دوری کنید.\n"
89
+ "با کسی صحبت کنید.\n"
90
+ "این احساس می‌گذرد و شما قوی هستید."
91
  )
92
  elif label_en == 'Suicidal':
93
  advice = (
94
+ "اگر افکار خودکشی دارید، لطفاً همین حالا کمک بگیرید.\n"
95
+ "فوراً با ۱۲۳ (اورژانس اجتماعی) یا ۱۴۸۰ (مشاوره بهزیستی) تماس بگیرید.\n"
96
+ "وسایل خطرناک را دور کنید.\n"
97
+ "با یک فرد نزدیک صحبت کنید.\n"
98
+ "به مرکز درمانی بروید.\n"
99
+ "زندگی شما ارزشمند است کمک وجود دارد."
100
  )
101
+
102
+ # خروجی موفق
103
+ #result_text = f"متن ترجمه‌شده به انگلیسی:\n{text_en}\n\n"
104
+ result_text += f"وضعیت تشخیص داده شده: **{label_fa}**\n"
105
+ result_text += f"اطمینان مدل: {score:.1f}%\n\n"
106
+
107
  if advice:
108
+ result_text += "**توصیه حمایتی کوتاه:**\n" + advice + "\n\n"
109
+
110
+ result_text += (
111
+ "⚠️ **توجه مهم:**\n"
112
+ "این فقط یک تحلیل اولیه توسط هوش مصنوعی است و جایگزین نظر متخصص روانشناس یا روانپزشک نمی‌شود.\n"
113
+ "در موارد بحران یا احساس خطر فوراً با خطوط حمایتی (۱۲۳ یا ۱۴۸۰ در ایران) تماس بگیرید یا به نزدیک‌ترین مرکز درمانی مراجعه کنید."
114
+ )
115
+
116
  except Exception as e:
117
+ result_text += f"\n\nجزئیات خطا: {str(e)}"
118
+
119
+ return result_text
120
+
 
 
 
121
 
122
+ # رابط کاربری Gradio
123
  demo = gr.Interface(
124
  fn=classify_mental_health,
125
  inputs=gr.Textbox(
126
  label="متن فارسی خود را وارد کنید",
127
+ placeholder="مثال: احساس می��کنم دیگه هیچ امیدی ندارم...",
128
  lines=7,
129
  max_lines=15
130
  ),
 
134
  ),
135
  title="تحلیل وضعیت سلامت روان از روی متن فارسی",
136
  description=(
137
+ "متن فارسی بنویسید → توسط مدل تحلیل می‌شود → "
138
+ "نتیجه و توصیه حمایتی به فارسی نمایش داده می‌شود.\n\n"
139
+ "کلاس‌های تشخیص: نرمال، افسردگی، اضطراب، افکار خودکشی\n\n"
140
+ "این ابزار فقط جنبه آزمایشی و آموزشی دارد و جایگزین مشاوره حرفه‌ای نیست.\n"
141
+ "در موارد بحران فوراً با ۱۲۳ یا ۱۴۸۰ تماس بگیرید."
142
  ),
143
  examples=[
144
  ["مدام نگرانم و نمی‌تونم آرام باشم"],
145
+ ["دیگه هیچی برام مهم نیست، خسته شدم"],
146
  ["احساس می‌کنم زندگی ارزش ادامه دادن نداره"]
147
  ],
148
  cache_examples=False,
 
153
  demo.launch(
154
  server_name="0.0.0.0",
155
  server_port=7860,
 
156
  debug=False
157
  )