Update app.py
Browse files
app.py
CHANGED
|
@@ -184,6 +184,8 @@ def advanced_ner_pipeline(text, target_labels, progress=gr.Progress()):
|
|
| 184 |
log_messages = list(_initial_logs)
|
| 185 |
|
| 186 |
try:
|
|
|
|
|
|
|
| 187 |
initial_results = ner_pipe(text)
|
| 188 |
except Exception as e:
|
| 189 |
log_messages.append(f"❌ Hata: Temel NER modelinde sorun oluştu: {e}")
|
|
@@ -202,6 +204,8 @@ def advanced_ner_pipeline(text, target_labels, progress=gr.Progress()):
|
|
| 202 |
for i, entity in enumerate(initial_results):
|
| 203 |
word = entity['word']
|
| 204 |
label = entity['entity_group']
|
|
|
|
|
|
|
| 205 |
|
| 206 |
# Gradio ilerleme çubuğunu güncelle
|
| 207 |
current_progress = (i + 1) / total_entities
|
|
@@ -211,15 +215,17 @@ def advanced_ner_pipeline(text, target_labels, progress=gr.Progress()):
|
|
| 211 |
result_obj = {
|
| 212 |
"entity": word,
|
| 213 |
"initial_label": label,
|
|
|
|
| 214 |
"final_label": label,
|
| 215 |
"source": "Model",
|
| 216 |
"reasoning": "" # CoT gerekçesi için yeni alan
|
| 217 |
}
|
| 218 |
|
| 219 |
# Eğer etiket MISC ise RAG sürecini başlat
|
|
|
|
| 220 |
if label == "MISC" and gen_pipe is not None:
|
| 221 |
standardized_word = word.title()
|
| 222 |
-
log_messages.append(f" ⚠️ MISC tespit edildi: '{word}'. Wikipedia'ya soruluyor...")
|
| 223 |
yield log_messages, None # Log mesajını gönder (2 değer)
|
| 224 |
|
| 225 |
wiki_context = get_wiki_summary(standardized_word)
|
|
@@ -243,7 +249,7 @@ def advanced_ner_pipeline(text, target_labels, progress=gr.Progress()):
|
|
| 243 |
log_messages.append(" ❌ Wiki'de bilgi bulunamadı, MISC olarak kalıyor.")
|
| 244 |
yield log_messages, None # Log mesajını gönder (2 değer)
|
| 245 |
else:
|
| 246 |
-
log_messages.append(f" ✅ {word} için etiket: {label}")
|
| 247 |
yield log_messages, None # Log mesajını gönder (2 değer)
|
| 248 |
|
| 249 |
final_results.append(result_obj)
|
|
@@ -276,7 +282,7 @@ custom_label_definitions = {
|
|
| 276 |
"SOFTWARE": "Bilgisayar programları, mobil uygulamalar, yapay zeka sistemleri, işletim sistemleri.",
|
| 277 |
"ORG_SUB": "Şirket birimleri, üniversite fakülteleri, dernek şubeleri gibi büyük bir kurumun alt birimleri.",
|
| 278 |
"LANGUAGE": "Dillerin adı (Örn: İngilizce, Arapça).",
|
| 279 |
-
"TITLE": "Kişinin unvanı,
|
| 280 |
"CYBER": "URL, E-posta adresi, IP adresi, hashtag veya kullanıcı adı.",
|
| 281 |
# MISC: Kalan her şey
|
| 282 |
"MISC": "Diğer adlandırılmış varlıklar (LLM tarafından rafine edilemeyen veya uymayanlar)."
|
|
@@ -368,6 +374,7 @@ def process_ner_request(text, progress=gr.Progress()):
|
|
| 368 |
current_results_html += " <tr>\n"
|
| 369 |
current_results_html += " <th>VARLIK</th>\n"
|
| 370 |
current_results_html += " <th>İLK ETİKET</th>\n"
|
|
|
|
| 371 |
current_results_html += " <th>RAG SONRASI ETİKETİ (GEREKÇE)</th>\n"
|
| 372 |
current_results_html += " <th>KAYNAK</th>\n"
|
| 373 |
current_results_html += " </tr>\n"
|
|
@@ -401,10 +408,22 @@ def process_ner_request(text, progress=gr.Progress()):
|
|
| 401 |
else:
|
| 402 |
reasoning_tooltip = item['final_label']
|
| 403 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 404 |
|
| 405 |
current_results_html += " <tr>\n"
|
| 406 |
current_results_html += f" <td>{item['entity']}</td>\n"
|
| 407 |
current_results_html += f" <td>{item['initial_label']}</td>\n"
|
|
|
|
| 408 |
current_results_html += f" <td style='{final_label_style}'>{reasoning_tooltip}</td>\n"
|
| 409 |
current_results_html += f" <td>{item['source']}</td>\n"
|
| 410 |
current_results_html += " </tr>\n"
|
|
@@ -420,7 +439,7 @@ iface = gr.Interface(
|
|
| 420 |
# Çıktı olarak 2 ayrı HTML bileşeni döndürülmeli.
|
| 421 |
outputs=[gr.HTML(label="İşlem Logları"), gr.HTML(label="Zenginleştirilmiş NER Sonuçları")],
|
| 422 |
title="Gelişmiş İnce Taneli NER (23 Etiket - RAG/LLM Destekli)",
|
| 423 |
-
description="Metindeki varlıkları tanır ve MISC etiketlileri, 23 ince taneli kategoriye dönüştürmek için Wikipedia (RAG) ve LLM (Qwen2.5-1.5B) kullanılmaktadır.
|
| 424 |
examples=[
|
| 425 |
# Yeni etiketleri test eden örnekler eklendi
|
| 426 |
["Milli Eğitim Bakanlığı'na bağlı Lise Birimleri, 2024 Türkiye Kupası etkinliğine katılacak ve %15 indirim uygulayacak."],
|
|
|
|
| 184 |
log_messages = list(_initial_logs)
|
| 185 |
|
| 186 |
try:
|
| 187 |
+
# Not: aggregation_strategy="simple" kullanıldığı için, her birleştirilmiş varlığın
|
| 188 |
+
# tahmin skoru, en yüksek skorlu alt parçaya ait olacaktır.
|
| 189 |
initial_results = ner_pipe(text)
|
| 190 |
except Exception as e:
|
| 191 |
log_messages.append(f"❌ Hata: Temel NER modelinde sorun oluştu: {e}")
|
|
|
|
| 204 |
for i, entity in enumerate(initial_results):
|
| 205 |
word = entity['word']
|
| 206 |
label = entity['entity_group']
|
| 207 |
+
# YENİ: Tahmin skorunu yakala ve 4 ondalık basamağa yuvarla
|
| 208 |
+
score = entity['score']
|
| 209 |
|
| 210 |
# Gradio ilerleme çubuğunu güncelle
|
| 211 |
current_progress = (i + 1) / total_entities
|
|
|
|
| 215 |
result_obj = {
|
| 216 |
"entity": word,
|
| 217 |
"initial_label": label,
|
| 218 |
+
"initial_score": score, # YENİ: Skoru ekle
|
| 219 |
"final_label": label,
|
| 220 |
"source": "Model",
|
| 221 |
"reasoning": "" # CoT gerekçesi için yeni alan
|
| 222 |
}
|
| 223 |
|
| 224 |
# Eğer etiket MISC ise RAG sürecini başlat
|
| 225 |
+
# Ayrıca, skor ne kadar düşükse LLM'e olan ihtiyaç o kadar artar.
|
| 226 |
if label == "MISC" and gen_pipe is not None:
|
| 227 |
standardized_word = word.title()
|
| 228 |
+
log_messages.append(f" ⚠️ MISC tespit edildi: '{word}' (Skor: {score:.2f}). Wikipedia'ya soruluyor...")
|
| 229 |
yield log_messages, None # Log mesajını gönder (2 değer)
|
| 230 |
|
| 231 |
wiki_context = get_wiki_summary(standardized_word)
|
|
|
|
| 249 |
log_messages.append(" ❌ Wiki'de bilgi bulunamadı, MISC olarak kalıyor.")
|
| 250 |
yield log_messages, None # Log mesajını gönder (2 değer)
|
| 251 |
else:
|
| 252 |
+
log_messages.append(f" ✅ {word} için etiket: {label} (Skor: {score:.2f})")
|
| 253 |
yield log_messages, None # Log mesajını gönder (2 değer)
|
| 254 |
|
| 255 |
final_results.append(result_obj)
|
|
|
|
| 282 |
"SOFTWARE": "Bilgisayar programları, mobil uygulamalar, yapay zeka sistemleri, işletim sistemleri.",
|
| 283 |
"ORG_SUB": "Şirket birimleri, üniversite fakülteleri, dernek şubeleri gibi büyük bir kurumun alt birimleri.",
|
| 284 |
"LANGUAGE": "Dillerin adı (Örn: İngilizce, Arapça).",
|
| 285 |
+
"TITLE": "Kişinin unvanı, rütbesini veya pozisyonunu (Örn: Profesör, General, Başkan).",
|
| 286 |
"CYBER": "URL, E-posta adresi, IP adresi, hashtag veya kullanıcı adı.",
|
| 287 |
# MISC: Kalan her şey
|
| 288 |
"MISC": "Diğer adlandırılmış varlıklar (LLM tarafından rafine edilemeyen veya uymayanlar)."
|
|
|
|
| 374 |
current_results_html += " <tr>\n"
|
| 375 |
current_results_html += " <th>VARLIK</th>\n"
|
| 376 |
current_results_html += " <th>İLK ETİKET</th>\n"
|
| 377 |
+
current_results_html += " <th>İLK TAHMİN SKORU</th>\n" # YENİ SÜTUN
|
| 378 |
current_results_html += " <th>RAG SONRASI ETİKETİ (GEREKÇE)</th>\n"
|
| 379 |
current_results_html += " <th>KAYNAK</th>\n"
|
| 380 |
current_results_html += " </tr>\n"
|
|
|
|
| 408 |
else:
|
| 409 |
reasoning_tooltip = item['final_label']
|
| 410 |
|
| 411 |
+
# Skoru formatla
|
| 412 |
+
score_formatted = f"{item['initial_score'] * 100:.2f}%"
|
| 413 |
+
|
| 414 |
+
# Skorun rengini güven seviyesine göre ayarlama (Yüksek skor=Yeşil, Düşük skor=Turuncu/Kırmızı)
|
| 415 |
+
score_color = ""
|
| 416 |
+
if item['initial_score'] > 0.95:
|
| 417 |
+
score_color = "color: #10b981;" # Yeşil
|
| 418 |
+
elif item['initial_score'] > 0.8:
|
| 419 |
+
score_color = "color: #f59e0b;" # Sarı/Turuncu
|
| 420 |
+
else:
|
| 421 |
+
score_color = "color: #ef4444;" # Kırmızı
|
| 422 |
|
| 423 |
current_results_html += " <tr>\n"
|
| 424 |
current_results_html += f" <td>{item['entity']}</td>\n"
|
| 425 |
current_results_html += f" <td>{item['initial_label']}</td>\n"
|
| 426 |
+
current_results_html += f" <td style='{score_color} font-weight: bold;'>{score_formatted}</td>\n" # YENİ SKOR SÜTUNU
|
| 427 |
current_results_html += f" <td style='{final_label_style}'>{reasoning_tooltip}</td>\n"
|
| 428 |
current_results_html += f" <td>{item['source']}</td>\n"
|
| 429 |
current_results_html += " </tr>\n"
|
|
|
|
| 439 |
# Çıktı olarak 2 ayrı HTML bileşeni döndürülmeli.
|
| 440 |
outputs=[gr.HTML(label="İşlem Logları"), gr.HTML(label="Zenginleştirilmiş NER Sonuçları")],
|
| 441 |
title="Gelişmiş İnce Taneli NER (23 Etiket - RAG/LLM Destekli)",
|
| 442 |
+
description="Metindeki varlıkları tanır ve MISC etiketlileri, 23 ince taneli kategoriye dönüştürmek için Wikipedia (RAG) ve LLM (Qwen2.5-1.5B) kullanılmaktadır. İlk modelin tahmin skorları da artık tabloda yer almaktadır.",
|
| 443 |
examples=[
|
| 444 |
# Yeni etiketleri test eden örnekler eklendi
|
| 445 |
["Milli Eğitim Bakanlığı'na bağlı Lise Birimleri, 2024 Türkiye Kupası etkinliğine katılacak ve %15 indirim uygulayacak."],
|