abbasNoway commited on
Commit
045109a
·
verified ·
1 Parent(s): 8efcb49

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +83 -178
app.py CHANGED
@@ -15,203 +15,136 @@ class UrduOptimizedPredictor:
15
  self.text_model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-mpnet-base-v2')
16
  self.text_model.to(self.device)
17
 
18
- # Try multiple possible model file locations
19
- possible_paths = [
20
- "urdu_optimized_model.pkl",
21
- "./urdu_optimized_model.pkl",
22
- "models/urdu_optimized_model/urdu_optimized_model.pkl",
23
- "urdu_optimized_model.pkl"
24
- ]
25
-
26
- model_loaded = False
27
- for model_file in possible_paths:
28
- if os.path.exists(model_file):
29
- print(f"📁 Loading model from: {model_file}")
30
- try:
31
- with open(model_file, 'rb') as f:
32
- model_data = pickle.load(f)
33
-
34
- self.emoji_embeddings = {k: v[0] for k, v in model_data['emoji_embeddings'].items()}
35
- self.emoji_list = model_data['emoji_list']
36
-
37
- print(f"✅ Loaded Urdu-optimized model with {len(self.emoji_list)} meaningful emojis")
38
- model_loaded = True
39
- break
40
-
41
- except Exception as e:
42
- print(f"❌ Error loading {model_file}: {e}")
43
- continue
44
-
45
- if not model_loaded:
46
- print("❌ Could not load model file. Using fallback predictions.")
47
- # Create fallback emoji mappings
48
- self.emoji_embeddings = {}
49
- self.emoji_list = ["😊", "❤️", "😂", "😭", "😍", "🔥", "🙏", "👍"]
50
-
51
- def predict_smart(self, text, top_k=3, min_confidence=0.3):
52
- """Smart prediction with confidence filtering"""
53
- # Check if model is loaded properly
54
- if not self.emoji_embeddings:
55
- return self.fallback_predict(text, top_k)
56
 
57
  try:
58
- # Get text embedding
59
- text_embedding = self.text_model.encode([text], convert_to_tensor=True)
60
- text_embedding_np = text_embedding.cpu().numpy()
61
 
62
- # Calculate similarities
63
- similarities = {}
64
- for emoji, emoji_embedding in self.emoji_embeddings.items():
65
- similarity = cosine_similarity(text_embedding_np, emoji_embedding.reshape(1, -1))[0][0]
66
- similarities[emoji] = similarity
67
 
68
- # Filter by confidence and return top K
69
- filtered = [(emoji, score) for emoji, score in similarities.items() if score >= min_confidence]
70
- sorted_emojis = sorted(filtered, key=lambda x: x[1], reverse=True)
71
 
72
- # If no confident predictions, return top 1 anyway
73
- if not sorted_emojis:
74
- top_overall = sorted(similarities.items(), key=lambda x: x[1], reverse=True)[:1]
75
- return top_overall
76
-
77
- return sorted_emojis[:top_k]
78
  except Exception as e:
79
- print(f"Prediction error: {e}")
80
- return self.fallback_predict(text, top_k)
81
 
82
- def fallback_predict(self, text, top_k=3):
83
- """Fallback prediction using keyword matching"""
84
- text_lower = text.lower()
 
 
 
 
 
 
 
 
 
 
85
 
86
- # Keyword to emoji mapping
87
- keyword_mapping = {
88
- 'خوش': ['😊', '😄', '😂'],
89
- 'مسکراہٹ': ['😊', '🙂', '😄'],
90
- 'ہنس': ['😂', '😄', '🤣'],
91
- 'محبت': ['❤️', '😍', '💕'],
92
- 'دل': ['❤️', '💖', '💕'],
93
- 'غصہ': ['😠', '👿', '💢'],
94
- 'ناراض': ['😠', '😡', '👿'],
95
- 'رونا': ['😭', '😢', '��'],
96
- 'دکھ': ['😔', '😞', '😢'],
97
- 'تھک': ['😴', '🥱', '😪'],
98
- 'نیند': ['😴', '💤', '🥱'],
99
- 'بارش': ['🌧️', '☔', '⛈️'],
100
- 'موسم': ['🌤️', '☀️', '🌞'],
101
- 'دوست': ['👫', '👭', '👬'],
102
- 'پارٹی': ['🎉', '🎊', '🥳'],
103
- 'کھانا': ['😋', '🍕', '🍔'],
104
- 'پڑھائی': ['📚', '✏️', '🎓'],
105
- 'کام': ['💼', '👔', '📊'],
106
- 'سفر': ['✈️', '🚗', '🏞️'],
107
- 'کھیل': ['⚽', '🏀', '🎾']
108
- }
109
 
