İçeriğe geç
academia.sh

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.

Aramak için yazmaya başlayın.

↑↓ Esc gezin · aç · kapat