İçeriğe geç
academia.sh

Ders 02 / 22

Sistem Yönergesi

Kalıcı davranış tanımının her istekte yeniden gönderildiği ve bedelinin istek sayısıyla çarpıldığı ölçülüyor: 62 belirteçlik bir yönerge tek istemin 0,8378 payını, 120 istekte 7440 belirteci tutuyor. Dört uzunluk yan yana konuyor. Yönergesiz istem 0,4583 etiket isabeti ve 2985 belirteç, kısa yönerge 0,7167 ve 4751, orta yönerge 0,7500 ve 5856, uzun yönerge 0,7417 ve 9343 veriyor. Uzun yönergeyi ortaya indirmek 3487 belirteç kazandırıyor ve isabetten hiçbir şey götürmüyor; ortayı kısaya indirmek 1105 belirteç kazandırıyor ama etiketsiz yanıt payını 0,0250'den 0,2167'ye çıkarıyor.

İçindekiler

Önceki ders istemi üç bileşene ayırdı ve yönerge ile bağlamın toplam girişin 0,7059 payını tuttuğunu ölçtü. O ölçüm tek bir isteğin içinde yapıldı. Kod aynı iki metni yüz yirmi kez gönderdiğinde bedel tek satırda saklı kaldı, çünkü tekrar döngünün içindeydi ve hiçbir yerde sayılmadı.

Bu ders o tekrarı sayar. Bir sistem yönergesi, modelin her istekte aynı biçimde davranması için yazılan kalıcı davranış tanımıdır: görev nedir, hangi seçenekler vardır, yanıt hangi biçimde verilir, belirsizlikte ne yapılır. Adı kalıcıdır ama saklandığı yer istemin kendisidir; model iki çağrı arasında hiçbir şey hatırlamaz. Yönerge bu yüzden bir kez yazılır ve her istekte ödenir. Ölçülecek olan da budur: tekrarın toplamı, tekrarın payı, ve yönergeyi kısaltmanın isabetten ne kadarını geri aldığı.

  • IT9. Kod bir benzeticiyi çağırır; gerçek bir model uç noktası çağrılmaz. Destek talepleri kurgudur ve önceki dersteki 120 kayıtla aynıdır.
  • IT10. Sistem yönergesi ile girdi aynı istemin içindedir. Benzeticide ayrı bir yönerge alanı yoktur, çünkü ölçülen şey belirteç bedelidir ve alanın adı bedeli değiştirmez.
  • IT11. Dört yönerge uzunluğu artımlı kurulur: yok, kısa (yalnız etiket kümesi), orta (etiket kümesi ve görev ile yanıt biçimi), uzun (buna belirsizlik kuralları eklenmiş hâli).
  • IT12. Yönergenin bedeli uzunluk çarpı istek sayısıdır. Tabloda tekrar sütunu bu çarpımdır ve toplam giriş belirtecinin içindedir.
  • IT13. Ölçüt etiket isabetidir; etiketsiz yanıt payı ayrıca basılır. Doğru etiket başına belirteç, toplam belirtecin isabete ve kayıt sayısına bölünmesiyle bulunur.
  • IT14. Her satır iki tohumla koşulur (20260218 ve 20260219). İki koşum farkından küçük kalan bir isabet farkı bu kursta ölçülmüş sayılmaz.
  • IT15. Hız sınırı her otuz yedinci çağrıda tetiklenir ve boş yanıt döndürür. Yüz yirmi çağrıda üç kayıt bu yüzden etiketsiz kalır; bu pay istemin değil yüzeyin payıdır.
  • IT16. Belirteç maliyeti ve bütçe önceki kursun kapanış dersinde ölçüldü; burada yalnızca belirteç birimi kullanılır.

Yönerge Modelde Durmaz

İlk blok benzeticiyi ve kurguyu kurar, dört yönerge uzunluğunu artımlı olarak tanımlar ve her birinin yüz yirmi istekteki toplam bedelini yazar. Sonunda tek bir kurgu talep, kısa ve orta yönergeyle, iki ayrı tohumda çağrılır.

# BENZETICI. Bu kod gercek bir model uc noktasi cagirmaz; standart kitaplikla yazilmis
# bir dil modeli benzeticisidir. Destek talepleri de KURGU'dur.
import math

