İçeriğe geç
academia.sh

Ders 05 / 26

Çok Kipli Girdi

Aynı saha denetim kaydının altı girdi biçiminde ölçülmesi: metin özeti 21, kırpık ince ızgara 42, kaba ızgara 59, ince ızgara 183 belirteç ve dizi kayıt başına 195 ile 330 arasında. Kullanılabilir kayıt oranı kaba ızgarada 0,0833, ince ızgarada 0,8167, kırpık ızgarada 0,7000; kırpık biçim ince ızgaranın kullanılabilir kayıtlarının yüzde seksen altısını dörtte bir belirteçle veriyor ve kayıt başına bedel 224,1'den 60,0'a düşüyor. Dizi biçimi en yüksek görünürlüğe sahip olduğu hâlde altmış kaydın otuz dördünde bağlam penceresini aştığı için 0,3667'de kalıyor ve en pahalı biçim oluyor. Ses kipi endeksi 0,8833 ile okuyor ama gövde durumuna kör olduğu için kullanılabilir kayıt üretmiyor.

İçindekiler

Önceki dört ders arayüzün ne sunduğunu ölçtü: rol ve içerikten oluşan bir mesaj dizisi, parça parça gelen bir yanıt, kod yürütmeye bağlanan bir çağrı ve üretimi kısıtlayan bir çıktı kipi. Dördünde de modele giren şey metindi. Belirteç sayımı metnin üzerinde yapıldı, bağlam penceresi metinle doldu, kısaltma kararları metinden budandı.

Saha ekibinin elindeki denetim kaydı metin değil. Sayacın yüzünün bir görüntüsü var, bazen bir ses notu, bazen birkaç karelik bir çekim. Çok kipli bir arayüz bunları kabul eder; kabul etmesi bedava değildir. Bu ders aynı denetim kaydını altı ayrı biçimde gönderir ve iki sayıyı yan yana basar: girdinin belirteç bedeli ve okumanın isabeti. Ölçülen şey modelin görme yeteneği değil, biçim seçiminin faturasıdır.

  • AK41. Kod bir benzeticidir; gerçek bir çok kipli uç nokta çağrılmaz. Denetim kayıtları, sayaç yüzü ve bütün kip görünürlükleri kurgudur, tohum 20260218.
  • AK42. Çok kipli bir uç noktanın faturaladığı birim yine belirteçtir. Görüntü ızgara hücrelerine, ses parçalara, dizi karelere ayrılır ve her hücre bir belirteç sayılır. Bu dersin bütün bedel sütunu bu birimle yazılır.
  • AK43. Altı biçim şunlardır: elle yazılmış metin özeti, kaba ızgara (4x10), ince ızgara (8x20), kırpık ince ızgara (3x8), dizi (kayıt başına dört ile yedi kare, her kare bir kaba ızgara) ve ses (on sekiz ile otuz parça).
  • AK44. Her kip iki görünürlük payı taşır: endeksin ve gövde durumunun doğru okunma payı. Bu paylar benzeticinin kurgu sabitleridir; çözünürlük arttıkça yükselirler.
  • AK45. Ses kipinin gövde durumu görünürlüğü sıfırdır. Bir kip bir alana kör olabilir ve bu bir hata değil, o kipin taşıdığı bilginin sınırıdır.
  • AK46. Kullanılabilir kayıt, hem endeksi hem gövde durumu doğru okunan kayıttır; bu dersin ürün ölçütü budur. Tek alanı doğru okunan kayıt saha ekibinin işine yaramaz.
  • AK47. Bağlam penceresi 240 belirteç, hız sınırı otuz yedi çağrıda bir. Yapay Zekâ Mühendisliğine Giriş kursunda kurulan yüzey aynen sürer.
  • AK48. Makine Öğrenmesi ve Veri Bilimi müfredatının Doğal Dil İşleme ve Bilgisayarla Görme kursu çok kipli modelin ortak temsilini ölçtü; o yordam burada tekrarlanmaz. Ölçülen tek şey girdi biçiminin bedelidir.

