İçeriğe geç
academia.sh

Ders 17 / 22

Örnekleme Parametreleri

Sıcaklık, çekirdek örnekleme ve en olası k seçiminin aynı istem üzerinde birlikte ölçülmesi: taban ayarda etiket isabeti 0,6417 ve iki koşum farkı 0,5667, sıcaklık 0,2'de 0,8750 ve 0,0417, çekirdek 0,50'de 0,8417 ve 0,1333, en olası k üçte 0,7833 ve 0,3583, üçü birlikte daraltıldığında 0,8667 ve 0,0083. Sabit kesim ortalama üç aday bırakırken çekirdek kesimi 1,20 aday bırakıyor. Giriş belirteci 5300'de sabit kalıyor ve çağrı sayısı 120'de durduğu için değişikliğin bedeli on üç çıkış belirtecidir.

İçindekiler

Önceki on altı derste istemin metni bir tasarım nesnesi olarak ele alındı: yönerge düzenlendi, örnek kondu, kısıt yazıldı, modelden adım adım akıl yürütmesi istendi. Bütün bu derslerde ölçülen şey isteme ne yazıldığıydı. Yanıtın kendisi ise hep serbest metin olarak geri geldi ve nasıl üretildiği hiç sorulmadı.

Bu konu oradan açılır. Yanıt bir dağılımdan çekilir ve o çekilişin üç ayarı vardır: dağılım sıcaklığı, çekirdek örnekleme ve en olası k seçimi. Bu üç ayar M28/K01’in Yapay Zekâ Mühendisliğine Giriş kursunda tanımlandı; burada tanımları tekrarlanmaz. Bu dersin sorusu başkadır: üçü aynı anda kullanıldığında ne oluyor, hangisi hangi görevde işe yarıyor ve iki koşum arasındaki farkı hangisi daraltıyor.

  • CD1. Kod bir benzeticidir ve gerçek bir model uç noktası çağırmaz. Destek talepleri, konular ve belge dağarcığı kurgudur; tohum 20260218.
  • CD2. Önceki istem sabittir: etiket kümesini sayan ve tek etiket isteyen yönerge. Bu istem bütün derste hiç değişmez; değişen tek şey çağrının örnekleme ayarıdır.
  • CD3. Ölçüt ikilidir. Etiketleme görevinde etiket isabeti (büyük iyi), serbest yanıt görevinde ayrı yanıt sayısı (çeşitlilik) ölçülür.
  • CD4. İki koşum farkı, aynı 120 talepte tohum 20260218 ile 20260219 arasında kararı değişen kayıt payıdır. Bir değişikliğin kattığı fark bu sayıdan küçükse ölçülmemiş sayılır.
  • CD5. Sıcaklık dağılımı yeniden biçimler; aday listesini kısaltmaz. Çekirdek örnekleme ve en olası k seçimi ise listeyi keser.
  • CD6. Aday sayısı ayrıca basılır: sabit kesimin bıraktığı aday sayısı ile uyarlanan kesimin bıraktığı aday sayısı aynı tabloda görünür.
  • CD7. Benzeticinin iç işaret tablosunda yanıltıcı bağlar vardır; hiçbir örnekleme ayarı bunları düzeltmez.
  • CD8. Bedel belirteçle yazılır: giriş belirteci, çıkış belirteci ve çağrı sayısı.

Üç Ayarın Ayrı İşleri

Üç ayar aynı yerde iş görür: puanlar bir olasılık dağılımına çevrildikten sonra, çekiliş yapılmadan hemen önce. Sıcaklık bölendir ve dağılımı sivrileştirir ya da düzleştirir. En olası k seçimi listeyi baştan sabit sayıda keser. Çekirdek örnekleme ise sayıya değil olasılık toplamına bakar ve eşiğe ulaşana kadar aday alır.

# BENZETICI -- KURGUDUR. Gercek bir model uc noktasi cagrilmaz; asagidaki kod
# standart kitaplikla yazilmis bir dil modeli benzeticisidir. Talepler de KURGU'dur.
import math

