apak commited on
Commit
eed7a19
·
verified ·
1 Parent(s): 8b4bb8f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -18
app.py CHANGED
@@ -76,38 +76,44 @@ def refine_label_with_llm(entity_text, wiki_context, custom_label_definitions):
76
  [f"- {k}: {v}" for k, v in custom_label_definitions.items()]
77
  )
78
 
79
- # LLM için örnekler (Few-shot learning)
80
- # CoT yapısına uygun hale getirildi.
81
  few_shot_examples = """ÖRNEK 1 (NORP İÇİN):
82
  VARLIK: Türk
83
  BAĞLAM: Türkler, Türkiye Cumhuriyeti'nde yaşayan ve Türkçe konuşan büyük bir etnik gruptur. (NORP tanımı ile eşleşir.)
84
- GÖZLEM: 'Türkler' etnik bir grubu ifade ediyor. Bağlamda 'Türkiye Cumhuriyeti' ve 'etnik grup' kelimeleri geçiyor.
85
  AKIL YÜRÜTME: Etnik veya dini grupları tanımlayan etiket 'NORP'dur. 'Türk' varlığı bu tanıma uymaktadır.
86
  CEVAP: NORP
87
 
88
- ÖRNEK 2 (TITLE İÇİN):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
89
  VARLIK: General
90
  BAĞLAM: Birçok orduda yüksek rütbeli bir subay unvanıdır. Türkiye'de en yüksek rütbelerden biridir. (TITLE tanımı ile eşleşir.)
91
  GÖZLEM: 'General' bir rütbe, unvan veya pozisyon belirtiyor. Bağlamda 'yüksek rütbeli bir subay unvanı' ifadesi geçiyor.
92
  AKIL YÜRÜTME: Kişinin unvanını, rütbesini veya pozisyonunu tanımlayan etiket 'TITLE'dır. 'General' bu tanıma uymaktadır.
93
  CEVAP: TITLE
94
-
95
- ÖRNEK 3 (EVENT İÇİN):
96
- VARLIK: İstanbul Film Festivali
97
- BAĞLAM: Her yıl Nisan ayında İstanbul'da düzenlenen uluslararası film festivalidir. Türkiye'nin en eski ve prestijli film etkinliklerinden biridir. (EVENT tanımı ile eşleşir.)
98
- GÖZLEM: 'İstanbul Film Festivali' bir etkinlik, bir organizasyonun adıdır. Bağlamda 'uluslararası film festivalidir' ifadesi geçiyor.
99
- AKIL YÜRÜTME: Savaşlar, festivaller, spor turnuvaları gibi etkinlikleri tanımlayan etiket 'EVENT'tir. 'İstanbul Film Festivali' bu tanıma uymaktadır.
100
- CEVAP: EVENT
101
  """
102
 
103
- # --- Chain of Thought (CoT) Prompt Yapısı ---
104
  prompt = f"""Sen uzman bir veri sınıflandırma sistemisin.
105
- Görevin, aşağıdaki varlığı ve bağlamı analiz ederek, ETİKET TANIMLARI'ndan (MISC etiketini göz ardı et) hangisinin varlığa en uygun olduğunu belirlemektir.
106
 
107
  AKIL YÜRÜTME ZİNCİRİNİ (Chain of Thought) takip ederek adım adım karar ver:
108
- 1. GÖZLEM: Varlık ve Wiki Bağlamı arasındaki anahtar eşleşmeleri (isim, tarih, unvan, tür vb.) listele.
109
- 2. AKIL YÜRÜTME: Bu gözlemlerin, ETİKET TANIMLARI'ndan hangisine en yakın olduğunu gerekçesiyle açıkla.
110
- 3. KARAR: Yalnızca uygun olan ETİKET'i (veya MISC'i) ÇIKTI FORMATI'na uygun olarak belirt.
111
 
112
  {few_shot_examples}
113
 
@@ -128,7 +134,7 @@ CEVAP: [SEÇİLEN ETİKET]
128
  # LLM çağrısı
129
  outputs = gen_pipe(
130
  messages,
131
- max_new_tokens=150, # CoT için token sayısını artırdık
132
  do_sample=False,
133
  temperature=0.1
134
  )
@@ -142,6 +148,7 @@ CEVAP: [SEÇİLEN ETİKET]
142
 
143
  try:
144
  # Cevap satırını bulur
 
145
  cevap_satiri = [line for line in full_output.split('\n') if 'CEVAP:' in line][-1]
146
  raw_label = cevap_satiri.split('CEVAP:')[-1].strip().upper()
147
 
@@ -154,7 +161,7 @@ CEVAP: [SEÇİLEN ETİKET]
154
  cog_output = akil_yurutme[-1].replace('AKIL YÜRÜTME:', '').strip()
155
 
156
  # Geçerli etiketleri kontrol et
157
- valid_labels = list(custom_label_definitions.keys()) + ["UNKNOWN", "MISC"]
158
  if raw_label in valid_labels:
159
  final_label = raw_label
160
  # CoT çıktısını etikete ekleyerek sonraki aşamada kullanmak için
 
76
  [f"- {k}: {v}" for k, v in custom_label_definitions.items()]
77
  )
78
 
79
+ # LLM için örnekler (Few-shot learning) - İyileştirilmiş ve daha çeşitli
 
80
  few_shot_examples = """ÖRNEK 1 (NORP İÇİN):
81
  VARLIK: Türk
