Ders 22 / 22
Yanlılık Azaltıcı İstemler
İstemle dengelemenin alt grup açıklığını ne kadar kapattığının ve neyi kapatmadığının ölçülmesi: 200 kurgu talepte merkez isabeti 0,9016, kırsal isabeti 0,5513 ve açıklık 0,3504. İsteme yazılan yanlılık azaltıcı bildirim açıklığı 0,3586'ya taşıyor ve 3800 belirteç ekliyor; dengeli örnek açıklığı 0,2888'e indiriyor ve 14400 belirteç ekliyor. Örneklenen yerel yazımın isabeti 0,4848'den 0,8788'e çıkıyor, örneklenmeyen yerel yazım 0,3023'te sabit kalıyor. İstem açıklığın yalnız 0,1758 payını kapatıyor. Kurs kapanışı yirmi iki dersin önceki istem, değiştirilmiş istem ve bedel satırlarını tek tabloda topluyor.
İçindekiler
Önceki ders hataları iki kaynağa ayırdı. Sorulmayan şey hataların kimin üzerinde toplandığıydı: genel isabet kabul edilebilir olabilir ve kalan yanlışların tamamı belirli bir abone kümesinde birikebilir; o küme için sistem çalışmıyordur ve ortalama bunu gizler.
Alt grup, açıklık ve adalet ölçütleri M27’nin makine öğrenmesi etiği kursunda kuruldu ve tekrarlanmaz. Bu dersin sorusu dardır: istem yazarak bir alt grup açıklığı ne kadar kapatılabilir, ve hangi kısmı kalır.
- CD41. Kod bir benzeticidir; gerçek bir uç nokta çağrılmaz. Abone grupları, talep yazımları ve işaret tablosu kurgudur, tohum 20260218.
- CD42. İki kurgu abone grubu vardır, merkez ve kırsal; grup adı karara hiç girmez, yalnız ölçüm için kullanılır. Her konunun bir standart ve iki yerel yazımı vardır ve merkez çoğunlukla standart, kırsal çoğunlukla yerel yazar.
- CD43. Yanlılığın kaynağı veridedir: işaret tablosu yalnız standart yazımdan kurulmuştur ve işaret bulunamayan talepte karar en sık görülen sınıfa düşer.
- CD44. Birinci dengeleyici isteme yazılan bir bildirimdir (yazım biçimi kararı etkilemez) ve benzeticide düşmeyi eşit bir çekilişe çevirir. İkinci dengeleyici dengeli örnektir: her konunun yerel A yazımı etiketiyle isteme konur ve benzetici örneklerden geçici bir işaret tablosu çıkarır. Yerel B örneklenmez.
- CD45. Ölçüt grup başına konu isabeti ve açıklıktır (merkez eksi kırsal, küçük iyi). Bedel giriş belirteci olarak yazılır; ikinci koşum tohum 20260219’dur.
Açıklığın Kaynağı
Açıklık modelin gruplar hakkında bir şey bilmesinden gelmiyor; grup adı isteme hiç yazılmıyor. Kaynağı işaret tablosunun hangi metinlerden kurulduğudur.
# BENZETICI -- KURGUDUR. Gercek bir model uc noktasi cagrilmaz. Abone gruplari, # talep yazimlari ve isaret tablosu KURGU'dur. TOHUM, M32 = 20260218, 0xFFFFFFFF def uretec(t): x = ((t ^ (t >> 16)) * 2246822507) & M32 x = ((x ^ (x >> 13)) * 3266489909) & M32 s = [(x ^ (x >> 16)) & M32] def sonraki(): s[0] = (s[0] * 1664525 + 1013904223) & M32 return s[0] / 4294967296 return sonraki def ayrik(u, w): t = 0.0 for i, x in enumerate(w): t += x if u < t: return i return len(w) - 1 def belirtecle(m): # KURGU belirtecleyici, parca en cok bes damga b = [] for s in m.lower().replace(",", " , ").split(): while len(s) > 5: b.append(s[:5]) s = s[5:] b.append(s) return b def izno(m): h = 2166136261 for c in m: h = ((h ^ ord(c)) * 16777619) & M32 return h # her konunun bir standart, iki yerel yazimi var; yerel yazimlar KURGU'dur YAZIM = { "fatura": ["bu ayki fatura tutari gecen aya gore cok yuksek geldi", "bu ayki hesap pusulasi baya kabarik cikmis", "gecen ayki odemeye gore rakam iki misli olmus"], "ariza": ["evde su akmiyor bir ariza var galiba", "muslugu actim damla bile gelmiyor", "avludaki boru patlamis her yer golet"], "sayac": ["sayac okumasi yanlis girilmis endeks tutmuyor", "saatin rakamlari bizimkiyle uyusmuyor", "kutunun icindeki numara yerinde saymis"], "tarife": ["hangi tarife basamagindayim ogrenmek istiyorum", "bizden hangi ucretlendirmeyle para aliniyor", "kademeli hesaplama nasil yapiliyor anlamadim"], "kesinti": ["mahallede kesinti var ne zaman gelecek", "iki gundur su yok kimse haber vermedi", "koyun ustunde bir gundur akmiyor diyorlar"], } KONU = list(YAZIM) # merkez aboneler cogunlukla standart, kirsal aboneler cogunlukla yerel yaziyor YAZIM_PAYI = {"merkez": [0.86, 0.08, 0.06], "kirsal": [0.24, 0.40, 0.36]} TALEP = [] for i in range(200): r = uretec(TOHUM + i) g = "merkez" if r() < 0.62 else "kirsal" k = KONU[ayrik(r(), [0.24, 0.22, 0.18, 0.20, 0.16])] j = ayrik(r(), YAZIM_PAYI[g]) TALEP.append({"no": 4001 + i, "konu": k, "grup": g, "yazim": j, "metin": YAZIM[k][j]}) # benzeticinin isaret tablosu YALNIZ standart yazimdan kuruldu: veri yanliligi budur IZ = {} for k in KONU: for t in belirtecle(YAZIM[k][0]): IZ.setdefault(t, k) ONCELIK = "fatura" # kanit yoksa en sik gorulen sinifa duser SAYAC = [0] def ornek_tablosu(bel): """Istemdeki 'ornek: <metin> -> <konu>' parcalarindan gecici isaret tablosu.""" tablo, agiz = {}, [] for i, t in enumerate(bel): if t == "->" and i + 1 < len(bel) and bel[i + 1] in KONU: for s in agiz: tablo.setdefault(s, bel[i + 1]) agiz = [] elif t == "ornek": agiz = [] else: agiz.append(t) return tablo def cagir(istem, talep, tohum=TOHUM): """Konu atamasi. Kanit yoksa model en sik sinifa duser; istemdeki yanlilik azaltici bildirim bu dusmeyi esit bir cekilise cevirir.""" SAYAC[0] += 1 bel = belirtecle(istem) tablo = dict(IZ) tablo.update(ornek_tablosu(bel)) # istemdeki ornekler tabloyu genisletir p = {k: 0.0 for k in KONU} for t in belirtecle(talep["metin"]): if tablo.get(t) in p: p[tablo[t]] += 1.0 if max(p.values()) == 0.0: # hicbir isaret yok if "esit" in bel: # yanlilik azaltici bildirim return KONU[ayrik(uretec((tohum + 5) ^ izno(istem))(), [0.2] * 5)] return ONCELIK return max(sorted(p), key=lambda a: p[a]) BILDIRIM = ("Talebin yazim bicimi karari etkilemez ; her yazim esit olcutle " "degerlendirilir . ") ORNEK = " ".join(f"ornek: {YAZIM[k][1]} -> {k} ." for k in KONU) + " " print(f"KURGU talep {len(TALEP)}: merkez {sum(x['grup'] == 'merkez' for x in TALEP)}, " f"kirsal {sum(x['grup'] == 'kirsal' for x in TALEP)}") y = {g: sum(x["grup"] == g and x["yazim"] > 0 for x in TALEP) for g in ("merkez", "kirsal")} print(f"yerel yazimli talep: merkez {y['merkez']}, kirsal {y['kirsal']}") print(f"isaret tablosu {len(IZ)} girdi, tamami standart yazimdan") for j, ad in enumerate(("standart", "yerel A", "yerel B")): x = next(t for t in TALEP if t["konu"] == "sayac" and t["yazim"] == j) print(f" {ad:<9} {x['metin'][:42]:<43} -> {cagir('Talep: ' + x['metin'], x)}")
KURGU talep 200: merkez 122, kirsal 78 yerel yazimli talep: merkez 18, kirsal 58 isaret tablosu 49 girdi, tamami standart yazimdan standart sayac okumasi yanlis girilmis endeks tutmu -> sayac yerel A saatin rakamlari bizimkiyle uyusmuyor -> fatura yerel B kutunun icindeki numara yerinde saymis -> fatura
Aynı konunun üç yazımı üç ayrı sonuç veriyor. Standart yazım doğru okunuyor; iki yerel yazımın
ikisi de fatura çıkıyor, çünkü tabloda hiçbir işaret bulunamıyor ve karar en sık görülen sınıfa
düşüyor. Kırsal taleplerin 58’i yerel, merkez taleplerin yalnız 18’i; hata bu yüzden kırsal
abonelerin üzerinde birikiyor. Model onları ayırt etmiyor — yalnız kendi tablosunda karşılığı
olmayan metni tanıyamıyor, ve o metni kimin yazdığı veriden gelen bir olgudur.
İstemin Kapattığı ve Kapatmadığı
HAT = [("taban", ""), ("+ bildirim", BILDIRIM), ("+ dengeli ornek", ORNEK), ("+ ikisi", BILDIRIM + ORNEK)] def olc(onek, tohum=TOHUM): SAYAC[0] = 0 d = {"merkez": [0, 0], "kirsal": [0, 0]} y = [[0, 0], [0, 0], [0, 0]] g = 0 for x in TALEP: istem = onek + f"Talep {x['no']} : {x['metin']}" k = cagir(istem, x, tohum) d[x["grup"]][0] += k == x["konu"] d[x["grup"]][1] += 1 y[x["yazim"]][0] += k == x["konu"] y[x["yazim"]][1] += 1 g += len(belirtecle(istem)) m, ki = d["merkez"][0] / d["merkez"][1], d["kirsal"][0] / d["kirsal"][1] return m, ki, m - ki, [a / b for a, b in y], g print("hat merkez kirsal aciklik aciklik B yerelA yerelB giris") for ad, onek in HAT: m, ki, a, y, g = olc(onek) ab = olc(onek, TOHUM + 1)[2] print(f"{ad:<15} {m:>7.4f} {ki:>7.4f} {a:>8.4f} {ab:>10.4f} {y[1]:>7.4f} " f"{y[2]:>7.4f} {g:>6}") t, e = olc("")[2], olc(BILDIRIM + ORNEK)[2] print(f"\ntaban acikligi {t:.4f}, istemle kapanan {t - e:.4f} " f"({(t - e) / t:.4f} payi), kalan {e:.4f}")
hat merkez kirsal aciklik aciklik B yerelA yerelB giris taban 0.9016 0.5513 0.3504 0.3504 0.4848 0.3023 2624 + bildirim 0.9098 0.5513 0.3586 0.3457 0.4848 0.3256 6424 + dengeli ornek 0.9426 0.6538 0.2888 0.2888 0.8788 0.3023 17024 + ikisi 0.9426 0.6538 0.2888 0.2760 0.8788 0.3023 20824 taban acikligi 0.3504, istemle kapanan 0.0616 (0.1758 payi), kalan 0.2888
İkinci satır sezgiye en uygun ve tabloda en boş duran satırdır. İsteme “her yazım eşit ölçütle değerlendirilir” yazmak kırsal isabeti 0,5513’te bırakıyor ve açıklığı 0,3586‘ya çıkarıyor; satırın iki koşum farkı 0,0129 olduğu için bu 0,0082’lik kötüleşme bile ölçülmemiş sayılır. Ölçülen tek şey bedeldir: giriş belirteci 2624’ten 6424’e. Bir niyet beyanının modele hiçbir işaret eklemediği yer burasıdır.
Üçüncü satır gerçek bir kazanç taşıyor: dengeli örnek açıklığı 0,2888‘e indiriyor, kazanç 0,0616 ve iki koşum farkı 0,0000. Bedeli 14400 belirteçtir, tabanın 6,5 katı. Örneklerin merkez isabetini de yükseltmesi (0,9016’dan 0,9426’ya) açıklığın kırsal kazancından daha az kapanmasının sebebidir.
Son iki sütun kalanı açıklıyor. Örneklenen yerel A yazımının isabeti 0,4848’den 0,8788’e çıkıyor; örneklenmeyen yerel B yazımı 0,3023’te kımıldamıyor. İstem veri yanlılığını çözmez. Taban açıklığının yalnız 0,1758 payı kapandı; kalanı kapatmanın yolu daha iyi bir cümle yazmak değil, işaret tablosunun yerel yazımlardan da kurulmasıdır.
Özet
- Alt grup açıklığı modelin grubu tanımasından değil, işaret tablosunun hangi metinlerden kurulduğundan gelir; tabanda merkez 0,9016, kırsal 0,5513, açıklık 0,3504’tür.
- Yanlılık azaltıcı bildirim açıklığı 0,3586’ya taşır ve 3800 belirteç ekler; iki koşum farkı 0,0129 olduğu için bu değişim ölçülmemiş sayılır.
- Dengeli örnek açıklığı 0,2888’e indirir ve 14400 belirteç ekler; kazanç 0,0616 ölçülmüştür ama örnekler merkez isabetini de yükselttiği için açıklık kırsal kazancından az kapanır.
- Örneklenen yerel yazımın isabeti 0,4848’den 0,8788’e çıkar, örneklenmeyen yazım 0,3023’te sabit kalır: istem açıklığın 0,1758 payını kapatır, kalan 0,2888 veri yanlılığıdır.
Kurs Kapanışı
Yirmi iki dersin hesabı tek tabloda ve her sayı kendi dersinden okundu. Satırlar ortak birim taşımaz; ikinci ve üçüncü sütun her satırın hangi ölçütle okunduğunu yazar. Fark tek işaret düzeniyle verilir: değiştirilmiş istemin sayısı eksi önceki istemin sayısı, üçüncü sütunda parantez içinde.
| Ders | Önceki istem | Değiştirilmiş istem | Bedel |
|---|---|---|---|
| Tasarım 01 istem nedir | bağlamsız istem 0,7083 | tam istem 0,7833 (+0,0750) | +1797 belirteç; iki koşum farkı 0,2000 → 0,0583 |
| Tasarım 02 sistem yönergesi | yönergesiz istem 0,4583 | orta yönerge 0,7500 (+0,2917) | +2871 belirteç; uzun yönerge +3487 belirteçle (−0,0083) |
| Tasarım 03 rol belirtme | taban istem 0,7500 | rol öneki 0,6833 (−0,0667) | +1080 ile +3240 belirteç; tohum bandı 0,1500, dört önek de ölçülemez |
| Tasarım 04 açık talep | belirsiz talep, 4,81 ayrı yanıt | kapalı küme 3,89 (−0,92) | istek başına +15 belirteç; etiketsiz pay 0,4333 → 0,2889 |
| Tasarım 05 biçim denetimi | serbest yanıt, ayrıştırılabilir 0,0000 | biçim bildirimi 0,9750 (+0,9750) | giriş 6140 → 8780, çıkış 1392 → 2026 |
| Tasarım 06 örnek kullanımı | sıfır örnek 0,8571 | üç örnek 0,9643 (+0,1071) | +4928 belirteç, istek başına +41 |
| Tasarım 07 yasak bildirimi | bildirimsiz istem, ihlal 0,2583 | olumlu bildirim 0,0167 (−0,2416) | +3360 belirteç, önlenen ihlal başına 115,9; yasak bildirimi ihlali 0,5333 yapar |
| Tasarım 08 istem yinelemesi | başlangıç istemi, sınama 0,3778 | beşinci yineleme 0,9333 (+0,5555) | 2640 çağrı; sekizincide 0,8111’e iner |
| Akıl 01 düşünce zinciri | doğrudan yanıt, hesapta 0,3000 | ara adım istemi 0,8833 (+0,5833) | belirteç 1,82 kat; birim bedel 243,2 → 150,1 |
| Akıl 02 öz tutarlılık | tek örnek 0,7667 | dokuz örnek 0,8833 (+0,1167) | çağrı 60 → 540, belirteç 7954 → 71211, doğru yanıt başına 172,9 → 1343,6 |
| Akıl 03 düşünce ağacı | tek istemde çözüm 0,4792 | dal 3 ağaç 0,6250 (+0,1458) | çağrı 48 → 795, belirteç 43182; dal 4 (−0,0208) |
| Akıl 04 geri adım istemi | tek aşamalı istem 0,5417 | iki aşamalı istem 0,7500 (+0,2083) | çağrı 48 → 96, belirteç 1,66 kat, doğru kod başına 198 → 237 |
| Akıl 05 akıl yürüt ve davran | eylem alanı istemi, geçerli alan 0,1000 | düşüncesi kısaltılmış istem 0,8000 (+0,7000) | giriş 5300 → 8060; geçerli alan başına 645,8 → 102,1 belirteç |
| Akıl 06 akıl yürüten model | tek geçişli sınıf, iki alanlı görev | akıl yürüten sınıf (+0,1000 ve +0,1667) | belirteç 1,75 kat, doğru yanıt başına 83,9 → 110,1 |
| Akıl 07 istem topluluğu | en iyi tek istem 0,7833 | üç istemin çoğunluk oyu 0,8000 (+0,0167) | çağrı 120 → 360, doğru etiket başına 61,1 → 180,7 belirteç |
| Akıl 08 otomatik eniyileme | tek aday, sınama 0,6750 | on adaydan seçilen 0,6500 (−0,0250) | çağrı 40 → 400; doğrulamada +0,1250, iyimserlik payı 0,2500 |
| Çıktı 01 örnekleme ayarları | taban ayar 0,6417 | üçü birlikte daraltılmış 0,8667 (+0,2250) | giriş 5300 sabit, çıkış 191 → 204, çağrı 120 → 120; koşum farkı 0,5667 → 0,0083 |
| Çıktı 02 ceza ve durdurma | yalın istem, yineleme 0,3431 | ceza ve durdurma dizisi 0,0578 (−0,2853) | çıkış 4073 → 2653, giriş sabit; kullanılabilirlik 0,8833 → 0,8333 |
| Çıktı 03 yapılandırılmış çıktı | biçim tarifi, uyum 0,8000 | şema dayatması 1,0000 (+0,2000) | giriş 5614 → 2974 (−2640 belirteç), çıkış 1754 → 1810 |
| Çıktı 04 çıktı doğrulama | şema ve iş kuralı, kabul 0,6000 | bir yeniden deneme 0,8167 (+0,2167) | +48 çağrı, +2947 belirteç, kurtarma başına 1,85 çağrı |
| Çıktı 05 istem ve bağlam ayrımı | yalın istem, ikisi doğru 0,4083 | kural ve kod tablosu 0,8667 (+0,4584) | giriş 1534 → 17734; yönerge 1680 belirteçle 10, bilgi 14520 ile 66 hata düzeltir |
| Çıktı 06 yanlılık azaltıcı istem | yalın istem, açıklık 0,3504 | bildirim ve dengeli örnek 0,2888 (−0,0616) | giriş 2624 → 20824; örneklenmeyen yazım 0,3023’te sabit |
Kursun kuralı budur: istem bir tasarım nesnesidir; ölçülmeden değiştirilen istem bir iyileştirme değil bir tahmindir. Hiçbir satırda model değişmedi: aynı benzetici, aynı tohum, aynı kurgu talep kümesi. Değişen tek şey metindi, ve dördüncü sütun o metnin her değişiminin bir bedeli olduğunu yirmi iki kez yazıyor.
Kursun ikinci iddiası da aynı tablodan adıyla okunur: akıl yürütme teknikleri pahalıdır ve her görevde kazandırmaz. Akıl 01’de düşünce zinciri sınıflandırmada belirteci 1,81 kat artırıp farkı bandın içinde bıraktı; Akıl 04’te geri adım istemi derece görevinde 2,69 kata çıkarıp isabeti oynatmadı; Akıl 06’da akıl yürüten sınıf tek alanlı görevde 1,75 kat artırıp farkı 0,1167 bandının içinde bıraktı; Akıl 07’de istem topluluğu çağrıyı üç katına çıkarıp +0,0167 kazandı; Akıl 08’de arama bütçesi on kata çıktı ve sınama 0,0250 düştü. Aynı okuma akıl yürütme dışında da geçerlidir: Tasarım 02’de uzun yönerge 3487 belirteç ekleyip 0,0083 götürdü, Tasarım 06’da dördüncüden sekizinci örneğe 8736 belirteç 0,0089 kazandırdı, Çıktı 03’te örnekli tarif 2040 belirteçle iki koşum farkına eşit bir fark üretti, Çıktı 04’te ikinci deneme 1366 belirteçle o farkın altında.
Üçüncü sayı tek başına verilir: yirmi iki dersin üçünde, tabloya yazılan fark aynı dersin iki koşum farkının altında kaldı — Tasarım 03 (rol belirtme), Akıl 07 (istem topluluğu) ve Akıl 08 (otomatik istem eniyileme). Üçünde de bedel sütunu doludur ve kazanç sütunu boştur.
Yirmi iki derste istem bir tasarım nesnesine dönüştü ve her değişikliğin bedeli yazıldı. Ama bir varsayım hiç sorgulanmadı: her çağrının tek başına, hemen ve hatasız gerçekleştiği. Çağrı sayısı bir maliyet kalemi olarak sayıldı; o çağrıların bir ağ üzerinden gittiği, sıraya girdiği, yarıda kesildiği, hız sınırına takıldığı ve para yerine belirteç harcadığı bir uygulamada bu istemlerin ne olacağı sorulmadı. Üç yüz altmış çağrılık bir istem topluluğu ve iki bin altı yüz kırk çağrılık bir istem araması, tek bir makinede sırayla koşan bir döngüde ölçüldü. Sonraki kurs, Model API’leri ile Uygulama Geliştirme, bu varsayımı açar.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.