İçeriğe geç
academia.sh

Ders 14 / 14

Belirteç Temelli Maliyet

Doksan altı istekten oluşan kurgu akışta dört düzenek belirteç ve isabet olarak karşılaştırılıyor: uzun istem 0,7083 isabet ve istek başına 156,6 belirteç, kısa istem ile örnek aynı isabeti 100,6 belirteçle veriyor, özetleyip gönderme 0,8021 ile 74,0 belirtece iniyor, sert özet 68,0 belirteçte isabeti 0,0833'e düşürüyor ve önbellek 17,7 belirteçle 0,7500 veriyor. Toplam belirteç 15.034'ten 1.702'ye iniyor ve model çağrısı 96'dan 23'e düşüyor. Bütçe 7.000 belirtece indiğinde beş düzenekten yalnız ikisi sığıyor ve tasarım seçilmiş değil dayatılmış olur. Önbelleğin isabeti iki koşumda 0,7500 ve 0,9583 çıkıyor.

İçindekiler

Önceki derste belirteç bir ölçüt olarak sayıldı ama bir sınır olarak hiç kullanılmadı. Gerçek bir sistemde bütçe bir üst sınırdır ve seçimi değil tasarımı dayatır. Aynı görev, aynı model ve aynı isabetle bile, istemin nasıl yazıldığına göre istek başına harcanan belirteç birkaç kat değişir.

Bu ders dört düzeneği aynı istek akışında belirteç ve isabet olarak karşılaştırır. Birim belirteçtir; para birimi yazılmaz, çünkü belirteç sayısı ölçülebilir ve kalıcıdır, fiyat ise ne ölçülebilir ne kalıcıdır.

  • DL71. İstek akışı 96 kurgu destek talebidir ve tekrar içerir: 24 talep, sıklıkları eşit olmayacak biçimde çekilir. Talepler ve sınıflar kurgudur, tohum 20260218.
  • DL72. Ölçü ikilidir: istek başına belirteç (küçük iyi) ve isabet (büyük iyi). Model çağrısı sayısı ayrıca yazılır.
  • DL73. Dört düzenek merdiven gibidir, her satır bir öncekine bir şey ekler: uzun istem, kısa istem ile örnek, özetleyip gönderme, önbellek. Beşinci satır olan sert özet, üçüncü satırın daha sert bir ayarıdır ve sınırı göstermek için ölçülür.
  • DL74. Özetleyip gönderme, talebi isteme koymadan önce kırpar. Kırpma modelden önce, kurumun kendi tarafında yapılır ve modele hiç belirteç ödetmez.
  • DL75. Önbellek yanıtı isteğe göre saklar. Aynı talep ikinci kez geldiğinde model hiç çağrılmaz; saklanan yanıt doğruysa doğru, yanlışsa yanlış tekrarlanır.
  • DL76. Belirsizlik iki koşumla ölçülür; ikinci koşum tohum 20260219 ile alınır.

Dört Düzeneğin Belirteci ve İsabeti

# ORTAK -- KURGUDUR. Benzetici gercek bir uc nokta cagirmaz. Bedel birimi BELIRTECTIR;
# para birimi yazilmaz. Istek akisi tekrar iceren 96 kurgu destek talebidir.
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 belirtecle(metin):
    """Kurgu belirtecleyici: harf obekleri dorder, rakam obekleri ikiser bolunur."""
    cikti, tampon = [], ""
    for ch in metin + " ":
        if ch.isalnum():
            tampon += ch
            continue
        if tampon:
            n = 2 if tampon.isdigit() else 4
            cikti += [tampon[i:i + n] for i in range(0, len(tampon), n)]
            tampon = ""
        if ch.strip():
            cikti.append(ch)
    return cikti


BAS = [("sayac okunmadi tahmini fatura cikti", "olcum"),
       ("fatura tutari gecen aya gore iki kat cikti", "odeme"),
       ("gece boyunca su basinci dustu", "tesisat"),
       ("planli kesinti bildirimi ulasmadi", "kesinti"),
       ("abonelik devri sayaca islenmedi", "sozlesme")]
