OmidSakaki commited on
Commit
dabdef3
·
verified ·
1 Parent(s): f5b07bc

Update app.py

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