82
  BAĞLAM: Türkler, Türkiye Cumhuriyeti'nde yaşayan ve Türkçe konuşan büyük bir etnik gruptur. (NORP tanımı ile eşleşir.)
83
+ GÖZLEM: 'Türk' varlığı bir etnik grubu veya milliyeti ifade ediyor. Bağlamda 'etnik grup' ve 'Türkiye Cumhuriyeti' geçiyor.
84
  AKIL YÜRÜTME: Etnik veya dini grupları tanımlayan etiket 'NORP'dur. 'Türk' varlığı bu tanıma uymaktadır.
85
  CEVAP: NORP
86
 
87
+ ÖRNEK 2 (LANGUAGE İÇİN):
88
+ VARLIK: Türkçe
89
+ BAĞLAM: Türkçenin ilk yazılı örnekleri Orhun Yazıtları'dır. Türk dilleri koluna ait bir dildir. Dünya çapında en çok konuşulan 20. dildir. (LANGUAGE tanımı ile eşleşir.)
90
+ GÖZLEM: 'Türkçe', bir iletişim aracı olan dili ifade ediyor. Bağlamda 'Türk dilleri koluna ait bir dildir' ifadesi geçiyor.
91
+ AKIL YÜRÜTME: İnsan dillerinin adlarını tanımlayan etiket 'LANGUAGE'dir. Varlık tanımıyla tam olarak eşleşmektedir.
92
+ CEVAP: LANGUAGE
93
+
94
+ ÖRNEK 3 (BOOK İÇİN):
95
+ VARLIK: Sinekli Bakkal
96
+ BAĞLAM: Halide Edib Adıvar'ın 1935'te yayınlanan ve popüler kültürde önemli yer tutan romanıdır. Eser, II. Dünya Savaşı öncesi İstanbul'u anlatır. (BOOK tanımı ile eşleşir.)
97
+ GÖZLEM: 'Sinekli Bakkal' yazar adı ve yayın tarihi ile birlikte bir 'roman' olarak anılıyor. Bağlamda 'romanıdır' ifadesi geçiyor.
98
+ AKIL YÜRÜTME: Yazılı veya basılı eserleri, romanları ve yayınları tanımlayan etiket 'BOOK'tur. Bu tanıma uymaktadır.
99
+ CEVAP: BOOK
100
+
101
+ ÖRNEK 4 (TITLE İÇİN):
102
  VARLIK: General
103
  BAĞLAM: Birçok orduda yüksek rütbeli bir subay unvanıdır. Türkiye'de en yüksek rütbelerden biridir. (TITLE tanımı ile eşleşir.)
104
  GÖZLEM: 'General' bir rütbe, unvan veya pozisyon belirtiyor. Bağlamda 'yüksek rütbeli bir subay unvanı' ifadesi geçiyor.
105
  AKIL YÜRÜTME: Kişinin unvanını, rütbesini veya pozisyonunu tanımlayan etiket 'TITLE'dır. 'General' bu tanıma uymaktadır.
106
  CEVAP: TITLE
 
 
 
 
 
 
 
107
  """
108
 
109
+ # --- Chain of Thought (CoT) Prompt Yapısı --- İyileştirilmiş ve daha kuralcı
110
  prompt = f"""Sen uzman bir veri sınıflandırma sistemisin.
111
+ Görevin, aşağıdaki varlığı ve bağlamı analiz ederek, **YALNIZCA** ETİKET TANIMLARI'ndan birini (veya uymuyorsa MISC'i) seçmektir.
112
 
113
  AKIL YÜRÜTME ZİNCİRİNİ (Chain of Thought) takip ederek adım adım karar ver:
114
+ 1. GÖZLEM: Varlık ve Wiki Bağlamı arasındaki anahtar eşleşmeleri (isim, tarih, unvan, tür, yayıncı vb.) listele.
115
+ 2. AKIL YÜRÜTME: Bu gözlemlerin, **ETİKET TANIMLARI**'ndan hangisine **EN YAKIN** olduğunu gerekçesiyle açıkla.
116
+ 3. KARAR: Yalnızca uygun olan ETİKET'i (veya MISC'i) ÇIKTI FORMATI'na uygun olarak belirt. **MISC'i sadece hiçbir tanıma uymuyorsa kullan.**
117
 
118
  {few_shot_examples}
119
 
 
134
  # LLM çağrısı
135
  outputs = gen_pipe(
136
  messages,
137
+ max_new_tokens=150, # CoT için token sayısını koruduk
138
  do_sample=False,
139
  temperature=0.1
140
  )
 
148
 
149
  try:
150
  # Cevap satırını bulur
151
+ # Regex ile daha sağlam arama yapılabilir, ancak şimdilik listenin sonuncusunu alıyoruz.
152
  cevap_satiri = [line for line in full_output.split('\n') if 'CEVAP:' in line][-1]
153
  raw_label = cevap_satiri.split('CEVAP:')[-1].strip().upper()
154
 
 
161
  cog_output = akil_yurutme[-1].replace('AKIL YÜRÜTME:', '').strip()
162
 
163
  # Geçerli etiketleri kontrol et
164
+ valid_labels = list(custom_label_definitions.keys()) # UNKNOWN'ı çıkarttık, zaten tanımlı değil.
165
  if raw_label in valid_labels:
166
  final_label = raw_label
167
  # CoT çıktısını etikete ekleyerek sonraki aşamada kullanmak için