---
title: Belirteçler
source: 'https://academia.sh/tr/kurslar/yz-muhendisligine-giris/belirtecler'
course: 'Yapay Zekâ Mühendisliğine Giriş'
language: tr
updated: '2026-08-17T18:06:36+00:00'
license: 'CC BY-SA 4.0'
---

# Belirteçler

Metnin modele giriş biriminin bir bedel birimi olarak ölçülmesi: 300 kurgu destek talebi 4.674 sözcük ve 8.334 belirteç ediyor, sözcük başına 1,7831; ek parçaları düşülünce 6.176 belirteç kalıyor ve eklerin payı 0,2589 çıkıyor. Altı kök yalın hâlde 6 belirteç, çoğul ve iyelik ekleri bindikçe 30 belirteç oluyor. Çıplak çağrı talep başına 27,78 belirteç ve 0,9722 alan isabeti verirken sık parçaları atan düzenek 0,50 eşiğinde 11,68 belirteçle aynı isabeti koruyor, 0,30 eşiğinde 6,23 belirtece iniyor ama isabet 0,8611'e düşüyor.

Alan ve Roller konusu dört derste modele dışarıdan baktı: kimin neyi kurduğu, eğiten ile kullanan
yaklaşımın elinde kaç ayar olduğu, aynı girdinin iki koşumda ne verdiği ve hangi iddianın bir
sınamaya bağlanabildiği. Dördünde de model bir kutuydu ve kutunun kapağı hiç açılmadı. İçeride ne
olduğu, hangi birimle çalıştığı ve sınırının nereden geldiği hiç sorulmadı.

Bu konu o soruyla açılır ve en alttan başlar. Bir dil modeline metin göndermek, aslında metni
göndermek değildir: metin önce parçalara bölünür, her parça bir numaraya çevrilir ve model yalnız o
numara dizisini görür. Bu parçaya **belirteç** (token) denir. Belirteç bir teknik ayrıntı değil,
bu müfredatın **bedel birimidir**: pencere belirteçle ölçülür, ücret belirteçle sayılır, gecikme
üretilen belirteç sayısıyla büyür. Kursun kuralı burada ilk kez işler — verilmiş bir bileşen
**yüzeyinden** ölçülür ve bu dersin ölçtüğü yüzey belirteç sayısıdır.

- **DL1.** Destek talepleri **kurgudur**: ders içinde üretilir, tohum 20260218, hiçbir kaynak
  sistemden gelmez. Küme 300 kısa Türkçe taleptir.
- **DL2.** Model bir **benzeticidir**: ders içinde standart kitaplıkla yazılır, gerçek bir model uç
  noktası çağrılmaz. Taşıdığı yüzey belirteçleme, belirteç sayımı, bağlam penceresi, durdurma
  koşulu, en büyük çıktı uzunluğu ve tohuma bağlı belirsizliktir.
- **DL3.** Belirteçleyici de kurgudur: 177 parçalık bir sözlük ve soldan en uzun eşleşme.
  Belirteçleme yordamı, sözlük ve sözlük dışı kavramları M27'nin doğal dil işleme kursunda ölçüldü;
  yordam burada **tekrarlanmaz**, yalnız bedel birimi olarak okunur.
- **DL4.** Sözlükte karşılığı olmayan dizi tek karakterlere iner. Bu benzeticide sözlük dışı
  yoktur; bilinmeyenin bedeli belirteç sayısı olarak ödenir.
- **DL5.** Her talebin bir **alan üçlüsü** vardır: nesne, durum, istek. Üçlü kurgunun kendisinden
  bilinir; okuyucu yordam belirteç dizisinde ilk eşleşen kökü alır.
- **DL6.** Ölçüt her satırda aynıdır: **talep başına belirteç** (küçük iyi) ve **alan isabeti**
  (büyük iyi).
- **DL7.** **Çıplak çağrı** bu derste talebin olduğu gibi gönderilmesidir; düzenek, gönderilmeden
  önce metne uygulanan her işlemdir.
- **DL8.** Giriş belirteci koşumdan bağımsızdır: aynı metin her koşumda aynı sayıyı verir. Çıkış
  uzunluğu bağımsız değildir.

## Metnin Modele Giriş Birimi