TOHUM, M32 = 20260218, 0xFFFFFFFF
PENCERE, EN_UZUN = 240, 24          # baglam penceresi ve en buyuk cikti, belirtec


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):                        # istemin icerigine bagli, kosumdan bagimsiz iz
    h = 2166136261
    for c in m:
        h = ((h ^ ord(c)) * 16777619) & M32
    return h


KONU = ["fatura", "ariza", "sayac", "tarife", "kesinti"]
KALIP = {
    "fatura": ["bu ayki fatura tutari gecen aya gore cok yuksek geldi",
               "faturami odedim ama sistemde borc gorunuyor",
               "fatura ayrintisini nereden gorebilirim"],
    "ariza": ["evde su akmiyor bir ariza var galiba",
              "baglanti bozuk oldu ve hic calismiyor",
              "ariza kaydi actim ama ekip gelmedi"],
    "sayac": ["sayac okumasi yanlis girilmis endeks tutmuyor",
              "sayac degisimi icin randevu istiyorum",
              "sayac uzerindeki endeks ile fatura ayni degil"],
    "tarife": ["hangi tarife basamagindayim ogrenmek istiyorum",
               "tarife degisikligi icin ne yapmam gerekiyor",
               "birim ucret abone tipine gore degisiyor mu"],
    "kesinti": ["mahallede kesinti var ne zaman gelecek",
                "planli kesinti duyurusu nereden takip edilir",
                "aksamdan beri kesinti yasiyoruz"],
}
EK = ["ayrica gecen ay da ayni sorun olmustu", "bu konuda memnun degilim",
      "acil bilgi almam gerekiyor", "kayit numaram elimde yok"]

TALEP = []
for i in range(120):
    r = uretec(TOHUM + i)
    k = KONU[ayrik(r(), [0.24, 0.22, 0.18, 0.20, 0.16])]
    m = KALIP[k][int(r() * 3)]
    if r() < 0.34:
        m += " " + EK[int(r() * 4)]
    TALEP.append({"no": 4001 + i, "metin": m, "konu": k})

KAVRAM = KONU + ["odeme", "sikayet", "bilgi", "genel"]
IZ = {"fatur": "fatura", "tutar": "fatura", "ayrin": "fatura",
      "ariza": "ariza", "bozuk": "ariza", "calis": "ariza", "akmiy": "ariza",
      "sayac": "sayac", "endek": "sayac", "okuma": "sayac",
      "tarif": "tarife", "birim": "tarife", "abone": "tarife", "basam": "tarife",
      "kesin": "kesinti", "duyur": "kesinti", "mahal": "kesinti",
      "borc": "odeme", "odedi": "odeme", "ucret": "odeme",
      "memnu": "sikayet", "sorun": "sikayet", "acil": "sikayet",
      "bilgi": "bilgi", "ogren": "bilgi", "nered": "bilgi"}
TUZAK = {"degis": "tarife", "kayit": "ariza", "yukse": "tarife", "gorun": "fatura",
         "ekip": "kesinti", "takip": "tarife", "giril": "fatura"}   # yaniltici baglar
SERBEST = ["talebiniz {k} konusuyla ilgili gorunuyor",
           "bu kayit {k} basligina girer , ilgili ekibe yonlendirildi",
           "kaydiniz alindi , konuyu inceleyip donus yapacagiz"]
SAYAC = [0]


def cagir(istem, tohum=TOHUM, sicaklik=0.6, en_uzun=EN_UZUN):
    SAYAC[0] += 1
    bel = belirtecle(istem)
    if len(bel) > PENCERE:
        return {"durum": "baglam_asimi", "giris": len(bel), "cikis": 0, "yanit": ""}
    if SAYAC[0] % 37 == 0:
        return {"durum": "hiz_siniri", "giris": len(bel), "cikis": 0, "yanit": ""}
    r = uretec(tohum ^ izno(istem))
    if len(bel) > 90 and r() < 0.04:
        return {"durum": "zaman_asimi", "giris": len(bel), "cikis": 0, "yanit": ""}
    aday = [k for k in KAVRAM if k[:5] in bel]      # istemde adi gecen kavramlar
    if len(aday) < 3:
        aday = KAVRAM
    p = {k: 0.15 for k in aday}
    for t in bel:
        for tablo, w in ((IZ, 1.0), (TUZAK, 1.3)):
            if tablo.get(t) in p:
                p[tablo[t]] += w
    if sicaklik <= 0.0:
        k = max(sorted(p), key=lambda a: p[a])       # en olasi secim
    else:
        e = [math.exp(p[a] / sicaklik) for a in sorted(p)]
        k = sorted(p)[ayrik(r(), [v / sum(e) for v in e])]
    y = k if "tek" in bel else SERBEST[ayrik(r(), [0.42, 0.26, 0.32])].format(k=k)
    cb = belirtecle(y)
    if len(cb) > en_uzun:                            # durdurma kosulu
        cb = cb[:en_uzun]
        y = " ".join(cb)
    return {"durum": "tamam", "giris": len(bel), "cikis": len(cb), "yanit": y}