TOHUM, M32 = 20260218, 0xFFFFFFFF
PENCERE, EN_UZUN = 240, 24


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):                            # isteme 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 = [("bu ayki fatura tutari gecen aya gore cok yuksek geldi", "fatura"),
         ("faturami odedim ama sistemde borc gorunuyor", "fatura"),
         ("fatura ayrintisini nereden gorebilirim", "fatura"),
         ("evde su akmiyor bir ariza var galiba", "ariza"),
         ("baglanti bozuk oldu ve hic calismiyor", "ariza"),
         ("ariza kaydi actim ama ekip gelmedi", "ariza"),
         ("sayac okumasi yanlis girilmis endeks tutmuyor", "sayac"),
         ("sayac degisimi icin randevu istiyorum", "sayac"),
         ("sayac uzerindeki endeks ile fatura ayni degil", "sayac"),
         ("hangi tarife basamagindayim ogrenmek istiyorum", "tarife"),
         ("tarife degisikligi icin ne yapmam gerekiyor", "tarife"),
         ("birim ucret abone tipine gore degisiyor mu", "tarife"),
         ("mahallede kesinti var ne zaman gelecek", "kesinti"),
         ("planli kesinti duyurusu nereden takip edilir", "kesinti"),
         ("aksamdan beri kesinti yasiyoruz", "kesinti")]
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):                    # 120 KURGU destek talebi
    r = uretec(TOHUM + i)
    k = KONU[ayrik(r(), [0.24, 0.22, 0.18, 0.20, 0.16])]
    m, _ = [x for x in KALIP if x[1] == k][int(r() * 3)]
    TALEP.append({"no": 4001 + i, "konu": k,
                  "metin": m + (" " + EK[int(r() * 4)] if r() < 0.34 else "")})

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 dagilim(bel, sicaklik, cekirdek, en_olasi_k):
    """Uc ayar burada ve yalniz burada is gorur: sicaklik dagilimi yeniden bicimler,
    en olasi k sabit sayida aday birakir, cekirdek ornekleme olasilik toplamina bakar."""
    aday = [k for k in KAVRAM if k[:5] in bel]
    p = {k: 0.15 for k in (aday if len(aday) >= 3 else KAVRAM)}
    for t in bel:
        for tablo, w in ((IZ, 1.0), (TUZAK, 1.3)):
            if tablo.get(t) in p:
                p[tablo[t]] += w
    ad = sorted(p, key=lambda a: (-p[a], a))
    if sicaklik <= 0.0:
        return [ad[0]], [1.0]                       # en olasi secim
    e = [math.exp(p[a] / sicaklik) for a in ad]
    o = [v / sum(e) for v in e]
    ad, o = ad[:en_olasi_k], o[:en_olasi_k]         # en olasi k secimi
    n, t = 0, 0.0
    while t < cekirdek and n < len(o):              # cekirdek ornekleme
        t += o[n]
        n += 1
    ad, o = ad[:n], o[:n]
    return ad, [v / sum(o) for v in o]


def cagir(istem, tohum=TOHUM, sicaklik=1.0, cekirdek=1.0, en_olasi_k=9,
          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))
    ad, o = dagilim(bel, sicaklik, cekirdek, en_olasi_k)
    k = ad[ayrik(r(), o)]
    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, y = cb[:en_uzun], " ".join(cb[:en_uzun])
    return {"durum": "tamam", "giris": len(bel), "cikis": len(cb), "yanit": y}


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


ETIKET = ("Talebi su etiketlerden birine ata: fatura , ariza , sayac , tarife , "
          "kesinti . Yanit olarak tek etiket yaz . Talep: ")
b = belirtecle(ETIKET + TALEP[6]["metin"])
print(f"KURGU talep kumesi {len(TALEP)} kayit; ornek talep {TALEP[6]['no']}")
print(f"istem {len(b)} belirtec, gercek konu {TALEP[6]['konu']}")
print("ayar                       aday  ilk uc olasilik")
for ad, s, c, k in (("taban 1,0 / 1,00 / 9", 1.0, 1.0, 9),
                    ("sicaklik 0,2", 0.2, 1.0, 9),
                    ("cekirdek 0,50", 1.0, 0.5, 9),
                    ("en olasi k 3", 1.0, 1.0, 3)):
    a, o = dagilim(b, s, c, k)
    print(f"{ad:<24} {len(a):>5}  {' '.join(f'{v:.3f}' for v in o[:3])}")
KURGU talep kumesi 120 kayit; ornek talep 4007
istem 42 belirtec, gercek konu sayac
ayar                       aday  ilk uc olasilik
taban 1,0 / 1,00 / 9         5  0.564 0.207 0.076
sicaklik 0,2                 5  0.993 0.007 0.000
cekirdek 0,50                1  1.000
en olasi k 3                 3  0.665 0.245 0.090

Dört satır üç ayrı işi gösteriyor. Sıcaklık 0,2’de aday sayısı beşte kalıyor ama en yüksek olasılık 0,564’ten 0,993’e çıkıyor: liste kısalmadı, dağılım sivrildi. Çekirdek 0,50 tek adayla dönüyor, çünkü ilk adayın olasılığı zaten 0,564 ve eşiği tek başına aşıyor. En olası k üç seçimi listeyi üçe indiriyor ama kalan üç adayın olasılıkları yeniden ölçeklenince ikinci aday 0,207’den 0,245’e yükseliyor. Kesmek, kalanları güçlendirir.

Buradan çıkan ayrım dersin geri kalanını taşır: sıcaklık bir biçimleme, çekirdek örnekleme uyarlanan bir kesim, en olası k seçimi sabit bir kesimdir.

