rag-gate-stats-code / prereg.md
bunyamineymen's picture
Project 01 code (8e118d5)
668f59a verified
|
Raw History Blame Contribute Delete
6.37 kB
# Ön-kayıt — Proje 01: Regression gate istatistiği
Bu dosya ilk tam koşudan önce yazıldı (2026-10-17). Her koşu, dosyanın SHA-256 özetini `results/env.json` içine yazar. Koşudan sonra bu dosyada yapılan her değişiklik makalede "ön-kayıttan sapma" olarak raporlanır.
## 1. Sabitler
| Parametre | Değer |
|---|---|
| Ana seed | `20261017` |
| Veri | BEIR NFCorpus, FiQA-2018, SCIDOCS; `test` qrels |
| Popülasyon | Test qrels'te `score > 0` olan en az bir belgesi bulunan sorgular |
| Belge metni | `title + " " + text` |
| Dense modeller | `BAAI/bge-small-en-v1.5` (sorgu öneki: model kartındaki retrieval talimatı), `sentence-transformers/all-MiniLM-L6-v2`, `intfloat/e5-small-v2` (`query: ` / `passage: `); `max_seq_length = 256`; L2-normalize, iç çarpım |
| BM25 | `bm25s`, İngilizce stopword listesi, stemmer yok, varsayılan k1/b |
| Exact sistemler | `bm25`, `bge`, `minilm`, `e5`; FAISS `IndexFlatIP`; top-100 |
| HNSW sistemleri | `hnsw_ef{16,32,64,128}_s{0..9}`: bge-small vektörleri, FAISS `IndexHNSWFlat`, M=16, efConstruction=200, tek iş parçacığıyla inşa, ekleme sırası seed'e göre permütasyon; top-10 (FAISS `ef = max(efSearch, k)` kullandığı için k=10) |
| Türetilmiş sistemler | `del05`, `del10`: `bge` top-100'den korpusun seed'li %5 / %10'u çıkarılır, kalan ilk 10 kullanılır. `ctl01`, `ctl02`, `ctl03`, `ctl05`: `bge`'den seed'li sırayla seçilen ve Recall@5 > 0 olan sorgularda ilgili belgeler top-10 dışına itilir (o sorgunun metrikleri 0 olur); popülasyon ΔRecall@5 hedefe (−0.01 / −0.02 / −0.03 / −0.05) ulaşınca durulur |
| Metrikler | Recall@5 (birincil), nDCG@10 (ikincil), Recall@10 ve MRR@10 (rapor) |
| Golden set boyutu | n ∈ {25, 50, 100, 200, 300}, yalnız n ≤ N/2 |
| Alt örnek | R = 2000, iadesiz; aynı alt örnekler bütün senaryo ve gate'lerde kullanılır |
| Bootstrap | B = 2000, percentile yöntemi; tek yönlü α = 0.05 |
| Non-inferiority marjı | m ∈ {0.01, 0.02, 0.03} |
| Eşiğe uzaklık | d ∈ {−0.05, −0.04, …, +0.05}; τ = m_gerçek − d |
| Headroom (G1, senaryo çiftleri) | h ∈ {0.02, 0.05}; τ = m_gerçek(A) − h |
| Gerçek tanımları | (a) sonlu popülasyon: tüm N sorgu. (b) yarı bölme: seed'li permütasyonla iki yarı; alt örnek A yarısından, gerçek B yarısında ölçülür |
| Latency | Yalnız FiQA; 2 iş parçacığı (HF CPU Basic profili); sistemler `bm25`, `bge`, `minilm`, `e5`, `hnsw_ef16_s0`, `hnsw_ef128_s0`; her koşu öncesi 20 sorgu ısınma; 10 koşu; her koşuda sorgu sırası seed'li karıştırılır |
## 2. Gate tanımları
- **G1 mutlak eşik:** PASS ⇔ m̂_B ≥ τ.
- **G2 naif delta:** PASS ⇔ m̂_B − m̂_A ≥ −m.
- **G3 paired non-inferiority:** dᵢ = metrik_B,ᵢ − metrik_A,ᵢ; PASS ⇔ dᵢ ortalamasının tek yönlü %95 percentile bootstrap alt sınırı ≥ −m.
- **G3u unpaired:** A ve B bağımsız bootstrap ağırlıklarıyla yeniden örneklenir; ortalama farkının alt sınırı ≥ −m ise PASS.
- **G3′ sign-flip:** H0: ortalama(d) ≤ −m. d + m üzerinde 2000 işaret çevirmesi; p < 0.05 ise PASS.
- **GL latency:** PASS ⇔ P95'in tek yönlü %95 quantile bootstrap üst sınırı ≤ SLA.
Bir senaryo çifti için "kabul edilebilir" gerçeği: Δ_gerçek ≥ −m. Yanlış FAIL = kabul edilebilir iken FAIL; yanlış PASS (kaçırma) = kabul edilemez iken PASS.
## 3. Hipotezler ve karar kuralları
Birincil analiz: Recall@5, gerçek tanımı (a). Gerçek tanımı (b) ve nDCG@10 aynı kurallarla ikincil olarak raporlanır.
| # | Hipotez | Destek kuralı |
|---|---|---|
| H1 | Küçük golden sette, gerçek değer eşiğe yakınken G1 sık yanılır. | n = 100 ve \|d\| = 0.02 (iki işaret) için `bm25`, `bge`, `minilm`, `e5` havuzlanmış G1 hata oranının Wilson %95 alt sınırı ≥ 0.15; en az 2/3 veri setinde. |
| H2 | Baseline eşiğin rahatça üstündeyken G1 gerçek regresyonu kaçırır (headroom maskeleme). | Senaryo `bge → ctl03`, h = 0.05, n = 100: G1 PASS oranı ≥ 0.50 **ve** alt örnek başına (G1 PASS − G3 PASS, m = 0.02) farkının ortalamasının %95 normal CI alt sınırı > 0; en az 2/3 veri setinde. |
| H3 | Aynı α'da eşleştirme, kabul edilebilir değişikliklerde yanlış FAIL'i azaltır. | No-op ailesi (`hnsw_ef16_s0 → s1..s9` ve `hnsw_ef128_s0 → s1..s9`, havuzlanmış), m = 0.02, n ∈ {50, 100}: alt örnek başına (G3u FAIL − G3 FAIL) farkının ortalamasının %95 CI alt sınırı > 0; her iki n için, en az 2/3 veri setinde. |
| H4 | HNSW ekleme sırası exact aramada olmayan bir metrik oynaması yaratır ve bu oynama ef_search arttıkça azalır. | (i) ef = 16'da seed'ler arası ikili \|ΔRecall@10\| dağılımının 95. persentili > 0, bütün veri setlerinde; (ii) bu persentil ef ∈ {16, 32, 64, 128} boyunca artmaz (monoton azalan veya sabit), en az 2/3 veri setinde. |
| H5 | P95 tahmini P50'den belirgin şekilde daha belirsizdir. | 6 sistemin en az 4'ünde: (i) koşu içi göreli CI genişliği oranı (P95 / P50) medyanı ≥ 2; (ii) koşular arası CV(P95) > CV(P50). |
Raporlanan ama hipotez olmayan analizler: G2'nin yanlış PASS oranı; G3′ ile G3 uyumu; analitik MDE ile simülasyon gücü arasındaki sapma; GL ve nokta-tahminli latency gate'inin yanlış FAIL oranları; gerçek tanımı (b) sonuçları.
## 4. Spec v0.1'den sapmalar (koşudan önce)
1. **H3 yeniden tanımlandı.** G2 hata oranını kontrol etmediği için "aynı α'da G3 vs G2" karşılaştırması tanımsız. H3 artık eşleştirmenin etkisini (G3 vs G3u) ölçüyor; G2 betimsel raporlanıyor.
2. **HNSW için hnswlib yerine FAISS `IndexHNSWFlat`.** hnswlib'in Windows için hazır wheel'i yok; FAISS zaten bağımlılık. "Seed" = ekleme sırası permütasyonu; inşa tek iş parçacığıyla yapılır.
3. **Python 3.12** (uv ile kurulu; 3.11 yerine).
4. **Karar kayıtları özet olarak saklanır:** (k PASS, R) ve seed. Alt örnek indeksleri seed'den yeniden üretilebilir; satır satır karar tablosu yayımlanmaz.
5. **Latency yalnız FiQA'da** ölçülür (en büyük korpus; süre bütçesi).
6. **`max_seq_length = 256`** bütün dense modellerde (CPU süresi). Model kalitesi bu projenin iddiası değil.
7. **HNSW top-10** (FAISS ef = max(efSearch, k); top-100 istenirse ef_search etkisiz kalır).