Bir Kaydın Altı Biçimi

Bir görüntü arayüzden geçerken bir sayı dizisine, o dizi de belirteçlere çevrilir. Bu dersin benzeticisi çevrimi görünür kılmak için ızgarayı doğrudan istem metnine yazar: her hücre bir damga, her damga bir belirteç. Gerçek bir uç noktada ara adımlar farklıdır, fatura aynı yerden çıkar — çözünürlük yükseldikçe belirteç sayısı hücre sayısıyla birlikte büyür.

Aşağıdaki blok altmış kurgu denetim kaydını üretir, altı biçimi kurar ve çok kipli çağrıyı tanımlar. Görünürlük paylarının kipe göre değişmesi benzeticinin tek varsayımıdır.

# BENZETICI -- KURGUDUR. Gercek bir cok kipli uc nokta cagrilmaz. Denetim
# kayitlari, sayac yuzu ve butun kip gorunurlukleri kurgudur.
TOHUM, M32 = 20260218, 0xFFFFFFFF
PENCERE = 240


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


DURUM = ["saglam", "catlak", "muhursuz"]
KAYIT = []
for i in range(60):                     # 60 KURGU saha denetim kaydi
    r = uretec(TOHUM + 900 + i)
    KAYIT.append({"no": 7001 + i,
                  "endeks": "".join(str(int(r() * 10)) for _ in range(5)),
                  "durum": DURUM[ayrik(r(), [0.58, 0.27, 0.15])],
                  "kare": 4 + int(r() * 4), "sure": 18 + int(r() * 13)})
HUCRE = ".:-=+*#"


def izgara(kayit, satir, sutun):
    """Sayac yuzunun KURGU izgarasi: her hucre ayri bir belirtec olarak yazilir."""
    r = uretec(izno(kayit["endeks"] + kayit["durum"]) ^ (satir * 31 + sutun))
    out = []
    for y in range(satir):
        out.append(f"s{y}")
        out += [HUCRE[int(r() * 7)] for _ in range(sutun)]
    return " ".join(out)


def govde(kayit, kip):
    """Ayni kaydin alti girdi bicimi. Tasinan bilgi ayni, uzunluk degil."""
    if kip == "metin":
        return f"endeks {kayit['endeks']} govde {kayit['durum']}"
    if kip == "izgara kaba":
        return izgara(kayit, 4, 10)
    if kip == "izgara ince":
        return izgara(kayit, 8, 20)
    if kip == "izgara kirpik":
        return izgara(kayit, 3, 8)
    if kip == "ses":
        r = uretec(izno(kayit["endeks"]) ^ 7717)
        return " ".join(f"d{int(r() * 9)}" for _ in range(kayit["sure"]))
    return " ".join(f"k{j} " + izgara(kayit, 4, 10)
                    for j in range(kayit["kare"]))          # dizi: kare kare


GORUNUR = {"metin": (1.00, 1.00), "izgara kaba": (0.62, 0.16),
           "izgara ince": (0.93, 0.85), "izgara kirpik": (0.91, 0.80),
           "dizi": (0.88, 0.95), "ses": (0.90, 0.00)}
ONEK = "Sayac yuzunu oku . Endeks ve govde durumunu yaz . Kayit: "
SAYAC = [0]


def cagir_kipli(kayit, kip, tohum=TOHUM):
    """Cok kipli benzetici: her kip her alani kendi gorunurluk payiyla tasir."""
    SAYAC[0] += 1
    bel = belirtecle(ONEK + govde(kayit, kip))
    if len(bel) > PENCERE:
        return {"durum": "baglam_asimi", "giris": len(bel), "cikis": 0}
    if SAYAC[0] % 37 == 0:
        return {"durum": "hiz_siniri", "giris": len(bel), "cikis": 0}
    r = uretec(tohum ^ izno(" ".join(bel)))
    ge, gd = GORUNUR[kip]
    e, d = kayit["endeks"], kayit["durum"]
    if r() >= ge:                       # okunamayan basamak komsusuna kayar
        j = int(r() * 5)
        e = e[:j] + str((int(e[j]) + 1 + int(r() * 8)) % 10) + e[j + 1:]
    if r() >= gd:
        d = DURUM[(DURUM.index(d) + 1 + int(r() * 2)) % 3]
    return {"durum": "tamam", "giris": len(bel), "endeks": e, "govde": d,
            "cikis": len(belirtecle(f"endeks {e} govde {d}"))}