EK = ["sayacin numarasi degistirilmis olabilir", "adres bilgisi eski gorunuyor",
      "onceki ay ayni sorun yasanmadi", "sayaca ulasilamiyor kapi kapali",
      "kesinti suresi beklenenden uzun surdu", "otomatik talimat sayacta yok"]
SOZLUK = {"kesinti": ["kesi", "bild"], "olcum": ["okun", "olcu", "tahm"],
          "tesisat": ["basi", "dust", "tesi", "vana"],
          "odeme": ["fatu", "odem", "tali", "tuta"],
          "sozlesme": ["abon", "adre", "devr", "sozl"]}
SINIFLAR = list(SOZLUK)
TALEP = []
for i in range(24):
    r = uretec(TOHUM + 31 * i)
    a, b = 100000 + int(r() * 380000), 100000 + int(r() * 380000)
    TALEP.append({"no": 4100 + i, "sinif": BAS[i % 5][1],
                  "metin": f"abone {4100 + i}: {BAS[i % 5][0]}, {EK[(5 * i + 2) % 6]}."
                           f" ana sayac {a} ara sayac {b}."})
r = uretec(TOHUM + 9091)
AKIS = [int(r() ** 1.7 * 24) for _ in range(96)]   # tekrar iceren kurgu istek akisi
# (ad, yonerge belirteci, ornek belirteci, girdi kirpma, onbellek)
DUZENEK = [("uzun istem", 118, 0, 0, False), ("kisa istem + ornek", 16, 46, 0, False),
           ("ozetleyip gonderme", 16, 46, 12, False), ("sert ozet", 16, 46, 6, False),
           ("onbellek", 16, 46, 12, True)]


def cagir(t, kirpma, sira, tohum):
    """Benzetici: istemde gorunen belirtecleri kullanir; kirpma gorunen kismi kisaltir."""
    bel = belirtecle(t["metin"])
    bel = bel[:kirpma] if kirpma else bel
    sz = {s: set(o[:4]) for s, o in SOZLUK.items()}
    p = sorted(((sum(b in sz[s] for b in bel), s) for s in SINIFLAR), key=lambda x: (-x[0], x[1]))
    if p[0][0] == 0 or p[0][0] == p[1][0]:
        return "belirsiz"
    return p[1][1] if uretec(tohum + 37 * sira + 7 * t["no"])() < 0.14 else p[0][1]


def olc(duzenek, tohum=TOHUM):
    ad, yonerge, ornek, kirpma, onbellek = duzenek
    bellek, dogru, belirtec, cagri = {}, 0, 0, 0
    for sira, i in enumerate(AKIS):
        t = TALEP[i]
        if onbellek and i in bellek:
            dogru += bellek[i] == t["sinif"]
            continue                            # istek modele hic gitmez
        n = len(belirtecle(t["metin"]))
        y = cagir(t, kirpma, sira, tohum)
        belirtec += yonerge + ornek + (min(n, kirpma) if kirpma else n)
        cagri += 1
        bellek[i] = y
        dogru += y == t["sinif"]
    return dogru / len(AKIS), belirtec / len(AKIS), cagri, belirtec


print(f"kurgu istek akisi {len(AKIS)} istek, benzersiz talep {len(set(AKIS))}/24")
print("duzenek              isabet  isabet B  belirtec/istek  model cagrisi  toplam belirtec")
for d in DUZENEK:
    i, b, c, top = olc(d)
    i2 = olc(d, TOHUM + 1)[0]
    print(f"{d[0]:<20}  {i:.4f}  {i2:.4f}      {b:>6.1f}         {c:>3}/96        {top:>6}")
kurgu istek akisi 96 istek, benzersiz talep 23/24
duzenek              isabet  isabet B  belirtec/istek  model cagrisi  toplam belirtec
uzun istem            0.7083  0.7396       156.6          96/96         15034
kisa istem + ornek    0.7083  0.7396       100.6          96/96          9658
ozetleyip gonderme    0.8021  0.8438        74.0          96/96          7104
sert ozet             0.0833  0.0833        68.0          96/96          6528
onbellek              0.7500  0.9583        17.7          23/96          1702