Benzeticinin belirteçleyicisi küçük bir parça sözlüğü taşır: alanın sık kökleri, sık ekler ve tek
karakterler. Bir sözcük soldan taranır, her adımda sözlükte bulunan en uzun parça alınır, hiçbiri
bulunmazsa tek karakter alınır. Noktalama kendi başına bir belirteçtir.

```python
# BENZETICI — bu kursta model, ders icinde standart kitaplikla yazilmis bir
# benzeticidir; gercek bir model uc noktasi cagrilmaz. Destek talepleri KURGUDUR
# ve ders icinde uretilir, tohum 20260218.
TOHUM, M32, TALEP = 20260218, 0xFFFFFFFF, 300

KOK = """sayac kapak muhur vana abone adres fatura tarife odeme borc ariza kod okuma
olcum servis ekip ziyaret kayit talep destek hat bakim birim gun ay yil saat numara
bilgi islem sistem hata sonuc deger endeks sozlesme kampanya indirim gecikme faiz
itiraz basvuru sikayet cevap bekle gonder geri ac kapa oku yaz bul bak gel ver yap
don calis bozuk kirik eksik normal yuksek dusuk yeni eski acik kapali lutfen merhaba
tesekkur iyi rica eder mumkun tekrar hala durum konu ile icin ve bir bu ne var yok
ama kadar sonra once ben biz siz""".split()
EK = """lari leri lar ler nin nun den dan de da te ta iniz unuz imiz umuz in un im um
si su li lu di du ti tu miz niz yor mis dir tir cek cak ki ya ye yi yu ma me ni nu
la le i u e a""".split()
PARCA = set(KOK) | set(EK) | set("abcdefghijklmnopqrstuvwxyz0123456789")
NOKTA = ".,:;?-/"


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 parcala(s):
    p, i = [], 0
    while i < len(s):
        for j in range(min(len(s), i + 9), i, -1):
            if s[i:j] in PARCA:
                p.append(s[i:j])
                i = j
                break
        else:
            p.append(s[i])
            i += 1
    return p


def belirtecle(metin):
    b, g = [], ""
    for c in metin.lower():
        if c.isalnum():
            g += c
        else:
            if g:
                b += parcala(g)
                g = ""
            if c in NOKTA:
                b.append(c)
    return b + (parcala(g) if g else [])


NESNE = {"fatura": ("faturamizin", ["yuksek", "yuksek", "eksik"]),
         "tarife": ("tarifemizin", ["yuksek", "eski", "yuksek"]),
         "endeks": ("endeksimizin", ["yuksek", "dusuk", "eksik"]),
         "sayac": ("sayacimizin", ["bozuk", "kirik", "eski"]),
         "kapak": ("kapaginin", ["kirik", "eksik", "acik"]),
         "vana": ("vananin", ["kapali", "bozuk", "acik"]),
         "hat": ("hattimizin", ["kapali", "bozuk", "eski"]),
         "odeme": ("odememizin", ["eksik", "gecikmeli", "yuksek"])}
NESNE_AGIRLIK = [0.20, 0.14, 0.12, 0.14, 0.10, 0.09, 0.11, 0.10]
ISTEK = {"gonder": "ekip gonderin", "ac": "kayit acin",
         "ver": "bilgi verin", "don": "geri donun"}
KALIP = ["{a} {n} durumu {d} ve bu konuda hala bir cevap yok. {i} lutfen. {k}.",
         "{a} {n} durumu {d} ve tekrar yazdim ama sonuc yok. {i} lutfen. {k}.",
         "{a} {n} durumu {d} ve bu ay ikinci basvurum. {i} lutfen. {k}."]
ACILIS = ["Merhaba,", "Iyi gunler,", "Merhaba,", "Iyi gunler,"]
KAPANIS = ["Tesekkur ederim", "Rica ederim", "Tesekkur ederim", "Iyi gunler"]
NESNE_AD, ISTEK_KOK = list(NESNE), list(ISTEK)

VERI = []
for i in range(TALEP):
    r = uretec(TOHUM + i)
    n = NESNE_AD[ayrik(r(), NESNE_AGIRLIK)]
    uzun_ad, durumlar = NESNE[n]
    d = durumlar[int(r() * 3)]
    k = ISTEK_KOK[int(r() * 4)]
    metin = KALIP[int(r() * 3)].format(a=ACILIS[int(r() * 4)], n=uzun_ad, d=d,
                                       i=ISTEK[k], k=KAPANIS[int(r() * 4)])
    VERI.append({"metin": metin, "alan": (n, belirtecle(d)[0], k)})

print(f"{TALEP} kurgu destek talebi, benzeticinin sozlugu {len(PARCA)} parca")
for i in (0, 2, 7):
    b = belirtecle(VERI[i]["metin"])
    print(f"\n{VERI[i]['metin']}")
    print(f"  {len(VERI[i]['metin'].split())} sozcuk, {len(b)} belirtec")
    print("  " + " ".join(b[:12]) + " ...")
```

