---
title: 'Çok Kipli Girdi'
source: 'https://academia.sh/tr/kurslar/model-apileri/cok-kipli-girdi'
course: "Model API'leri ile Uygulama Geliştirme"
language: tr
updated: '2026-08-17T18:06:37+00:00'
license: 'CC BY-SA 4.0'
---

# Ç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.

Ö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.

```python
# 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.

```python
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.