İlk iki satır aynı isabeti veriyor: 0,7083 ve ikinci koşumda 0,7396. Aralarındaki tek fark uzun bir yönerge yerine kısa bir yönergeyle iki örnek konulmasıdır. Bedel farkı istek başına 56,0 belirteç, toplamda 5.376 belirteçtir. Bu, tablodaki en kolay kazançtır ve isabete hiçbir şey ödetmez. Uzun istem, ölçülmediği sürece iyi bir istem gibi görünür.

Üçüncü satır beklenmedik yöne gidiyor: özetleyip göndermek belirteci 74,0’a indirirken isabeti 0,8021’e çıkarıyor. Sebep kurgudadır ve okunabilir — kırpma, talebin ek tümcesini düşürüyor, ek tümce ise sınıf kanıtını bulandıran öbekleri taşıyordu. Bu bir genel yasa değil, bu veri kümesinin bir özelliğidir. Nitekim dördüncü satır sınırı gösteriyor: kırpma altı belirtece sertleştirildiğinde isabet 0,0833’e çöküyor ve karşılığında yalnız 6,0 belirteç kazanılıyor. Özet bir ayardır, ve ayarın iyi tarafı ile uçurumu birbirine çok yakındır.

Son satır tablodaki en büyük kazancı taşıyor: istek başına 17,7 belirteç, model çağrısı 23/96. Doksan altı isteğin yetmiş üçü modele hiç gitmiyor. İsabet 0,7500 ile üçüncü satırın altında, ama iki koşum sütununa bakmak gerekiyor: aynı önbellek ikinci tohumda 0,9583 veriyor. Önbellek isabeti düşürmüyor da yükseltmiyor da; donduruyor. Bir talebin ilk yanıtı ne çıktıysa o talebin bütün tekrarları o yanıtı alıyor. Belirsiz bir bileşenin önüne konan önbellek, belirsizliği ortadan kaldırmaz; onu tek bir çekilişe indirger ve sonucu kalıcı yapar.

Bütçenin Dayattığı Tasarım

SONUC = [(d[0],) + olc(d) for d in DUZENEK]
print("butce   istek basina  sigan duzenek  butcenin dayattigi tasarim   isabet")
for butce in (16000, 10000, 7000, 2000, 1500):
    sigan = [s for s in SONUC if s[4] <= butce]
    en = max(sigan, key=lambda s: s[1]) if sigan else None
    print(f"{butce:>6}     {butce / 96:>6.1f}         {len(sigan)}/5       "
          f"{(en[0] if en else 'hicbiri'):<26} {(f'{en[1]:.4f}' if en else '  -   ')}")
print("bedeli yazilmayan duzenek: uzun istem ile kisa istem + ornek ayni isabeti verir,"
      " fark 5376 belirtec")
butce   istek basina  sigan duzenek  butcenin dayattigi tasarim   isabet
 16000      166.7         5/5       ozetleyip gonderme         0.8021
 10000      104.2         4/5       ozetleyip gonderme         0.8021
  7000       72.9         2/5       onbellek                   0.7500
  2000       20.8         1/5       onbellek                   0.7500
  1500       15.6         0/5       hicbiri                      -   
bedeli yazilmayan duzenek: uzun istem ile kisa istem + ornek ayni isabeti verir, fark 5376 belirtec

Bütçe geniş olduğunda tasarım seçilir: 16.000 belirteçte beş düzeneğin beşi de sığıyor ve en yüksek isabeti veren seçiliyor. Bütçe 7.000’e indiğinde tasarım dayatılır: yalnız iki düzenek sığıyor ve en iyisi 0,8021 değil 0,7500’dür. Aradaki 0,0521 bir mühendislik hatası değil, bütçenin fiyatıdır. 1.500 belirteçte hiçbir düzenek sığmıyor; o noktada yapılacak şey daha iyi bir istem yazmak değil, ya bütçeyi büyütmek ya da isteklerin bir kısmını modelden hiç geçirmemektir.

Bu tablonun okunma sırası da önemlidir. Bütçe daralırken ilk düşen düzenek en pahalı olan, en kötü olan değildir. Uzun istem 15.034 belirteçle listeden ilk çıkandır ve isabeti kısa istemle birebir aynıdır; yani bütçe önce hiçbir şey kazandırmayan bedeli kesiyor. Bir sistemi ucuzlatmanın ilk adımı da budur: kazancı ölçülmemiş düzenekleri bulup çıkarmak. Bedeli yazılmayan düzenek, ölçülmemiş olduğu için savunulamaz.