def oku(y):                                          # yanittan etiket cikarma
    for s in y.lower().split():
        if s in KONU:
            return s
    return None


E1 = "Etiketler: fatura , ariza , sayac , tarife , kesinti ."
E2 = " Talebi bu etiketlerden birine ata . Yanit olarak tek etiket yaz ."
E3 = (" Birden cok etiket uyuyorsa talebin ana konusunu sec ."
      " Hicbiri uymuyorsa en yakin etiketi sec . Aciklama ekleme .")
YONERGE = (("yok", ""), ("kisa", E1), ("orta", E1 + E2), ("uzun", E1 + E2 + E3))


def kur(s, x):                              # kalici yonerge + her istekte degisen girdi
    return (s + " " if s else "") + "Talep: " + x["metin"]


print(f"{'yonerge':<8} {'belirtec':>9} {'120 istekte':>12}")
for ad, s in YONERGE:
    b = len(belirtecle(s))
    print(f"{ad:<8} {b:>9d} {b * len(TALEP):>12d}")
x0 = TALEP[1]
gb = len(belirtecle("Talep: " + x0["metin"]))
ub = len(belirtecle(YONERGE[3][1]))
print(f"uzun istem: yonerge {ub} + girdi {gb} belirtec, yonergenin payi "
      f"{ub / (ub + gb):.4f}")
print(f"KURGU talep {x0['no']} ({x0['konu']}): {x0['metin']}")
for ad, s in YONERGE[1:3]:
    SAYAC[0] = 0
    for th in (TOHUM, TOHUM + 1):
        print(f"{ad} / tohum {th}: {cagir(kur(s, x0), tohum=th)['yanit']}")
yonerge   belirtec  120 istekte
yok              0            0
kisa            15         1800
orta            33         3960
uzun            62         7440
uzun istem: yonerge 62 + girdi 12 belirtec, yonergenin payi 0.8378
KURGU talep 4002 (fatura): fatura ayrintisini nereden gorebilirim
kisa / tohum 20260218: talebiniz fatura konusuyla ilgili gorunuyor
kisa / tohum 20260219: bu kayit fatura basligina girer , ilgili ekibe yonlendirildi
orta / tohum 20260218: fatura
orta / tohum 20260219: fatura

Son dört satır orta yönergenin ne yaptığını gösteriyor. Kısa yönergede iki koşum aynı etiketi buluyor ama iki ayrı cümleyle; orta yönergede iki koşum da tek sözcük veriyor. Etiket ikisinde de doğru. Değişen şey isabet değil, yanıtın okunabilirliğidir ve bedeli on sekiz belirteçtir.

Üstteki satırlar ise ölçülecek asıl orantıdır. Uzun yönerge 62 belirteç; sınıflandırılacak talep 12 belirteç. Tek bir istemde yönerge 0,8378 pay tutuyor. Yüz yirmi istekte aynı 62 belirteç yüz yirmi kez gönderiliyor ve toplam 7440 belirtece çıkıyor. Yönergeden bir belirteç atmak yüz yirmi istekte yüz yirmi belirteç kazandırır; bu, yönerge yazarken alınan her kararın istek sayısıyla çarpıldığı anlamına gelir.

Tekrarın Toplamı

İkinci blok dört yönergeyi aynı 120 kayıtta koşturur, sonra uzun yönergeyi üç ayrı istek sayısıyla tekrarlar ve son olarak her kısaltmanın kazandırdığı belirteci düşürdüğü isabetle yan yana koyar.

