Text-to-SQL / pilot /PILOT_RAPORU.md
SevdanurGenc's picture
Upload 466 files
a72d1cf verified
|
Raw History Blame Contribute Delete
13.1 kB
---
title: "Tablo2SQL-TR Pilot Çalışma Raporu"
subtitle: "Geliştirmede görülmemiş belge düzenleriyle stres testi · 12 Ekim 2026 (düzeltme sonrası sonuçlar eklendi)"
lang: tr
cover: no
---
## Özet
Hakem incelemesi, gerçek belgelerle küçük bir pilot istemişti. Gerçek belgeler bulunana kadar, gerçek Türk kurum belgelerinin düzenini taklit eden **üç kurgusal belge** ve **44 soru** hazırlandı. Belgeler, ana test kümesindeki altı belgeden bilerek farklı tasarlandı. Sistemin kodu pilottan önce donduruldu ve pilot tek seferde çalıştırıldı; sonuçlar görüldükten sonra yazılımda hiçbir ayar yapılmadı.
**Sonuç: sistem yeni düzenlere iyi genellenmedi.**
| Ölçüt | Ana test kümesi (TR-TabloSQL) | Pilot, dondurulmuş kod | Pilot, düzeltme sonrası |
|---|---|---|---|
| Genel doğruluk | %92,9 (92/99) | **%25,0 (11/44)** | %59,1 (26/44) |
| Cevaplanabilir sorularda doğruluk | %93,2 | **%15,8 (6/38)**; tesadüfen doğru bir olgu çıkarılınca %13,2 | %57,9 (22/38); tesadüfi olgu çıkarılınca %55,3 |
| Cevapsız sorularda doğru red | %90,9 | %83,3 (5/6); redlerin bir kısmı yanlış gerekçeyle | %66,7 (4/6) |
| Cevaplanabilir soruda yanlış red | %0,0 | **%39,5 (15/38)** | %5,3 (2/38) |
Düzeltme sonrası sütun, aşağıda (Bölüm 8) açıklanan genel hata düzeltmelerinden sonra elde edildi. Düzeltmeler bu pilotun bulgularına dayandığı için bu sütun görülmemiş veride ölçülmüş bir skor **değildir**.
Başarısızlıkların **32'sinin 19'unda** kök neden ya da katkıda bulunan neden tablo çıkarmadır. Kalanlar kural tabanlı üreticinin yeni ifadelerde yanlış sütun ya da işlem seçmesinden kaynaklanıyor. Pilot ayrıca yazılımda **altı somut hata** ortaya çıkardı. Bunlardan biri, iki belgedeki adsız tabloların aynı adı alması yüzünden bir tablonun sessizce silinmesine yol açan bir veri kaybı hatası.
**Önemli sınırlama.** Belgeler kurgusal ve aynı ekip tarafından hazırlandı. Bu nedenle pilot, hakemin istediği **bağımsız gerçek belge pilotunun yerini tutmaz**. Doğru tanımı "geliştirmede görülmemiş düzenlerle stres testi"dir. Gerçek belgeler geldiğinde aynı düzenek değiştirilmeden kullanılabilir (bkz. `pilot/README.md`).
---
## 1. Belgeler
| Belge | Biçim | Taklit edilen gerçek belge | Ana kümede olmayan zorluklar |
|---|---|---|---|
| Yeşilvadi Belediyesi 2025 Faaliyet Raporu | PDF, 3 sayfa, çizgili | 5018 sayılı Kanun kapsamındaki belediye faaliyet raporu | Ekonomik kod sütunu; "Ödenek" altında dört alt sütun; "-" ile gösterilen tanımsız oran; "(*)" dipnotlu satır adı; **iki sayfaya bölünmüş, başlığı her sayfada tekrar eden 63 satırlık tablo** |
| Kuzeyçınar Gıda A.Ş. 31.12.2025 Konsolide Finansal Tablolar | PDF, 2 sayfa, **dikey çizgisiz** | KAP'ta yayımlanan TFRS finansal tabloları | Dipnot sütunu; üç satırlı dönem başlığı ("Bağımsız Denetimden Geçmiş / Cari Dönem / 31.12.2025"); girintili kalemler; bölüm başlığı satırları; ara toplamlar; parantezli negatifler; 4 ondalıklı pay başına kazanç |
| Ardıçlı İli 2025 İstatistik Bülteni | HTML | İl müdürlüğü istatistik bülteni | Çeyrek (Ç1–Ç4) sütunları; "İl Toplamı" satırı; `<tfoot>` içinde kaynak notu; "Ocak 2025" biçimli ay satırları; negatif yüzde değişimler |
Her sayfada "KURGUSAL ÖRNEK BELGE" uyarısı bulunur; kurum, il ve ilçe adları uydurmadır.
**Sorular.** 44 soru hazırlandı: 38'i cevaplanabilir, 6'sı cevapsız. Zorluk dağılımı 6 kolay, 22 orta, 16 zor. Altın cevaplar soru metninden değil, belgeleri üreten ham verilerden programla hesaplandı. Ayrı bir denetimde 44 altın cevabın tamamı, belgeler `pdftotext` ile okunarak yeniden kontrol edildi; yanlış altın cevap bulunmadı.
---
## 2. Protokol
1. **Kod donduruldu.** Pilot öncesinde `t2s/` kodunun SHA-256 özetleri `pilot/kod_parmak_izi.txt` dosyasına kaydedildi ve çalıştırma öncesinde değişmediği doğrulandı.
2. **Arka uç kural tabanlı.** Ana deneylerle aynı ayarlar kullanıldı: K = 3 ve Türkçe normalizasyon. Hibrit geri düşme kapalı.
3. **Değerlendirme cevap düzeyinde,** altın SQL olmadan yapıldı. Kurallar `pilot/README.md` dosyasında. Ölçütte yapılan tek değişiklik şu: ilk çalıştırmadan sonra, metin cevaplarda tarihlerin ISO karşılığıyla eşleşmesi kabul edildi ("Ekim 2025" = "2025-10"). Bunun nedeni, sistemin ayları ISO biçiminde saklaması. Bu düzeltme sistemi değil yalnızca puanlamayı değiştirdi ve bir sorunun sonucunu etkiledi. O soru da aşağıda "tesadüfen doğru" olarak işaretlendi.
---
## 3. Sonuçlar
### 3.1 Belgeye ve zorluğa göre
| | Doğru / Toplam | Oran |
|---|---|---|
| Faaliyet raporu (PDF) | 6 / 22 | %27,3 |
| Finansal tablolar (PDF) | 2 / 14 | %14,3; iki doğru da cevapsız sorulardır, cevaplanabilir 12 sorunun hiçbiri doğru değil |
| İstatistik bülteni (HTML) | 3 / 8 | %37,5 |
| Kolay / orta / zor | 2/6 · 7/22 · 2/16 | %33,3 · %31,8 · %12,5 |
**Tesadüfen doğru.** P42'de ("satışların en çok düştüğü ay") SQL, önceki yılın satışına göre sıralama yapıyor. Bu yanlış sıralama, rastlantı sonucu doğru ayı döndürdü.
**Yanlış gerekçeyle doğru red.** P35'te sistem şirket sorusunu belediye personel tablosuna bağlayıp "2025 verisi yok" gerekçesiyle reddetti. P36'da ise red, gelir tablosunun veritabanında hiç bulunmamasından kaynaklandı.
### 3.2 Tablo çıkarma
**Değer geri çağırma** şunu ölçer: belgedeki ham sayıların kaçının çıkarılan tablolarda bir sayı olarak bulunduğu.
| Belge | Yazılan tablo | Değer geri çağırma |
|---|---|---|
| Faaliyet raporu | 4 (çok sayfalı tablo ikiye bölündü) | %100 |
| Finansal tablolar | 1 (gelir tablosu kayboldu) | %64,7 (44/68) |
| İstatistik bülteni | 2 | %100 |
Sayıların değerleri doğru ayrıştırıldı. Sorun, tabloların **yapısında ve meta verisinde**: tablo adları, sütun adları, yıllar ve tabloların bölünmesi.
### 3.3 Başarısızlık nedenleri (32 cevaplanabilir yanlış)
| Kod | Neden | Olgu | Örnek |
|---|---|---|---|
| A | Kapsam denetimi yanlış reddi ("2025 verisi yok") | 11 (9'unda kök neden çıkarma) | Mahalle tablosunda "Nüfus (2025)" başlığındaki yıl silindiği için 2025 soruları reddedildi |
| B | Doğru tabloda yanlış sütun | 6 | "Toplam ödenek" yerine "bütçe ödeneği"; "üçüncü çeyrek" yerine Ç1 |
| D | Yanlış işlem ya da niyet | 8 | Değer yerine COUNT(*); NULL değerin sıralamada başa gelmesi; eksik filtre |
| E | Birim dönüşümü | 1 | TL'den milyon TL'ye çevrilmedi |
| F | Çıkarma hatası yüzünden cevap imkânsız | 6 | Gelir tablosu veritabanında yok; bölünmüş tabloda sayım eksik |
**Çıkarma kök ya da katkı nedeni: 19/32.**
---
## 4. Pilotun ortaya çıkardığı yazılım hataları
| # | Hata | Etki | Önem |
|---|---|---|---|
| 1 | **Adsız tablolar aynı adı alıyor** (`sutun`) ve sonraki belge öncekinin üzerine yazıyor | Finansal belgedeki gelir tablosu sessizce silindi; ona ait 6 sorunun (P29–P34) cevabı imkânsız hâle geldi | **Yüksek (veri kaybı)** |
| 2 | **Parantez içindeki yıl, birim sanılıp siliniyor:** "Nüfus (2025)" → `nufus_2` | Yıl bilgisi kayboluyor, kapsam denetimi soruları reddediyor | Yüksek |
| 3 | **Çok sayfalı tablo birleştirilmiyor;** ikinci parça başlıksız ayrı bir tablo oluyor | Sayım ve sıralama soruları eksik veriyle yanıtlanıyor | Orta (bilinen sınırlılık) |
| 4 | **Dikey çizgisiz finansal tablolarda:** başlık yerine üstteki paragraf alınıyor; "Dipnot Referansları" iki sütuna bölünüyor; tarih satırı veri satırı oluyor; bölüm başlıkları NULL satırlar olarak saklanıyor | Sütunlarda dönem ve yıl bilgisi yok; yanlış sütun seçiliyor | Yüksek |
| 5 | **HTML `<tfoot>` içindeki kaynak notu** veri satırı olarak saklanıyor | Listelerde fazladan satır çıkıyor | Düşük |
| 6 | **Toplam satırı kalıbı** "İl Toplamı", "BRÜT KAR" ve "DÖNEM KARI" gibi satırları tanımıyor | Toplamada çift sayım (P38'de iki kat sonuç) | Orta |
Ayrıca **kapsam denetimi**, yılı yalnızca tablo başlığında, sütun adlarında ve hücre değerlerinde arıyor. Belge metnindeki "2025 mali yılı" ifadesini görmediği için yıl içermeyen bütçe tablosuna yönelik 2025 sorularını reddediyor.
---
## 5. Yorum
1. **Ana kümedeki %92,9 genellenmiyor.** Kural tabanlı üretici, geliştirme sırasında görülen ifade ve düzenlere bağımlı. Bu, hakemin "aşırı uyum" endişesini doğruluyor; makaledeki "geliştirme skoru iyimserdir" sınırlılığının boyutunu da gösteriyor.
2. **Çıkarma, başarısızlıkların çoğunun kaynağı.** Sayılar doğru ayrıştırılıyor; Türkçe normalizasyon pilotta da sorunsuz çalıştı. Sorun tablo yapısında ve meta veride. Yukarıdaki 1, 2 ve 4 numaralı hataların giderilmesi, LLM'den bağımsız olarak büyük kazanç sağlayacaktır.
3. **LLM deneyi daha da önemli hâle geldi.** B, D ve E türündeki 15 hata, sabit kalıplarla çalışan bir üreticinin sınırlarını gösteriyor. Bunlar bir LLM'nin çözmesi beklenen türden hatalar.
4. **Cevapsızlık davranışı da sınırlı.** Doğru redlerin bir kısmı yanlış gerekçeye dayanıyor ve cevaplanabilir soruların %39,5'i reddedildi. Ana kümede yanlış red %0'dı.
---
## 6. Makale için öneri (uygulandı: makale v5, Bölüm 6.6)
Bu pilot dürüstçe raporlanırsa makaleyi güçlendirir. Önerilen biçim: Bölüm 7'ye ya da ek materyale kısa bir **"Görülmemiş düzenlerle stres testi"** paragrafı eklemek. Paragraf ana bulguyu (%93,2 → %15,8), başarısızlıkların çıkarmadan kaynaklandığını ve bunun gerçek belge pilotunun yerini tutmadığını açıkça belirtmeli. Yazılım hataları düzeltilip pilot yeniden çalıştırılırsa, iki sonuç "dondurulmuş kod" ve "düzeltme sonrası" olarak ayrı ayrı raporlanmalıdır.
---
## 8. Düzeltme sonrası
Pilotun bulduğu hatalar, **pilot sorularına özgü hiçbir kural eklenmeden** genel biçimde düzeltildi:
| Hata | Düzeltme |
|---|---|
| Adsız tabloların aynı adı alıp birbirinin üzerine yazılması | Başlığı okunamayan tablo belge ve sayfa adıyla adlandırılıyor; başka bir belgenin ya da aynı sayfadaki başka bir tablonun üzerine yazılmıyor, aynı tablo yeniden aktarılırsa kendi yerine yazılıyor |
| Parantezli yılın silinmesi | "Nüfus (2025)" → `nufus_2025` |
| Bölünmüş tablolar | Ardışık sayfalarda aynı başlıkla süren ve kendine ait farklı başlığı olmayan parçalar birleştiriliyor (üç ve daha fazla sayfa dahil) |
| Çizgisiz finansal tablolar | "… Tablosu"/"Bilanço" satırı başlık olarak seçiliyor; başlık araması 6 satıra çıktı; yalnızca tarihlerden oluşan etiketsiz satır dönem başlığı sayılıyor, ondan sonraki "VARLIKLAR" gibi satırlar gövdede kalıyor; satır sonunda bölünmüş başlık sözcükleri soldaki sütunla birleşiyor; dipnot/kod sütunları ölçü sayılmıyor |
| `<tfoot>` ve tablo altı notları | Veri satırı olarak alınmıyor |
| "İl Toplamı" | "… Toplamı" kalıbı toplam satırı olarak işaretleniyor |
| Yıl içermeyen tablolar | Tablonun üstündeki metinde geçen yıllar ("2025 mali yılı") dönem olarak kaydediliyor; hiç yıl bilgisi olmayan tabloda yıl gerekçesiyle red verilmiyor |
| Tanımsız ("-") değerler | En yüksek/en düşük sıralamasına alınmıyor |
**Sonuç:** değer geri çağırma üç belgede de %100'e, doğruluk %59,1'e çıktı. Ana test kümesindeki bütün sonuçlar değişmedi; yalnızca Camelot-stream çıkarıcısının iki tablodaki hücre doğruluğu iyileşti (ortalama %60,7 → %96,7). Bu hatalar için 8 regresyon testi eklendi; toplam 50 testin hepsi geçiyor.
**Gerileme:** P10 ("2024 yılı personel gideri") daha önce doğru reddediliyordu. Mahalle tablosunda 2024 yılı artık görünür olduğu için bu soru o tablodan yanıtlanıyor.
**Kalan hatalar:** cevaplanabilir sorularda kalan 16 hatanın çoğu kural tabanlı üreticinin yeni ifadelerde yanlış sütun ya da işlem seçmesi: "üçüncü çeyrek" sorusunda Ç1 seçiliyor, "kadro sayısı" sorusunda değer yerine COUNT kullanılıyor, "milyon TL" dönüşümü yapılmıyor. Bunlar bilerek düzeltilmedi; düzeltilirlerse üretici pilot sorularına göre ayarlanmış olurdu. Bu tür hatalar LLM üreticiyle ölçülmelidir.
Dondurulmuş koddaki sonuçlar `sonuclar/`, düzeltme sonrası sonuçlar `sonuclar_duzeltme/` klasöründe. Her iki kodun parmak izi `kod_parmak_izi.txt` ve `kod_parmak_izi_duzeltme.txt` dosyalarında.
## 9. Yeniden üretim
```bash
python pilot/belge_uret.py
python pilot/pilot_calistir.py # düzeltilmiş kodla
python pilot/pilot_calistir.py --cikti pilot/sonuclar_duzeltme # düzeltme sonrası çıktı klasörü
```
Sonuçlar `pilot/sonuclar/pilot_sonuclari.json` dosyasında. Her soru için SQL, dönen satırlar ve sistemin cevap metni kayıtlıdır.