110
- # Find matching keywords
111
- matches = []
112
- for keyword, emojis in keyword_mapping.items():
113
- if keyword in text_lower:
114
- matches.extend([(emoji, 0.8) for emoji in emojis])
115
 
116
- # Remove duplicates and return top_k
117
- unique_matches = []
118
- seen_emojis = set()
119
- for emoji, score in matches:
120
- if emoji not in seen_emojis:
121
- unique_matches.append((emoji, score))
122
- seen_emojis.add(emoji)
123
 
124
- return unique_matches[:top_k] if unique_matches else [('😐', 0.5)]
 
 
 
 
 
 
125
 
126
  # Initialize predictor
127
- print("🚀 Loading Urdu Emoji Prediction Model...")
128
  predictor = UrduOptimizedPredictor()
129
 
130
  def predict_emoji(urdu_text):
131
- """Main prediction function for Gradio interface"""
132
  if not urdu_text.strip():
133
  return "⬅️ اردو متن لکھیں"
134
 
135
  try:
136
- # Get predictions from model
137
  predictions = predictor.predict_smart(urdu_text, top_k=3, min_confidence=0.3)
138
 
139
  # Format output
140
  if predictions:
141
- result = ""
142
  for i, (emoji, score) in enumerate(predictions, 1):
143
- confidence = "🟢" if score > 0.6 else "🟡" if score > 0.4 else "🔴"
144
- result += f"{i}. {emoji} {confidence} ({score:.2f})\n"
145
- return result.strip()
146
  else:
147
- return "❌ کوئی مناسب ایموجی نہیں مل سکی"
148
 
149
  except Exception as e:
150
  print(f"Error in prediction: {e}")
151
- return "⚠️ نظام میں خرابی، براہ کرم دوبارہ کوشش کریں"
152
 
153
- def batch_predict(texts):
154
- """Batch prediction for multiple texts"""
155
- results = []
156
- for text in texts:
157
- if text.strip():
158
- predictions = predictor.predict_smart(text, top_k=2, min_confidence=0.3)
159
- emojis = " ".join([emoji for emoji, score in predictions])
160
- results.append(f"{text} {emojis}")
161
- else:
162
- results.append("⬅️ متن درکار ہے")
163
- return "\n".join(results)
 
 
 
 
 
 
 
 
 
 
164
 
165
  # Create Gradio interface
166
- with gr.Blocks(theme=gr.themes.Soft(), title="Urdu Emoji Predictor") as demo:
 
 
167
  gr.Markdown(
168
  """
169
- # 🇵🇰 اردو ایموجی پ��شنگو
170
- ### اردو متن کے لیے موزوں ترین ایموجیز کی پیشنگو
171
 
172
- اپنا اردو متن لکھیں اور متعلقہ ایموجیز حاصل کریں!
 
 
 
173
  """
174
  )
175
 
176
  with gr.Row():
177
  with gr.Column():
178
  input_text = gr.Textbox(
179
- label="اردو متن",
180
- placeholder="یہاں اپنا اردو متن لکھیں... مثال: میں آج بہت خوش ہوں",
181
  lines=3
182
  )
183
 
184
- predict_btn = gr.Button("🚀 ایموجیز پیش کریں", variant="primary")
185
 
186
  with gr.Column():
187
  output_text = gr.Textbox(
188
- label="پیشنگو ایموجیز",
189
- placeholder="یہاں آپ کی پیشنگو ایموجیز ظاہر ہوں گی...",
190
- lines=4
191
  )
192
 
