apak commited on
Commit
eb14876
·
verified ·
1 Parent(s): 6769cc5

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +55 -54
app.py CHANGED
@@ -18,6 +18,7 @@ try:
18
  IS_LLM_ENABLED = True
19
  except Exception as e:
20
  IS_LLM_ENABLED = False
 
21
 
22
  # --- 2. YARDIMCI FONKSİYONLAR ---
23
  def get_wiki_summary(term):
@@ -29,8 +30,9 @@ def get_wiki_summary(term):
29
  return wikipedia.summary(search_results[0], sentences=2, auto_suggest=False)
30
  except: return None
31
 
 
32
 
33
-
34
  @spaces.GPU
35
  def refine_label_with_llm(entity_text, full_sentence, wiki_context, custom_labels):
36
  if not IS_LLM_ENABLED: return "MISC", "LLM Aktif Değil"
@@ -38,58 +40,56 @@ def refine_label_with_llm(entity_text, full_sentence, wiki_context, custom_label
38
  device = "cuda" if torch.cuda.is_available() else "cpu"
39
  llm_model.to(device)
40
 
41
- # 1. Etiket Tanımları (Bilgi Kaynağı)
42
  label_rules = ""
43
  for k, v in custom_labels.items():
44
  label_rules += f"### {k}\n- TANIM: {v['tanim']}\n- ANAHTARLAR: {', '.join(v['anahtar_kelimeler'])}\n\n"
45
 
46
- # 2. Sistematik CoT ve Kuralların Tanımlanması
47
 
48
  prompt = f"""
49
- Sen yüksek hassasiyetli bir semantik analiz uzmanısın. Görevin, '[[{entity_text}]]' varlığını aşağıdaki 4 adımlı Sistematik CoT protokolüne göre sınıflandırmaktır.
50
-
51
- ETİKET TANIMLARI:
52
- {label_rules}
53
-
54
- SİSTEMATİK CoT ADIMLARI:
55
- Adım 1: Wikipedia'dan gelen bilgileri ("{wiki_context}") analiz et. Varlığın temel niteliğini (ödül mü, yazılım mı, sanat eseri mi ya da ürün mü? vb.) belirle.
56
- Adım 2: Bu nitelikleri {custom_labels} listesindeki 'tanim' alanlarıyla karşılaştır. Wikipedia'daki anahtar kelimeler ile etiket tanımlarındaki anahtar kelimeleri eşleştir.
57
- Adım 3: En yüksek anlamsal benzerliğe sahip etiketi RAG sonucu olarak seç. Eğer Wikipedia bilgisi yetersizse, orijinal cümledeki ("{full_sentence}") fiil ve niteleyicilere (örn: "ödülü","filmi","yazdı","işletim sistemi") odaklan.
58
- Adım 4: Kararını somut kanıtlara dayandır. Eğer hiçbir etiket tanımına uyum sağlanamazsa MISC değerini koru.
59
-
60
- FEW-SHOT ÖRNEKLERİ:
61
-
62
- ÖRNEK 1:
63
- - CÜMLE: "1984, distopik bir geleceği anlatan en önemli romandır."
64
- - VARLIK: 1984
65
- - WIKIPEDIA: "1984 (roman), George Orwell tarafından yazılmış distopik bir kitaptır. Ayrıca 1984 bir takvim yılıdır."
66
- - Analiz: Adım 1: Wikipedia'da "1984" varlığına bakarak, "1984" bir "romanı" olarak tanımlanmaktadır. - Adım 2: Cümlede "1984" ve "romanı" geçen, bu da "BOOK" tanımına uygun olabilir. - Adım 3: "BOOK" tanımına uygun olduğu için bu etiket seçildi. - Adım 4: Cümlede "romanı" ifadesi, bu tür etiketler arasında uyum sağlamadığı için "BOOK" etiketine uyan "BOOK" tanımına göre karar verildi.
67
- - CEVAP: BOOK
68
-
69
- ÖRNEK 2:
70
- - CÜMLE: "Sistem Windows üzerinde sorunsuz çalışıyor."
71
- - VARLIK: Windows
72
- - WIKIPEDIA: "Microsoft Windows, kişisel bilgisayarlar için geliştirilmiş bir işletim sistemidir."
73
- - ANALİZ: Adım 1: Wikipedia'da "Windows" bilgisi bulunuyor. Adım 2: Cümlede "Windows" ve "işletim sistemi" geçen, bu SYSTEM tanımına uygun. Adım 3: SYSTEM seçildi. Adım 4: Cümlede "işletim sistemi" ifadesi sistem türünü ifade eder.
74
- - CEVAP: SOFTWARE
75
-
76
- GÜNCEL GÖREV:
77
- - HEDEF VARLIK: {entity_text}
78
- - ORİJİNAL CÜMLE: "{full_sentence}"
79
- - DAHİLİ BİLGİ : "{custom_labels}"
80
- - HARİCİ BİLGİ (Wikipedia): "{wiki_context}"
81
-
82
- ÇIKTI KURALLARI:
83
- - Cevabında asla yıldız (*) veya markdown kullanma.
84
- - Analiz adımlarını yukarıdaki 4 adımlı protokole göre yaz.
85
- - Yanıtını hiçbir açıklama eklemeden doğrudan [ {{ ... }} ] formatında başlat ve bitir.
86
-
87
- ÇIKTI FORMATI:
88
- Analiz: [4 Adımlı CoT Analizi]
89
- Cevap: [SADECE_ETIKET_ADI]
90
- """
91
-
92
-
93
 
94
  messages = [{"role": "user", "content": prompt}]
95
  text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
@@ -100,7 +100,7 @@ Cevap: [SADECE_ETIKET_ADI]
100
  response_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]