k = KAYIT[0]
print(f"kayit {k['no']} : endeks {k['endeks']} , govde {k['durum']} ,"
      f" {k['kare']} kare , {k['sure']} ses parcasi")
for kip in GORUNUR:
    print(f"  {kip:<14} giris belirteci {len(belirtecle(ONEK + govde(k, kip))):>4}")
print("kaba izgaranin ilk iki satiri:")
print(" ", " ".join(izgara(k, 4, 10).split()[:22]))
uzun = next(x for x in KAYIT if x["kare"] == 7)
for kayit, kip in ((k, "metin"), (k, "izgara kaba"), (k, "izgara ince"),
                   (uzun, "dizi")):
    s = cagir_kipli(kayit, kip)
    bilgi = (f"endeks {s['endeks']} govde {s['govde']}" if s["durum"] == "tamam"
             else f"{s['giris']} belirtec , pencere {PENCERE}")
    print(f"{kayit['no']} {kip:<14} {s['durum']:<13} {bilgi}")
kayit 7001 : endeks 17328 , govde saglam , 5 kare , 21 ses parcasi
  metin          giris belirteci   21
  izgara kaba    giris belirteci   59
  izgara ince    giris belirteci  183
  izgara kirpik  giris belirteci   42
  dizi           giris belirteci  240
  ses            giris belirteci   36
kaba izgaranin ilk iki satiri:
  s0 . * : - = * - : : + s1 = . : + = + : * + .
7001 metin          tamam         endeks 17328 govde saglam
7001 izgara kaba    tamam         endeks 17328 govde catlak
7001 izgara ince    tamam         endeks 17328 govde saglam
7005 dizi           baglam_asimi  330 belirtec , pencere 240

Tek kaydın altı biçimi arasındaki fark 21 belirteç ile 240 belirteç arasında geziniyor. Taşınan bilgi her satırda aynı: beş basamaklı bir endeks ve üç değerli bir gövde durumu. Aradaki on bir katlık fark bilgiden değil, bilginin sarıldığı kaptan geliyor.

Son dört satır iki ayrı başarısızlık gösteriyor. Kaba ızgara endeksi doğru okuyor ama gövde durumunu saglam yerine catlak diye veriyor: çözünürlük mührün ve çatlağın ayırt edilmesine yetmiyor. Yedi kareli 7005 numaralı kayıtta ise okuma hiç gerçekleşmiyor; 330 belirteçlik dizi 240 belirteçlik pencereye girmiyor ve çağrı baglam_asimi ile dönüyor. En zengin girdi, hiç girdi olmayan girdidir.

Altı Biçimin Bedel ve İsabet Tablosu

Altmış kaydın tamamı altı biçimde ayrı ayrı koşturulur. Her satırda toplam giriş belirteci, toplam çıkış belirteci, başarısız çağrı sayısı, iki alanın ayrı isabetleri, kullanılabilir kayıt oranı ve kullanılabilir kayıt başına belirteç basılır. Son sütun ikinci koşumdur: tohum 20260219 ile alınan kullanılabilir kayıt oranı, bir farkın gürültüden ayırt edilip edilemeyeceğini söyler.