Üç Ayarın Birlikte Davranışı

Aynı istem, aynı 120 talep ve aynı benzetici üzerinde dokuz ayar bileşimi ölçülür. Etiketleme görevinde isabet, serbest yanıt görevinde ayrı yanıt sayısı basılır. İki koşum farkı, tohum değiştirilerek alınan ikinci koşumda kararı değişen kayıt payıdır.

SERBESTI = "Su destek talebine kisa bir yanit yaz . Talep: "
AYAR = [("taban 1,0 / 1,00 / 9", 1.0, 1.0, 9), ("sicaklik 0,6", 0.6, 1.0, 9),
        ("sicaklik 0,2", 0.2, 1.0, 9), ("en olasi secim", 0.0, 1.0, 9),
        ("cekirdek 0,50", 1.0, 0.5, 9), ("cekirdek 0,20", 1.0, 0.2, 9),
        ("en olasi k 3", 1.0, 1.0, 3), ("en olasi k 1", 1.0, 1.0, 1),
        ("ucu birlikte", 0.6, 0.5, 3)]


def kosum(yonerge, s, c, k, tohum):
    SAYAC[0] = 0
    return [oku(cagir(yonerge + x["metin"], tohum=tohum, sicaklik=s,
                      cekirdek=c, en_olasi_k=k)["yanit"]) for x in TALEP]


print("ayar                   isabet A  isabet B  iki kosum farki  ayri yanit  aday")
for ad, s, c, k in AYAR:
    a, b = kosum(ETIKET, s, c, k, TOHUM), kosum(ETIKET, s, c, k, TOHUM + 1)
    d = sum(1 for x, y in zip(a, b) if x != y) / len(a)
    ia = sum(x == t["konu"] for x, t in zip(a, TALEP)) / len(a)
    ib = sum(x == t["konu"] for x, t in zip(b, TALEP)) / len(b)
    SAYAC[0] = 0
    n = len({cagir(SERBESTI + x["metin"], sicaklik=s, cekirdek=c,
                   en_olasi_k=k)["yanit"] for x in TALEP})
    m = sum(len(dagilim(belirtecle(ETIKET + t["metin"]), s, c, k)[0])
            for t in TALEP) / len(TALEP)
    print(f"{ad:<22} {ia:>8.4f}  {ib:>8.4f}  {d:>15.4f}  {n:>10}  {m:>4.2f}")
for ad, s, c, k in (AYAR[0], AYAR[-1]):
    SAYAC[0] = 0
    y = [cagir(ETIKET + x["metin"], sicaklik=s, cekirdek=c, en_olasi_k=k) for x in TALEP]
    print(f"bedel {ad:<22} giris {sum(z['giris'] for z in y)} "
          f"cikis {sum(z['cikis'] for z in y)} cagri {SAYAC[0]}")
ayar                   isabet A  isabet B  iki kosum farki  ayri yanit  aday
taban 1,0 / 1,00 / 9     0.6417    0.6000           0.5667          15  5.03
sicaklik 0,6             0.8167    0.8250           0.2833          17  5.03
sicaklik 0,2             0.8750    0.8917           0.0417          10  5.03
en olasi secim           0.8667    0.8667           0.0000          10  1.00
cekirdek 0,50            0.8417    0.9667           0.1333          15  1.20
cekirdek 0,20            0.8667    0.8667           0.0000          10  1.00
en olasi k 3             0.7833    0.7833           0.3583          15  3.00
en olasi k 1             0.8667    0.8667           0.0000          10  1.00
ucu birlikte             0.8667    0.8667           0.0083          10  1.01
bedel taban 1,0 / 1,00 / 9   giris 5300 cikis 191 cagri 120
bedel ucu birlikte           giris 5300 cikis 204 cagri 120

Taban satırı ölçülemez bir satırdır. İsabet 0,6417 görünüyor, ama iki koşum farkı 0,5667: kayıtların yarıdan fazlasında karar tohum değişince değişiyor. Bu tabanda ölçülen hiçbir istem iyileştirmesi savunulamaz, çünkü aranan fark gürültünün altında kalır.

Üç ayarın hepsi bu farkı daraltıyor, ama aynı ölçüde değil. Sıcaklık 0,2 farkı 0,0417’ye indiriyor ve isabeti 0,8750 ile tablonun en yükseğine çıkarıyor. Dikkat çekici olan, bunun en olası seçimden (0,8667) de yüksek olması: dağılımı sivriltmek, tamamen kesmekten iyi sonuç verdi. Çekirdek 0,50 farkı 0,1333’e indirirken ortalama aday sayısını 1,20’de tutuyor; yani talebin çoğunda tek adaya iniyor, kanıtın zayıf olduğu birkaç talepte ikinci adayı da açık bırakıyor. Bu uyarlanan kesimdir.