```
300 kurgu destek talebi, benzeticinin sozlugu 177 parca

Iyi gunler, odememizin durumu gecikmeli ve tekrar yazdim ama sonuc yok. geri donun lutfen. Iyi gunler.
  16 sozcuk, 29 belirtec
  iyi gun ler , odeme miz in durum u gecikme li ve ...

Merhaba, tarifemizin durumu yuksek ve bu konuda hala bir cevap yok. kayit acin lutfen. Iyi gunler.
  16 sozcuk, 26 belirtec
  merhaba , tarife miz in durum u yuksek ve bu konu da ...

Iyi gunler, vananin durumu bozuk ve bu konuda hala bir cevap yok. ekip gonderin lutfen. Tesekkur ederim.
  17 sozcuk, 27 belirtec
  iyi gun ler , vana nin durum u bozuk ve bu konu ...
```

On altı sözcüklük bir talep 29 belirteç ediyor. Fark tek yerden gelmiyor: noktalama ayrı sayılıyor,
`odememizin` üç parçaya bölünüyor, `gecikmeli` ikiye. Bir metnin uzunluğunu sözcükle tahmin etmek,
bu birimde sistematik olarak eksik saymaktır.

## Eklemeli Yapının Bedeli

Türkçe eklemeli bir dildir: bir köke ardışık ekler binerek tek sözcükte bir cümle kurulabilir. Bu,
okuyan için kısalık, belirteç sayan için bedeldir. Altı kök altı çekim basamağında ölçülür.

```python
BICIM = {
    "sayac": "sayac sayaclar sayacimiz sayacimizin sayaclarimizin sayaclarimizdaki",
    "kapak": "kapak kapaklar kapagimiz kapaginin kapaklarimizin kapaklarimizdaki",
    "fatura": "fatura faturalar faturamiz faturamizin faturalarimizin faturalarimizdaki",
    "odeme": "odeme odemeler odememiz odememizin odemelerimizin odemelerimizdeki",
    "tarife": "tarife tarifeler tarifemiz tarifemizin tarifelerimizin tarifelerimizdeki",
    "abone": "abone aboneler abonemiz abonemizin abonelerimizin abonelerimizdeki",
}
BASLIK = ("yalin", "cogul", "iyel", "iyel+", "cog+", "cog++")
print(f"{'kok':<8} " + " ".join(f"{b:>5}" for b in BASLIK))
top = [0] * 6
for k, s in BICIM.items():
    n = [len(belirtecle(b)) for b in s.split()]
    top = [a + b for a, b in zip(top, n)]
    print(f"{k:<8} " + " ".join(f"{x:>5}" for x in n))
print(f"{'toplam':<8} " + " ".join(f"{x:>5}" for x in top))

sozcuk = sum(len(x["metin"].split()) for x in VERI)
bel = sum(len(belirtecle(x["metin"])) for x in VERI)
kok_bel = sum(len([b for b in belirtecle(x["metin"]) if b not in EK]) for x in VERI)
print(f"\n{TALEP} talep: {sozcuk} sozcuk, {bel} belirtec, oran {bel / sozcuk:.4f}")
print(f"ek parcalari dusulunce {kok_bel} belirtec, oran {kok_bel / sozcuk:.4f}")
print(f"eklerin payi {(bel - kok_bel) / bel:.4f}")
```