def olc(s, tohum=TOHUM, n=None):
    SAYAC[0] = 0
    kume = TALEP if n is None else TALEP[:n]
    gi = ci = d = bos = 0
    for x in kume:
        c = cagir(kur(s, x), tohum=tohum)
        gi, ci = gi + c["giris"], ci + c["cikis"]
        e = oku(c["yanit"])
        bos += e is None
        d += e == x["konu"]
    m = len(kume)
    return {"isabet": d / m, "bos": bos / m, "giris": gi, "cikis": ci,
            "yonerge": len(belirtecle(s)) * m, "toplam": gi + ci}


R = {ad: olc(s) for ad, s in YONERGE}
print(f"{'yonerge':<8} {'tekrar':>7} {'giris':>6} {'pay':>7} {'cikis':>6} {'isabet':>7} "
      f"{'kosum 2':>8} {'etiketsiz':>10} {'dogru basina':>13}")
for ad, s in YONERGE:
    v, k2 = R[ad], olc(s, tohum=TOHUM + 1)["isabet"]
    print(f"{ad:<8} {v['yonerge']:>7d} {v['giris']:>6d} {v['yonerge'] / v['giris']:>7.4f} "
          f"{v['cikis']:>6d} {v['isabet']:>7.4f} {k2:>8.4f} {v['bos']:>10.4f} "
          f"{v['toplam'] / v['isabet'] / len(TALEP):>13.1f}")
print()
print(f"{'istek':>6} {'yonerge belirteci':>18} {'toplam giris':>13} {'pay':>7}")
for n in (30, 60, 120):
    v = olc(YONERGE[3][1], n=n)
    print(f"{n:>6d} {v['yonerge']:>18d} {v['giris']:>13d} {v['yonerge'] / v['giris']:>7.4f}")
print()
print(f"{'kisaltma':<16} {'kazanilan belirtec':>19} {'isabet farki':>13} "
      f"{'0,01 isabet basina':>19}")
for (a1, _), (a2, _) in zip(YONERGE[1:], YONERGE[:-1]):
    kb = R[a1]["toplam"] - R[a2]["toplam"]
    fi = R[a2]["isabet"] - R[a1]["isabet"]
    o = f"{kb * 0.01 / abs(fi):.0f} belirtec" if fi < 0 else "kayipsiz"
    print(f"{a1 + ' -> ' + a2:<16} {kb:>19d} {fi:>+13.4f} {o:>19}")
yonerge   tekrar  giris     pay  cikis  isabet  kosum 2  etiketsiz  dogru basina
yok            0   1700  0.0000   1285  0.4583   0.6333     0.2917          54.3
kisa        1800   3500  0.5143   1251  0.7167   0.4583     0.2167          55.2
orta        3960   5660  0.6996    196  0.7500   0.7500     0.0250          65.1
uzun        7440   9140  0.8140    203  0.7417   0.7583     0.0250         105.0

 istek  yonerge belirteci  toplam giris     pay
    30               1860          2295  0.8105
    60               3720          4547  0.8181
   120               7440          9140  0.8140

kisaltma          kazanilan belirtec  isabet farki  0,01 isabet basina
kisa -> yok                     1766       -0.2583         68 belirtec
orta -> kisa                    1105       -0.0333        332 belirtec
uzun -> orta                    3487       +0.0083            kayipsiz

İkinci tablo tekrarın nasıl davrandığını gösteriyor. Otuz istekte uzun yönerge 1860, altmış istekte 3720, yüz yirmi istekte 7440 belirteç ediyor: bedel istek sayısıyla doğrusal büyüyor. Yönergenin toplam giriş içindeki payı ise 0,8105 ile 0,8181 arasında sabit kalıyor. Ölçek büyüdükçe tekrarın payının seyrelmesi diye bir şey yok; istek sayısı ne olursa olsun girişin dörtte üçünden fazlası yönergedir. Bir yönerge ne kadar iyi yazılmış olursa olsun, bedeli kendi uzunluğu değil, uzunluğunun trafikle çarpımıdır.

Kısaltmanın Bedeli

Birinci tablo isabetin nerede doyduğunu söylüyor. Yönergesiz istem 0,4583 veriyor. Kısa yönerge 0,7167’ye çıkarıyor. Orta yönerge 0,7500’e çıkarıyor. Uzun yönerge ise 0,7417 veriyor, yani ortanın altında. Otuz dokuz belirteçlik ek — belirsizlik kuralları, ana konu seçimi, açıklama yasağı — 3487 belirteçlik bir toplam ekledi ve isabetten 0,0083 götürdü. Doğru etiket başına bedel 65,1’den 105,0 belirtece çıktı. Bu kursta böyle bir satır adıyla yazılır: eklenen metin bedeli kesin, kazancı belirsizdir.