Özet

  • Uzun istem ile kısa istem artı örnek aynı isabeti (0,7083) veriyor; fark istek başına 56,0, toplamda 5.376 belirteçtir ve isabete hiçbir şey ödetmez.
  • Özetleyip gönderme belirteci 74,0’a indirirken isabeti 0,8021’e çıkarıyor, ama kırpma altı belirtece sertleştirildiğinde isabet 0,0833’e çöküyor ve karşılığı yalnız 6,0 belirteçtir.
  • Önbellek istek başına 17,7 belirteçle en ucuzudur ve 96 isteğin 73’ünü modele hiç göndermez; isabeti düşürmez de yükseltmez, tek bir çekilişe indirger ve donduruyor (0,7500 ile 0,9583).
  • Bütçe 7.000 belirtece indiğinde beş düzenekten ikisi sığıyor ve tasarım seçilmiş değil dayatılmış olur; en iyi ulaşılabilir isabet 0,8021’den 0,7500’e iner.
  • Bütçe daralırken ilk çıkan düzenek en pahalı olandır ve isabete hiçbir katkısı yoktur; bir sistemi ucuzlatmanın ilk adımı kazancı ölçülmemiş düzenekleri çıkarmaktır.

Kurs Kapanışı

On dört dersin hesabı tek tabloda ve her sayı kendi dersinden okundu. Satırlar ortak birim taşımaz; ikinci sütun her satırın hangi ölçütle okunduğunu yazar. Fark tek işaret düzeniyle verilir: düzeneğin sayısı eksi çıplak çağrının sayısı, ve üçüncü sütunda parantez içindedir.

Ders Çıplak çağrı Düzenekle Bedel
Alan 01 mühendis etiket isabeti 0,6000 etiket kümesi ve biçim kısıtı 0,7750 (+0,1750) toplam belirteç 1,54 kat, çağrı 120 → 123, doğru etiket başına 50,7 → 60,4
Alan 02 fark biçim kısıtsız isabet 0,5000 biçim kısıtı 0,8056 (+0,3056) −634 belirteç, 0 etiketli örnek; yeniden deneme +1 çağrı, +51 belirteç, (+0,0000)
Alan 03 ürün düzeneksiz isabet 0,5556 kaynağa bağlamak 0,8958 (+0,3402) +4.986 belirteç, 144 erişim adımı, gecikme sınıfı zincir
Alan 04 ayrım genel iddiada sınanan 0/9 ölçülebilir iddiada sınanan 5/5, geçen 3 (+5 sınama) iddia başına dört bileşen: görev, ölçüt, küme, yönüyle eşik
Dil 01 belirteçler talep başına 27,78 belirteç, isabet 0,9722 0,50 eşiği 11,68 belirteç, 0,9722 (−16,10 belirteç) ön işleme adımı ve sıklık tablosu; 0,30 eşiği isabeti 0,8611’e düşürür
Dil 02 dönüştürücü son 16 belirteç, isabet 0,0000 uzaklıktan bağımsız ağırlık 1,0000 (+1,0000) karşılaştırma 16 → 69,7; 1024 belirteçte sabit pencerenin 8,26 katı
Dil 03 önceden eğitim arıza kodu isabeti 0,0900 400 örnekle ince ayar 0,9400 (+0,8500) 400 etiketli örnek; genel metin 0,4616 → 0,3998 (−0,0618)
Dil 04 çıkarım çıktı sınırı 4, isabet 0,0000 sınır 8, isabet 1,0000 (+1,0000) 4,00 → 6,43 belirteç, 126,0 → 211,1 karşılaştırma (1,68 kat)
Dil 05 bağlam penceresi tam yanıt 0,3833, istem 282,3 belirteç baştan atmak 0,7433 (+0,3600) −64,8 belirteç ama ek kırpma adımı; zaman aşımı payı 0,0200 → 0,0600
Dil 06 yetenekler sayma 0,4167, kesin hesap 0,2917 yordam düzeneği 1,0000 ve 1,0000 (+0,5833, +0,7083) 33,3 → 69,6 belirteç, 1 → 2 çağrı, zincir; çoğunluk 99,9 belirteçle (+0,0000)
Dil 07 halüsinasyon uydurma oranı 0,6667, isabet 0,2917 kaynağa bağlama 0,3333 ve 0,6667 (−0,3334, +0,3750) 9,8 → 27,8 belirteç; bilmiyorum seçeneği isabeti (−0,0417) düşürür
Dil 08 erişim biçimi açık ağırlıklı çıplak isabet 0,1250 altı örnekle 0,7917 (+0,6667) 38,3 → 176,3 belirteç (4,60 kat); kapalı biçimde 24/24 istek dışarı
Dil 09 model seçimi dengeli ağırlıkta orta aday 3,1078 isabet ağırlığı 4’te büyük aday 4,0000 (+0,8922) denk belirteç 181,2 → 627,5 (3,46 kat), adım 7,00 → 14,00
Dil 10 maliyet uzun istem 0,7083, istek başına 156,6 belirteç önbellek 0,7500, 17,7 belirteç (+0,0417, −138,9) model çağrısı 96 → 23; isabet iki koşumda 0,7500 ve 0,9583