```
kok      yalin cogul  iyel iyel+  cog+ cog++
sayac        1     2     2     3     4     5
kapak        1     2     3     4     4     5
fatura       1     2     2     3     4     5
odeme        1     2     2     3     4     5
tarife       1     2     2     3     4     5
abone        1     2     2     3     4     5
toplam       6    12    13    19    24    30

300 talep: 4674 sozcuk, 8334 belirtec, oran 1.7831
ek parcalari dusulunce 6176 belirtec, oran 1.3214
eklerin payi 0.2589
```

Altı kök yalın hâlde 6 belirteç, tam çekimli hâlde 30 belirteç: aynı altı kavram beş katına
çıkıyor. Sözcük sayısı hiç değişmedi, değişen tek şey eklerdir. `kapak` satırı bir ayrıntıyı da
gösteriyor: `kapagimiz` biçiminde ünsüz yumuşadığı için kök artık sözlükteki `kapak` parçasıyla
eşleşmiyor ve bir belirteç fazla ödeniyor.

Küme düzeyinde oran 1,7831'dir: her sözcük ortalama 1,78 belirteç ediyor. Ek parçaları dizinden
düşüldüğünde 8.334 belirteç 6.176'ya iniyor; **eklerin payı 0,2589**. Aynı bilgiyi eklemeli
olmayan bir dilde yazmak bu payı büyük ölçüde silerdi. Bu, dil hakkında bir yargı değil, bir
**bütçe bilgisidir**: aynı pencere Türkçe metnin daha azını alır.

## Aynı Bilgi Kısaltıldığında

Talebin taşıdığı bilgi üç alandır: nesne, durum, istek. Nezaket kalıpları, bağlaçlar ve
tekrar cümleleri bu üçünü değiştirmez ama belirteç öder. Bir düzenek kurulabilir: **belge
sıklığı** bir eşiği aşan parçaları at. Sık geçen parça ayırt etmez, seyrek geçen eder.

```python
BELGE = [belirtecle(x["metin"]) for x in VERI]
df = {}
for b in BELGE:
    for t in set(b):
        df[t] = df.get(t, 0) + 1 / TALEP
DURUM_KOK = {belirtecle(d)[0] for _, ds in NESNE.values() for d in ds}


def alan_oku(b):
    def ilk(kume):
        return next((t for t in b if t in kume), None)
    return (ilk(set(NESNE_AD)), ilk(DURUM_KOK), ilk(set(ISTEK_KOK)))


def kisalt(b, esik):
    return [t for t in b if df[t] < esik]


def cagir(belirtec, tohum, en_buyuk=40):
    """Benzetici adim adim uretir; durdurma kosuluna ya da en buyuk cikti
    uzunluguna varinca durur. Cikis uzunlugu tohuma baglidir."""
    r, taban, y = uretec(tohum + len(belirtec)), 6 + len(belirtec) // 3, 0
    while y < en_buyuk and (y < taban or r() >= 0.32):
        y += 1
    return {"giris": len(belirtec), "cikis": y,
            "durdurma": "sinir" if y == en_buyuk else "kosul"}


def olc(ad, bl):
    dogru = sum(sum(a == b for a, b in zip(alan_oku(b), VERI[i]["alan"]))
                for i, b in enumerate(bl))
    g = sum(len(b) for b in bl)
    print(f"{ad:<26} {g:>6} {g / TALEP:>8.2f} {dogru / (3 * TALEP):>8.4f}")


print(f"{'duzenek':<26} {'belirtec':>6} {'talep':>8} {'alan':>8}")
olc("ciplak cagri", BELGE)
olc("sik parcayi at (0,50)", [kisalt(b, 0.50) for b in BELGE])
olc("sik parcayi at (0,30)", [kisalt(b, 0.30) for b in BELGE])

k = kisalt(BELGE[2], 0.50)
print("\n" + " ".join(BELGE[2]))
print(" ".join(k))
for t in (TOHUM, TOHUM + 1):
    y = cagir(k, t)
    print(f"tohum {t}  giris {y['giris']} belirtec  cikis {y['cikis']} belirtec"
          f"  durdurma {y['durdurma']}")
```