En olası k üç satırı tablodaki en öğretici satırdır. Aday sayısı 3,00’te sabittir ve iki koşum farkı 0,3583 ile taban dışındaki en büyük değerdir. Sabit bir kesim, kanıtın güçlü olduğu taleplerde gereksiz yere iki rakip aday bırakır ve sıcaklık 1,0 onları yarıştırmaya devam eder. Kesmek tek başına belirsizliği kapatmaz; neye göre kesildiği belirler.

Serbest yanıt sütunu ters yönü gösteriyor. Daraltma etiketlemede kazandırırken burada kaybettirir: ayrı yanıt sayısı sıcaklık 0,6’da 17 iken daraltılmış ayarların hepsinde 10’a iniyor. Aynı üç ayar, iki görevde iki ayrı yöne çalışıyor. Tek doğru cevabı olan bir görevde belirsizlik bir kusurdur; her aboneye ayrı cümle yazması beklenen bir görevde belirsizlik ürünün kendisidir. On ayrı yanıtın kalması, ayarların yanıtın biçimini seçen çekilişi hiç etkilememesindendir: bir ayar her belirsizlik kaynağını kapatmaz.

Bedeli Sıfır Belirteç Olan Değişiklik

Bu dersin bedel satırı kursun geri kalanından ayrılır. Önceki istem ile değiştirilmiş istem birebir aynı metindir: giriş belirteci iki ayarda da 5300, çağrı sayısı iki ayarda da 120. Çıkış belirteci 191’den 204’e çıkıyor, çünkü daraltılmış ayar daha uzun yazılan etiketleri biraz daha sık seçiyor. Toplam bedel 13 belirteçtir, yani istek başına 0,11 belirteç.

Karşılığında alınan şey ölçülebilirliğin kendisidir. Taban ayarda iki koşum farkı 0,5667 iken üç ayar birlikte daraltıldığında 0,0083‘e iniyor. Bundan sonraki derslerde bir istem değişikliğinin kattığı 0,05’lik bir kazanç anlamlı bir sayıdır; taban ayarda aynı kazanç ölçülemezdi. Kursun kuralı burada bir ön koşula dönüşür: ölçülmeden değiştirilen istem bir iyileştirme değil bir tahmindir, ve ölçüm ancak iki koşum farkı yeterince küçükken mümkündür.

Bunun bir sınırı da yazılmalıdır. Üçü birlikte daraltılmış ayarda isabet 0,8667’de duruyor ve kalan 16 yanlış kaydın çoğu benzeticinin yanıltıcı bağlarından geliyor. Örnekleme ayarları belirsizliği kapatır, sistematik hatayı kapatmaz. Kararlı biçimde yanlış bir yanıt da kararlıdır.

Özet

  • Sıcaklık dağılımı biçimler ve aday listesini kısaltmaz; çekirdek örnekleme olasılık toplamına bakarak uyarlanan bir kesim yapar; en olası k seçimi sabit sayıda aday bırakır.
  • Taban ayarda etiket isabeti 0,6417 ama iki koşum farkı 0,5667’dir; bu tabanda hiçbir istem değişikliği ölçülemez.
  • Sıcaklık 0,2 farkı 0,0417’ye indirirken isabeti 0,8750 ile en yükseğe çıkarıyor ve en olası seçimin 0,8667’sini geçiyor; dağılımı sivriltmek, tamamen kesmekten iyi sonuç verdi.
  • En olası k üç, aday sayısını 3,00’te sabitleyip iki koşum farkını 0,3583’te bırakıyor; çekirdek 0,50 ise 1,20 aday ile farkı 0,1333’e indiriyor.
  • Aynı ayarlar serbest yanıt görevinde çeşitliliği 17’den 10’a düşürüyor: daraltma bir görevde kazanç, öbüründe kayıptır.
  • Değişikliğin bedeli 13 çıkış belirteci ve sıfır ek çağrıdır; giriş belirteci 5300’de sabittir.

Sonraki Adım

Örnekleme ayarları hangi kavramın seçileceğini denetledi, ama yanıtın nerede biteceğini hiç denetlemedi. Bu derste çıktı uzunluğu tek bir sert sınırla kesildi ve kesilen yanıtların kaç tane olduğu sayılmadı. Aynı biçimde, bir yanıtın kendi içinde aynı cümleyi tekrar etmesi de hiç ölçülmedi: dağılımı sivriltmek en olası ifadeyi daha da olası kılar ve uzun yanıtlarda bu kendini tekrara dönüşür. Sonraki ders iki yeni denetimi ekler ve ikisini de sayıyla ölçer: yineleme cezası yineleme oranını ne kadar düşürüyor, durdurma dizisi kaç yanıtı kesiyor ve bunların kaçını erken kesiyor.

İ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