Kursun kuralı budur: verilmiş bir bileşen yüzeyinden ölçülür; içine bakılamayan bir bileşenin sayısı yüzeyinde yazılıdır. Tablodaki hiçbir sayı modelin içinden gelmedi. Hepsi bir isteğin girdiği, bir yanıtın çıktığı ve arada kaç belirteç, kaç çağrı, kaç adım harcandığı sayılarak alındı. Modelin mimarisi, ağırlıkları ve eğitildiği veri tabloda hiçbir yerde geçmiyor, çünkü bunlar bu kursta ölçülebilir büyüklükler değildi; ölçülebilir olan her şey yüzeydeydi.

Müfredatın kuralı da buradan okunur: bir yapay zekâ sisteminin sayısı, modelin sayısı değil düzeneğin sayısıdır; bedeli yazılmayan düzenek ölçülmemiş sayılır. Üçüncü sütun bu yüzden tabloda durur ve hiçbir satırda boş değildir.

Müfredatın ikinci iddiası da aynı tablodan adıyla okunur: düzenek eklemek her zaman iyileştirmez. Alan 02’de yeniden deneme sayıyı 0,0000 oynatıp bir çağrı ve 51 belirteç ekledi. Alan 03’te seçenek sunmak görünen değişimi 0,3889’dan 0,4583’e yükseltti. Dil 01’de 0,30 eşiği isabeti 0,9722’den 0,8611’e düşürdü. Dil 03’te ince ayar alan metnini düzeltirken genel metni 0,4616’dan 0,3998’e indirdi. Dil 05’te özetlemek istemi 100,6 belirtece indirdi ama sorulan adımı attığı için tam yanıt oranını 0,3833’ten 0,0000’a çökertti. Dil 06’da üç koşumlu çoğunluk 99,9 belirteç harcayıp sayma ile kesin hesapta hiçbir şey değiştirmedi. Dil 07’de bilmiyorum seçeneği isabeti tabanın 0,0417 altına düşürdü. Dil 10’da sert özet isabeti 0,8021’den 0,0833’e çökertti. Sekiz satır, tek bir kural: bir düzeneğin bedeli kesindir, kazancı değildir.

On dört derste modelin yüzeyi ölçüldü ve her sayının yanına bedeli yazıldı. Sorulmayan tek şey modele ne söylendiğidir. Bütün tabloda istem ya sabit tutuldu ya da uzunluğuyla anıldı; içinde ne yazdığı, hangi sırayla yazdığı, örneğin nereye konduğu ve yönergenin nasıl kurulduğu hiç değişken olmadı. Aynı görevde aynı modele başka bir metin verildiğinde sayının ne kadar oynadığı, ve o metnin kendisinin bir tasarım nesnesi olduğu ölçülmedi. Sonraki kurs, İstem Mühendisliği, tam olarak bu değişkeni 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