```
duzenek                    belirtec    talep     alan
ciplak cagri                 8334    27.78   0.9722
sik parcayi at (0,50)        3505    11.68   0.9722
sik parcayi at (0,30)        1868     6.23   0.8611

merhaba , tarife miz in durum u yuksek ve bu konu da hala bir cevap yok . kayit ac in lutfen . iyi gun ler .
merhaba tarife yuksek konu da hala bir cevap kayit ac
tohum 20260218  giris 10 belirtec  cikis 11 belirtec  durdurma kosul
tohum 20260219  giris 10 belirtec  cikis 10 belirtec  durdurma kosul
```

Üçlü buradan okunur. **Çıplak çağrı** talep başına 27,78 belirteç harcar ve alan isabeti
0,9722'dir. **Düzenek** 0,50 eşiğinde talep başına 11,68 belirtece iner — kazanç 0,5794 — ve
isabeti **hiç düşürmez**: atılan on altı parçanın tamamı nezaket kalıbı, bağlaç ya da çekim ekidir.
**Bedel** bir ön işleme adımı, bir sıklık tablosu ve okunabilirliğin kaybıdır; sayı düşmediği için
bu düzenek işe yarar.

Eşik 0,30'a çekildiğinde tablo döner. Belirteç 6,23'e iner, kazanç 0,7759 olur, ama isabet
0,8611'e düşer: `yuksek` durumunun belge sıklığı 0,3333'tür ve eşiğin üstünde kaldığı için atılır.
En sık durum aynı zamanda en çok sorulan durumdur. **Düzenek eklemek her zaman iyileştirmez**, ve
iyileştirip iyileştirmediği ancak bedeliyle birlikte yazıldığında görülür.

Çıplak çağrının 0,9722'de kalması da bir bulgudur. Kaçırılan 25 alanın tamamı `kapak` nesnesidir:
`kapaginin` biçiminde kök yumuşadığı için belirteç dizisinde `kapak` parçası hiç görünmez. Eklemeli
yapı yalnız sayıyı büyütmez, kökü belirteç akışından **silebilir** de.

Son iki satır belirsizliği ayırır. Aynı istem iki ayrı tohumla çağrıldığında giriş belirteci ikisinde
de 10'dur — belirteçleme bir yordamdır, koşumdan bağımsızdır. Çıkış 11 ve 10'dur ve ikisi de durdurma
koşuluyla bitmiştir. Modelin yüzeyinde sayılabilen iki büyüklükten biri koşumdan bağımsızdır, öteki
değildir; bütçe hesabı bu ayrımın üstüne kurulur.

## Özet

- Belirteç metnin modele giriş birimidir ve bu müfredatın bedel birimidir. Benzetici 177 parçalık
  bir sözlükle soldan en uzun eşleşmeyi uygular; talepler kurgudur, tohum 20260218.
- Aynı 300 talep 4.674 sözcük ve 8.334 belirteç eder: sözcük başına 1,7831. Sözcük sayısıyla
  yapılan tahmin bu birimde sistematik olarak eksik sayar.
- Eklemeli yapı ölçülebilir bir bedeldir: altı kök yalın hâlde 6, tam çekimli hâlde 30 belirteç
  eder ve küme düzeyinde eklerin payı 0,2589'dur.
- Çıplak çağrı talep başına 27,78 belirteç ve 0,9722 alan isabeti verir. Sık parçaları 0,50
  eşiğiyle atan düzenek 11,68 belirtece iner ve isabeti korur; 0,30 eşiği 6,23 belirtece iner ama
  isabeti 0,8611'e düşürür.
- Giriş belirteci koşumdan bağımsızdır, çıkış uzunluğu değildir: aynı istem iki tohumda 10 giriş,
  11 ve 10 çıkış belirteci verir.

## Sonraki Adım

Metin belirteçlere bölündü ve her belirtecin bir bedeli olduğu sayıldı. Ortada hâlâ yalnız bir
dizi var: modelin bu diziyle ne yaptığı, bir belirtecin yüz belirteç öncesindeki bir başkasıyla
nasıl ilişkilendirildiği sorulmadı. Sonraki ders **dikkat** mekanizmasının niçin uzak bağlamı
kullanabildiğini kavramsal düzeyde ele alır ve bunun bedelini sayar: bağlam uzadıkça karşılaştırma
sayısı nasıl büyüyor, ve sabit bir pencereyle yetinen ucuz bir yordam hangi uzaklıkta çöküyor.