101
  full_output = tokenizer.batch_decode(response_ids, skip_special_tokens=True)[0].strip()
102
 
103
- # Markdown temizliği ve Etiket Ayıklama
104
  clean_output = full_output.replace("*", "")
105
  final_label = "MISC"
106
  valid_keys = list(custom_labels.keys())
@@ -114,14 +114,12 @@ Cevap: [SADECE_ETIKET_ADI]
114
  except Exception as e:
115
  return "MISC", f"Hata: {str(e)}"
116
 
 
117
  # --- 3. ANA İŞLEM HATTI ---
118
  def process_ner(text):
119
- current_logs = ["🚀 <b>Sistem Başlatıldı:</b> Metin analiz ediliyor..."]
120
  final_results = []
121
  yield "<br>".join(current_logs), []
122
-
123
-
124
-
125
  initial_results = ner_pipe(text)
126
 
127
  for entity in initial_results:
@@ -152,10 +150,11 @@ def process_ner(text):
152
 
153
  current_logs.append("✨ <b>Analiz Tamamlandı.</b>")
154
  yield "<br>".join(current_logs), [[r["Varlık"], r["İlk Etiket"], f"<b>{r['Nihai Etiket']}</b>", r["Kaynak"]] for r in final_results]
 
155
 
156
  # --- 4. GRADIO ARAYÜZÜ ---
157
  with gr.Blocks(title=" RAG-NER") as demo:
158
- gr.Markdown("# MISC etiketi için RAG-NER Çerçevesi")
159
 
160
  with gr.Tab("Metin Analizi"):
161
  input_text = gr.Textbox(
@@ -195,10 +194,12 @@ with gr.Blocks(title=" RAG-NER") as demo:
195
  outputs=[log_output, table_output]
196
  )
197
 
 
 
198
  # --- 5. KULLANICI DENETİMİ (LOGIN) ---
199
  if __name__ == "__main__":
200
 
201
  demo.launch(
202
  auth=("admin", "1113"),
203
- auth_message="Lütfen uzman paneline erişmek için giriş yapın."
204
  )
 
18
  IS_LLM_ENABLED = True
19
  except Exception as e:
20
  IS_LLM_ENABLED = False
21
+ #-------------------------------------------------------
22
 
23
  # --- 2. YARDIMCI FONKSİYONLAR ---
24
  def get_wiki_summary(term):
 
30
  return wikipedia.summary(search_results[0], sentences=2, auto_suggest=False)
31
  except: return None
32
 
33
+ # ------------------------------------------------------
34
 
35
+ # --- 3. ETİKET GÜNCELLEME FONKSİYONU ---
36
  @spaces.GPU
37
  def refine_label_with_llm(entity_text, full_sentence, wiki_context, custom_labels):
38
  if not IS_LLM_ENABLED: return "MISC", "LLM Aktif Değil"
 
40
  device = "cuda" if torch.cuda.is_available() else "cpu"
41
  llm_model.to(device)
42
 
43
+ # 3.1 Etiket Tanımları | Custom_labels listesindeki içerik burada kullanılıyor.
44
  label_rules = ""
45
  for k, v in custom_labels.items():
46
  label_rules += f"### {k}\n- TANIM: {v['tanim']}\n- ANAHTARLAR: {', '.join(v['anahtar_kelimeler'])}\n\n"
47
 
48
+ # 3.2 Sistematik Chain of Thouht ve Kuralların Tanımlanması
49
 