Üçüncü tablo kısaltmayı ters yönden okur. Uzun yönergeden ortaya inmek 3487 belirteç kazandırıyor ve isabetten hiçbir şey götürmüyor; bu kayıpsız kısaltmadır. Ortadan kısaya inmek 1105 belirteç kazandırıyor ve 0,0333 isabet götürüyor, yani her 0,01 isabet için 332 belirteç. Kısadan yönergesize inmek 1766 belirteç kazandırıyor ve 0,2583 isabet götürüyor, yani her 0,01 isabet için 68 belirteç. Kısaltmanın karşılığı sabit değildir: yönerge kısaldıkça kalan her belirteç daha pahalı hâle gelir.

Tablonun etiketsiz sütunu kısaltmanın asıl kaybını gösteriyor. Yönergesiz istemde yanıtların 0,2917 payından, kısa yönergede 0,2167 payından hiçbir etiket okunamıyor. Orta yönergede bu pay 0,0250’ye iniyor ve orada kalıyor. Kalan üç kayıt istemin değil yüzeyin payıdır: hız sınırı yüz yirmi çağrının üçünü boş döndürüyor. Yani orta yönerge, istemle kapatılabilecek boşluğun tamamını kapatmış durumda. Uzun yönergenin ekleyecek bir şeyi kalmadığı için yalnız belirteç ekliyor.

Son olarak kosum 2 sütunu okunur. Yönergesiz istem iki koşumda 0,4583 ve 0,6333, kısa yönerge 0,7167 ve 0,4583 verdi: ikinci koşumda yönergesiz istem kısa yönergeli istemi geçti. Kısa yönergenin kazancı tek koşumda görünüyor, iki koşumda taşınmıyor. Orta yönerge ise iki koşumda da 0,7500 verdi. Uzun yönerge ise 0,7417 ve 0,7583 verdi; kendi iki koşum farkı 0,0167. Uzun ile orta arasındaki 0,0083 fark bunun altında kalıyor ve bu kursta ölçülmemiş sayılır. Kural bir sonraki derste adıyla işletilir.

Özet

  • Sistem yönergesi kalıcı bir davranış tanımıdır ama kalıcılığı modelde değil istemdedir: her istekte yeniden gönderilir ve her istekte yeniden ödenir.
  • 62 belirteçlik uzun yönerge tek istemin 0,8378 payını, 120 istekte 7440 belirteci tutuyor. Pay otuz, altmış ve yüz yirmi istekte 0,8105 ile 0,8181 arasında sabit; toplam ise doğrusal büyüyor.
  • İsabet orta yönergede doyuyor: yok 0,4583, kısa 0,7167, orta 0,7500, uzun 0,7417. Uzun yönerge 3487 belirteç ekleyip 0,0083 isabet götürdü ve doğru etiket başına bedeli 65,1’den 105,0’a çıkardı.
  • Kısaltmanın karşılığı sabit değil: uzundan ortaya inmek kayıpsız, ortadan kısaya inmek 0,01 isabet başına 332 belirteç, kısadan yönergesize inmek 68 belirteç kazandırıyor.
  • Yönergenin kapattığı asıl boşluk etiketsiz yanıt payıdır: 0,2917’den 0,0250’ye iniyor ve orada duruyor. Kalan pay hız sınırından gelir, yani istemle kapatılamaz.

Sonraki Adım

Orta ile uzun yönerge arasındaki fark, uzunun kendi koşum farkının altında kaldı: eklenen otuz dokuz belirteç ölçülebilir bir şey üretmedi. Bu, yönergeye ne ekleneceği sorusunu kapatmıyor. Sık verilen bir cevap, modele kim olduğunu söylemektir: bir uzmanlık, bir görev unvanı, bir üslup. Bu ekin isabeti yükselttiği yaygın bir kabuldür ve tıpkı belirsizlik kuralları gibi her istekte ödenir. Sonraki ders bunu ölçer: rol belirtmenin kattığı fark nedir, bedeli kaç belirteçtir, ve o fark aynı istemin iki koşumu arasındaki farktan büyük müdür.

İ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