def olc(kip, tohum=TOHUM):
    SAYAC[0] = 0
    g = c = hata = ie = idr = kul = 0
    for x in KAYIT:
        s = cagir_kipli(x, kip, tohum)
        g, c = g + s["giris"], c + s["cikis"]
        if s["durum"] != "tamam":
            hata += 1
            continue
        e, d = s["endeks"] == x["endeks"], s["govde"] == x["durum"]
        ie, idr, kul = ie + e, idr + d, kul + (e and d)
    return g, c, hata, ie / 60, idr / 60, kul / 60


print("kip             giris  cikis  basarisiz  endeks   durum  kullanilabilir"
      "  bel/kayit  ikinci kosum")
for kip in GORUNUR:
    a, b = olc(kip), olc(kip, TOHUM + 1)
    bk = f"{a[0] / (a[5] * 60):.1f}" if a[5] else "-"
    print(f"{kip:<14} {a[0]:>6} {a[1]:>6} {a[2]:>10} {a[3]:>7.4f} {a[4]:>7.4f}"
          f" {a[5]:>15.4f} {bk:>10} {b[5]:>13.4f}")
kip             giris  cikis  basarisiz  endeks   durum  kullanilabilir  bel/kayit  ikinci kosum
metin            1260    354          1  0.9833  0.9833          0.9833       21.4        0.9833
izgara kaba      3540    354          1  0.6500  0.1333          0.0833      708.0        0.0833
izgara ince     10980    354          1  0.9500  0.8500          0.8167      224.1        0.7833
izgara kirpik    2520    354          1  0.8833  0.7833          0.7000       60.0        0.6833
dizi            16155    150         35  0.3667  0.4167          0.3667      734.3        0.2833
ses              2300    354          1  0.8833  0.0000          0.0000          -        0.0000

Çıkış belirteci sütunu altı satırda da aynı: 354. Yanıt her biçimde altı belirteçlik tek bir kayıttır. Değişen şey yalnız girdidir ve bu, çok kipli bir arayüzün faturasının hangi tarafta şiştiğini gösteren en sade satırdır. Metin özetinin toplam bedeli 1260 belirteç; ince ızgaranın bedeli 10980, yani sekiz buçuk katı. Aynı bilgi, aynı yanıt.

Birinci satır bir sınır durumudur ve dürüstçe okunmalıdır. Metin özeti hem en ucuz hem en isabetlidir, ama o özeti birisi zaten okumuş olmalıdır. Kullanılabilir kayıt oranının 0,9833’te kalmasının sebebi de okuma değil, otuz yedinci çağrıda gelen hız sınırı reddidir. Bu satır bir kip seçeneği değil, işin insan tarafında çözülmüş hâlidir; tablodaki işlevi diğer beş satırın ne kadarını geri kazanmaya çalıştığını göstermektir.

Kırpma, Kör Kip ve Pencereye Sığmayan Dizi

Kaba ızgara ile ince ızgara arasındaki fark, çözünürlüğün hangi alanı kurtardığını söylüyor. Endeks isabeti 0,6500’den 0,9500’e çıkıyor, ama asıl sıçrama gövde durumundadır: 0,1333’ten 0,8500’e. Bir çatlak beş basamaklı bir sayıdan daha ince bir ayrıntıdır ve kaba ızgarada görünmez. Kullanılabilir kayıt bu iki alanın çarpımı gibi davranıyor ve 0,0833’ten 0,8167’ye çıkıyor. Bedel dörtte üç oranında artıyor: 3540 belirteçten 10980 belirtece.

Kırpık ızgara satırı bu dersin asıl bulgusudur. Kırpma çözünürlüğü değil alanı küçültür: aynı ince ayrıntı düzeyi, sayacın yalnız endeks ve mühür bölgesine uygulanır. Sonuç 2520 belirteç ve 0,7000 kullanılabilir kayıt. İnce ızgaranın kullanılabilir kayıtlarının yaklaşık yüzde seksen altısını, onun dörtte biri kadar belirteçle veriyor. Kullanılabilir kayıt başına bedel 224,1’den 60,0’a düşüyor. İki koşum sütunu bu okumayı destekliyor: ince ızgara 0,8167 ve 0,7833, kırpık ızgara 0,7000 ve 0,6833 veriyor, yani aradaki 0,1167’lik fark koşum farkından büyüktür ve gerçektir. Gerçek olan şey ince ızgaranın üstünlüğüdür; tartışmalı olan, o üstünlüğün kayıt başına 164 belirtece değip değmediğidir.