193
- # Confidence threshold slider
194
- confidence_slider = gr.Slider(
195
- minimum=0.1,
196
- maximum=0.9,
197
- value=0.3,
198
- step=0.1,
199
- label="اعتماد کی سطح",
200
- info="اعتماد کی سطح کم رکھیں تو زیادہ ایموجیز مل سکتی ہیں"
201
- )
202
-
203
- # Batch prediction section
204
- with gr.Accordion("🎯 ایک سے زیادہ متنوں کے لیے", open=False):
205
- batch_input = gr.Textbox(
206
- label="متنوں کی فہرست (ہر متن نیلی لائن پر)",
207
- placeholder="پہلا متن\nدوسرا متن\nتیسرا متن",
208
- lines=4
209
- )
210
- batch_output = gr.Textbox(label="نتیجہ", lines=4)
211
- batch_btn = gr.Button("📊 تمام کے لیے ایموجیز پیش کریں")
212
-
213
- # Examples section
214
- gr.Markdown("### 💡 مثالیں آزما کر دیکھیں")
215
  examples = gr.Examples(
216
  examples=[
217
  ["میں آج بہت خوش ہوں اور مسکرا رہا ہوں"],
@@ -226,40 +159,12 @@ with gr.Blocks(theme=gr.themes.Soft(), title="Urdu Emoji Predictor") as demo:
226
  inputs=input_text,
227
  outputs=output_text,
228
  fn=predict_emoji,
229
- cache_examples=True
230
- )
231
-
232
- # Footer
233
- gr.Markdown(
234
- """
235
- ---
236
- ### ℹ️ نظام کے بارے میں
237
- - **ماڈل**: Urdu-optimized Embedding Model
238
- - **ایموجیز**: 80+ Urdu-context optimized emojis
239
- - **درستی**: Top-3 درستگی 30.4%
240
- - **ڈیٹا**: 10 لاکھ+ Urdu tweets پر تربیت
241
-
242
- 🟢 اعلی درستگی | 🟡 درمیانی درستگی | 🔴 کم درستگی
243
- """
244
- )
245
-
246
- # Event handlers
247
- predict_btn.click(
248
- fn=predict_emoji,
249
- inputs=input_text,
250
- outputs=output_text
251
- )
252
-
253
- batch_btn.click(
254
- fn=lambda x: batch_predict(x.split('\n')),
255
- inputs=batch_input,
256
- outputs=batch_output
257
  )
258
 
259
  if __name__ == "__main__":
260
  demo.launch(
261
  server_name="0.0.0.0",
262
  server_port=7860,
263
- share=True, # Creates public link
264
- show_error=True
265
  )
 
15
  self.text_model = SentenceTransformer('sentence-transformers/paraphrase-multilingual-mpnet-base-v2')
16
  self.text_model.to(self.device)
17
 
18
+ # Load YOUR model
19
+ model_file = "models/urdu_optimized_model/urdu_optimized_model.pkl"
20
+ print(f"📁 Loading YOUR model from: {model_file}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
  try:
23
+ with open(model_file, 'rb') as f:
24
+ model_data = pickle.load(f)
 
25
 
26
+ self.emoji_embeddings = {k: v[0] for k, v in model_data['emoji_embeddings'].items()}
27
+ self.emoji_list = model_data['emoji_list']
 
 
 
28
 
29
+ print(f"✅ SUCCESS: Loaded YOUR Urdu-optimized model with {len(self.emoji_list)} emojis")
30
+ print(f"📊 Your emojis: {self.emoji_list[:20]}...") # Show first 20 emojis
 
31
 
 
 
 
 
 
 
32
  except Exception as e:
33
+ print(f" ERROR loading your model: {e}")
34
+ raise e
35
 
36
+ def predict_smart(self, text, top_k=3, min_confidence=0.3):
37
+ """Use YOUR model for prediction"""
38
+ print(f"\n🔍 PREDICTING for: '{text}'")
39
+
40
+ # Get text embedding
41
+ text_embedding = self.text_model.encode([text], convert_to_tensor=True)
42
+ text_embedding_np = text_embedding.cpu().numpy()
43
+
44
+ # Calculate similarities with YOUR emoji embeddings
45
+ similarities = {}
46
+ for emoji, emoji_embedding in self.emoji_embeddings.items():
47
+ similarity = cosine_similarity(text_embedding_np, emoji_embedding.reshape(1, -1))[0][0]
48
+ similarities[emoji] = similarity
49
 
50
+ print(f"📈 Similarities calculated for {len(similarities)} emojis")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
51
 
52
+ # Filter by confidence and return top K
53
+ filtered = [(emoji, score) for emoji, score in similarities.items() if score >= min_confidence]
54
+ sorted_emojis = sorted(filtered, key=lambda x: x[1], reverse=True)
 
 
55
 
56
+ print(f"🎯 Top predictions: {sorted_emojis[:top_k]}")
 
 
 
 
 
 
57
 
58
+ # If no confident predictions, return top overall
59
+ if not sorted_emojis:
60
+ top_overall = sorted(similarities.items(), key=lambda x: x[1], reverse=True)[:top_k]
61
+ print(f"⚠️ No confident predictions, using top overall: {top_overall}")
62
+ return top_overall
63
+
64
+ return sorted_emojis[:top_k]
65
 
66
  # Initialize predictor
67
+ print("🚀 Loading YOUR Urdu Emoji Prediction Model...")
68
  predictor = UrduOptimizedPredictor()
69
 
70
  def predict_emoji(urdu_text):
71
+ """Main prediction function using YOUR model"""
72
  if not urdu_text.strip():
73
  return "⬅️ اردو متن لکھیں"
74
 
75
  try:
76
+ # Get predictions from YOUR model
77
  predictions = predictor.predict_smart(urdu_text, top_k=3, min_confidence=0.3)
78
 
79
  # Format output
80
  if predictions:
81
+ result = "🎯 **آپ کے ماڈل کی پیشنگو:**\n\n"
82
  for i, (emoji, score) in enumerate(predictions, 1):
83
+ confidence_level = "اعلیٰ" if score > 0.6 else "درمیانی" if score > 0.4 else "کم"
84
+ result += f"{i}. {emoji} - {confidence_level} درستگی ({score:.3f})\n"
85
+ return result
86
  else:
87
+ return "❌ آپ کے ماڈل سے کوئی مناسب ایموجی نہیں مل سکی"
88
 
89
  except Exception as e:
90
  print(f"Error in prediction: {e}")
91
+ return f"⚠️ نظام میں خرابی: {e}"
92
 
93
+ # Test your model with some examples before starting the interface
94
+ print("\n" + "="*60)
95
+ print("🧪 TESTING YOUR MODEL WITH SAMPLE TEXTS")
96
+ print("="*60)
97
+
98
+ test_texts = [
99
+ "میں بہت خوش ہوں",
100
+ "دل ٹوٹ گیا ہے",
101
+ "دوستوں کے ساتھ پارٹی کا مزہ آیا",
102
+ "امی نے میری پسندیدہ ڈش بنائی ہے",
103
+ "غصہ سے دماغ پھٹ رہا ہے"
104
+ ]
105
+
106
+ for text in test_texts:
107
+ print(f"\n📝 Testing: '{text}'")
108
+ predictions = predictor.predict_smart(text, top_k=3, min_confidence=0.3)
109
+ print(f" → {[emoji for emoji, score in predictions]}")
110
+
111
+ print("\n" + "="*60)
112
+ print("🚀 STARTING GRADIO INTERFACE")
113
+ print("="*60)
114
 
115
  # Create Gradio interface
116
+ demo = gr.Blocks(title="آپ کا اردو ایموجی پیشنگو ماڈل")
117
+
118
+ with demo:
119
  gr.Markdown(
120
  """
121
+ # 🎯 **آپ کا تربیت یافتہ اردو ایموجی ماڈل**
 
122
 
123
+ یہ انٹرفیس **آپ کے ہی تربیت یافتہ ماڈل** کا استعمال کر رہا ہے!
124
+ - **80+ Urdu emojis** آپ کے ڈیٹا سے تربیت یافتہ
125
+ - **10 لاکھ+ Urdu tweets** پر مبنی
126
+ - **Top-3 درستگی: 30.4%**
127
  """
128
  )
129
 
130
  with gr.Row():
131
  with gr.Column():
132
  input_text = gr.Textbox(
133
+ label="اردو متن درج کریں",
134
+ placeholder="اپنا Urdu متن یہاں لکھیں...",
135
  lines=3
136
  )
137
 
138
+ predict_btn = gr.Button("🎯 ماڈل سے ایموجیز حاصل کریں", variant="primary")
139
 
140
  with gr.Column():
141
  output_text = gr.Textbox(
142
+ label="آپ کے ماڈل کی پیشنگو",
143
+ placeholder="یہاں آپ کے ماڈل کی پیشنگو ایموجیز ظاہر ہوں گی...",
144
+ lines=5
145
  )
146
 
147
+ gr.Markdown("### 💡 آپ کے ماڈل کی جانچ کے لیے مثالیں")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
148
  examples = gr.Examples(
149
  examples=[
150
  ["میں آج بہت خوش ہوں اور مسکرا رہا ہوں"],
 
159
  inputs=input_text,
160
  outputs=output_text,
161
  fn=predict_emoji,
162
+ cache_examples=False
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  )
164
 
165
  if __name__ == "__main__":
166
  demo.launch(
167
  server_name="0.0.0.0",
168
  server_port=7860,
169
+ share=True
 
170
  )