50
  prompt = f"""
51
+ Sen yüksek hassasiyetli bir semantik analiz uzmanısın. Görevin, '[[{entity_text}]]' varlığını aşağıdaki 4 adımlı Sistematik CoT protokolüne göre sınıflandırmaktır.
52
+
53
+ ETİKET TANIMLARI:
54
+ {label_rules}
55
+
56
+ SİSTEMATİK CoT ADIMLARI:
57
+ Adım 1: Wikipedia'dan gelen bilgileri ("{wiki_context}") analiz et. Varlığın temel niteliğini (ödül mü, yazılım mı, sanat eseri mi ya da ürün mü? vb.) belirle.
58
+ Adım 2: Belirlediğin nitelikleri yukarıdaki ETİKET TANIMLARI listesindeki 'TANIM' ve 'ANAHTARLAR' alanlarıyla karşılaştır.
59
+ Adım 3: En yüksek anlamsal benzerliğe sahip etiketi RAG sonucu olarak seç. Eğer Wikipedia bilgisi yetersizse, orijinal cümledeki ("{full_sentence}") fiil ve niteleyicilere (örn: "ödülü","filmi","yazdı","işletim sistemi") odaklan.
60
+ Adım 4: Kararını somut kanıtlara dayandır. Eğer hiçbir etiket ETİKET TANIMLARI listesine uyum sağlanamazsa MISC değerini koru.
61
+
62
+ FEW-SHOT ÖRNEKLERİ:
63
+
64
+ ÖRNEK 1:
65
+ - CÜMLE: "1984, distopik bir geleceği anlatan en önemli romandır."
66
+ - VARLIK: 1984
67
+ - WIKIPEDIA: "1984 (roman), George Orwell tarafından yazılmış distopik bir kitaptır. Ayrıca 1984 bir takvim yılıdır."
68
+ - Analiz: Adım 1: Wikipedia'da "1984" varlığına bakarak, "1984" bir "romanı" olarak tanımlanmaktadır. - Adım 2: Cümlede "1984" ve "romanı" geçen, bu da "BOOK" tanımına uygun olabilir. - Adım 3: "BOOK" tanımına uygun olduğu için bu etiket seçildi. - Adım 4: Cümlede "romanı" ifadesi, bu tür etiketler arasında uyum sağlamadığı için "BOOK" etiketine uyan "BOOK" tanımına göre karar verildi.
69
+ - CEVAP: BOOK
70
+
71
+ ÖRNEK 2:
72
+ - CÜMLE: "Sistem Windows üzerinde sorunsuz çalışıyor."
73
+ - VARLIK: Windows
74
+ - WIKIPEDIA: "Microsoft Windows, kişisel bilgisayarlar için geliştirilmiş bir işletim sistemidir."
75
+ - ANALİZ: Adım 1: Wikipedia'da "Windows" bilgisi bulunuyor. Adım 2: Cümlede "Windows" ve "işletim sistemi" geçen, bu SYSTEM tanımına uygun. Adım 3: SYSTEM seçildi. Adım 4: Cümlede "işletim sistemi" ifadesi sistem türünü ifade eder.
76
+ - CEVAP: SOFTWARE
77
+
78
+ GÜNCEL GÖREV:
79
+ - HEDEF VARLIK: {entity_text}
80
+ - ORİJİNAL CÜMLE: "{full_sentence}"
81
+ - DAHİLİ BİLGİ : "{custom_labels}"
82
+ - HARİCİ BİLGİ (Wikipedia): "{wiki_context}"
83
+
84
+ ÇIKTI KURALLARI:
85
+ - Cevabında asla yıldız (*) veya markdown kullanma.
86
+ - Analiz adımlarını yukarıdaki 4 adımlı protokole göre yaz.
87
+ - Yanıtını hiçbir açıklama eklemeden doğrudan [ {{ ... }} ] formatında başlat ve bitir.
88
+
89
+ ÇIKTI FORMATI:
90
+ Analiz: [4 Adımlı CoT Analizi]
91
+ Cevap: [SADECE_ETIKET_ADI]
92
+ """
 
 
93
 
94
  messages = [{"role": "user", "content": prompt}]
95
  text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
 
100
  response_ids = [output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)]
101
  full_output = tokenizer.batch_decode(response_ids, skip_special_tokens=True)[0].strip()
102
 
103
+ # 3.3 Markdown temizliği ve Etiket Ayıklama
104
  clean_output = full_output.replace("*", "")
105
  final_label = "MISC"
106
  valid_keys = list(custom_labels.keys())
 
114
  except Exception as e:
115
  return "MISC", f"Hata: {str(e)}"
116
 
117
+ #------------------------------------------------------------------
118
  # --- 3. ANA İŞLEM HATTI ---
119
  def process_ner(text):
120
+ current_logs = ["<b>Sistem Başlatıldı:</b> Metin analiz ediliyor..."]
121
  final_results = []
122
  yield "<br>".join(current_logs), []
 
 
 
123
  initial_results = ner_pipe(text)
124
 
125
  for entity in initial_results:
 
150
 
151
  current_logs.append("✨ <b>Analiz Tamamlandı.</b>")
152
  yield "<br>".join(current_logs), [[r["Varlık"], r["İlk Etiket"], f"<b>{r['Nihai Etiket']}</b>", r["Kaynak"]] for r in final_results]
153
+ #---------------------------------------------------
154
 
155
  # --- 4. GRADIO ARAYÜZÜ ---
156
  with gr.Blocks(title=" RAG-NER") as demo:
157
+ gr.Markdown("# MISC-RAG-NER")
158
 
159
  with gr.Tab("Metin Analizi"):
160
  input_text = gr.Textbox(
 
194
  outputs=[log_output, table_output]
195
  )
196
 
197
+ #----------------------------------------------------
198
+
199
  # --- 5. KULLANICI DENETİMİ (LOGIN) ---
200
  if __name__ == "__main__":
201
 
202
  demo.launch(
203
  auth=("admin", "1113"),
204
+ auth_message="Lütfen paneline erişmek için giriş yapın."
205
  )