Dizi satırı en yüksek görünürlüğe sahip biçimdir ve tablonun en kötü satırlarından biridir. Kare kare bakmak gövde durumunu 0,95 payla görünür kılar, çünkü hareket çatlağı ele verir. Ne var ki altmış kaydın otuz dördü altı ya da yedi kare taşıyor ve 240 belirteçlik pencereye girmiyor. Başarısız çağrı sayısı 35 (otuz dört bağlam aşımı ve bir hız sınırı), kullanılabilir kayıt 0,3667, toplam bedel 16155 belirteçle tablonun en yükseği. Görünürlüğü en yüksek kip, teslim ettiği kayıt bakımından kırpık ızgaranın yarısı kadar. Bu, bu müfredatın ikinci iddiasının çok kipli girdideki karşılığıdır: eklenen zenginlik ölçüyü düşürebilir.

Ses satırı bir başka sınırı gösteriyor. Endeks isabeti 0,8833 ile ince ızgaraya yakın, gövde durumu isabeti 0,0000. Ses kaydı endeksi okuyan bir insanı taşıyor, çatlağı taşımıyor. Kullanılabilir kayıt bu yüzden sıfırdır ve kayıt başına bedel hesaplanamaz. Bir kipin bir alanı taşımaması ortalama bir isabet sayısında görünmez; ancak alanlar ayrı ayrı sayıldığında ortaya çıkar. Bir kip seçimi bir çözünürlük kararı değil, hangi alanların taşınacağı kararıdır.

Özet

  • Çok kipli bir arayüzün faturası yine belirteçle yazılır: ızgara hücresi, ses parçası ve dizi karesi girdi belirtecine dönüşür, çıkış belirteci altı biçimde de 354’te sabit kalır.
  • Aynı kaydın bedeli metin özetinde 21, kırpık ızgarada 42, kaba ızgarada 59, ince ızgarada 183 belirteç; taşınan bilgi değişmez, kap değişir.
  • Çözünürlük artışı gövde durumu isabetini 0,1333’ten 0,8500’e çıkarır; ince ayrıntı kaba ızgarada görünmez ve kullanılabilir kayıt 0,0833’te kalır.
  • Kırpma çözünürlüğü değil alanı küçültür: ince ızgaranın kullanılabilir kayıtlarının yüzde seksen altısını dörtte bir belirteçle verir, kayıt başına bedel 224,1’den 60,0’a düşer.
  • Dizi biçimi en yüksek görünürlüğe sahiptir ama altmış kaydın otuz dördü pencereye sığmadığı için 0,3667’de kalır ve 16155 belirteçle en pahalı satırdır.
  • Ses kipi endeksi 0,8833 ile okur, gövde durumuna kördür ve kullanılabilir kayıt üretmez; bir kipin taşımadığı alan ancak alanlar ayrı sayıldığında görünür.

Sonraki Adım

Bu derste girdi hep bir kayıt hakkında gönderildi ve model onu okudu. Sorulmayan soru şu: altmış kaydın hangisinin şu anki talebe benzediğini bulmak gerekseydi, hepsini isteme koymak mümkün olmadığına göre benzerlik neyin üzerinden hesaplanırdı. Arayüz bunun için ayrı bir yüzey sunar: metni bir sayı dizisine çeviren ve yanıt olarak metin değil vektör döndüren bir uç nokta. Sonraki ders bu yüzeyi ölçer ve tek bir karara odaklanır: vektörün kaç boyutlu olacağı. Boyut düştükçe saklanan sayı ve karşılaştırma maliyeti düşer, komşuluk isabeti de düşer; ikisinin hangi noktada ayrıştığı sayılı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