Okullar için Robotik ve Mühendislik · anaokulundan liseye

1. ünite / 10 · 4 saat

Tokenlar, bağlam penceresi ve maliyet

Model metni değil token görür. BPE nasıl çalışır, Türkçe neden daha çok token tutar, pencere ve fatura neden tokenla ölçülür.

Bu ünitenin sonunda

  • Bir dil modelinin bir sonraki tokenı tahmin ederek metin ürettiğini açıklamak
  • BPE birleştirmelerini elle birkaç adım uygulamak
  • Türkçe ve İngilizce metinlerin token sayısını karşılaştırmak
  • Bağlam penceresi, giriş ve çıkış tokenı ile maliyet arasındaki ilişkiyi hesaplamak

Ders notları

Büyük dil modeli (LLM) bir metnin devamını tahmin eden bir sinir ağıdır. Metni harf harf ya da kelime kelime değil token token işler: sık görülen kelimeler tek token, seyrek kelimeler birkaç parça olur. Model her adımda sözlükteki tüm tokenlar için bir olasılık hesaplar, birini seçer, ekler ve yeniden hesaplar.

BPE: tokenlar nasıl doğar

Byte Pair Encoding, derlemi önce karakterlere (gerçek sistemlerde baytlara) böler. Sonra en sık yan yana gelen iki parçayı yeni bir parça olarak birleştirir ve sayımı tekrarlar. Birkaç bin birleştirmeden sonra "motor", "sensör" gibi kelimeler tek parçaya iner. Yeni bir metin kodlanırken öğrenilen birleştirmeler aynı sırayla uygulanır.

  • Türkçe sondan eklemeli bir dildir: "bağlayamadıklarımızdan" gibi bir kelime çoğu sözlükte birkaç tokena bölünür. Aynı anlamı taşıyan Türkçe metin genellikle İngilizcesinden daha çok token tutar.
  • Ş, ğ, ı gibi harfler UTF-8'de iki bayttır; bayt düzeyindeki bir tokenlaştırıcı onları da birleştirmeyi öğrenmek zorundadır.
  • Sayılar, kod ve boşluklar da token tüketir; uzun bir JSON şeması prompta sanıldığından pahalıya gelir.

Bağlam penceresi ve fatura

Modelin tek istekte gördüğü her şey (sistem promptu, sohbet geçmişi, belgeler, araç tanımları ve üreteceği cevap) bağlam penceresine sığmak zorundadır. API faturası da tokenla kesilir: giriş ve çıkış tokenlarının fiyatı ayrıdır, çıkış genellikle birkaç kat pahalıdır.

maliyet = giriş_tokenı × giriş_fiyatı + çıkış_tokenı × çıkış_fiyatı

Token sayısını tahmin etmek yerine ölç: Anthropic SDK'daki count_tokens çağrısı isteği göndermeden sayar. Bu derste simülasyonlar tarayıcıda çalışan küçük bir BPE kullanır; gerçek modelin sözlüğü çok daha büyüktür ama mantık aynıdır.

Simülasyon

Öğretim modeli: bu sayfadaki simülasyonlar gerçek bir dil modeli değildir. Küçük, deterministik, tarayıcıda çalışan modellerdir; kavramı göstermek için yazıldılar. Site hiçbir dış LLM servisine istek göndermez.

BPE oyun alanı: tokenlar nasıl doğar

Byte Pair Encoding küçük bir derlemde en sık yan yana gelen iki parçayı birleştirir, sonra yeniden sayar. Birleştirme sayısını artır, birleştirme listesini ve kendi cümlenin tokenlara bölünüşünü izle. Türkçe ve İngilizce derlemi karşılaştır ya da kendi derlemini yaz.

Dikkat yayları 3B: "o" kime bakıyor?

Altı tokenlık bir cümlede seçilen sorgu tokenından her tokena bir yay uzanır; yayın yüksekliği ve kalınlığı dikkat ağırlığıdır (softmax, toplamı 1). Son kelimeyi "güçlüydü" yap, dikkat kutudan robota kayar; τ'yu büyüt, yaylar eşitlenir. Bir tokena dokunarak onu sorgu yap.

Kendin dene

BPE oyun alanında birleştirmeyi 0'dan 40'a çıkar ve aynı cümlenin token sayısını izle. Türkçe ve İngilizce derlem arasında geçiş yap: Türkçe cümlen İngilizce derlemle eğitilmiş sözlükte kaç token tutuyor? Son olarak "Kendi derlemim"e kendi alanından on kelime yaz ve hangi birleştirmelerin ilk öğrenildiğine bak.

Kod

Bunları kendi bilgisayarında çalıştır. Anahtar ANTHROPIC_API_KEY ortam değişkeninden okunur; koda asla yazma.

Python: token say, bağlam bütçesini kontrol et, sonra iste
import anthropic

# Anahtar ANTHROPIC_API_KEY ortam değişkeninden okunur; koda asla yazma.
client = anthropic.Anthropic()
MODEL = "claude-sonnet-5-5"

notes = open("ders_notlari.txt", encoding="utf-8").read()
messages = [{"role": "user", "content": f"<notlar>{notes}</notlar>\nBu notları beş maddede özetle."}]

# 1) İstek göndermeden önce giriş tokenlarını say
count = client.messages.count_tokens(model=MODEL, messages=messages)
print("giriş tokenı:", count.input_tokens)

BUDGET = 50_000  # bu uygulama için kendi koyduğumuz üst sınır
if count.input_tokens > BUDGET:
    raise SystemExit("Notlar çok uzun: önce parçala ya da özetle.")

# 2) İsteği gönder; max_tokens çıkış için ayrılan tavandır
response = client.messages.create(model=MODEL, max_tokens=1024, messages=messages)
for block in response.content:
    if block.type == "text":
        print(block.text)

# 3) Faturayı belirleyen sayılar yanıtın usage alanında
print(response.usage.input_tokens, response.usage.output_tokens, response.stop_reason)
JavaScript: bir BPE birleştirme adımı (Node'da çalışır)
// Her kelime harflerine bölünmüş bir dizi; sonuna kelime sonu işareti eklenir
const words = ['robot', 'robotik', 'roket', 'rota'].map((w) => [...w, '</w>'])

function mostFrequentPair(words) {
  const counts = new Map()
  for (const w of words)
    for (let i = 0; i < w.length - 1; i++) {
      const key = w[i] + ' ' + w[i + 1]
      counts.set(key, (counts.get(key) ?? 0) + 1)
    }
  // En sık çift; eşitlikte ilk görülen kazanır (deterministik)
  return [...counts].reduce((best, cur) => (cur[1] > best[1] ? cur : best))
}

function merge(words, [a, b]) {
  return words.map((w) => {
    const out = []
    for (let i = 0; i < w.length; i++) {
      if (w[i] === a && w[i + 1] === b) { out.push(a + b); i++ } else out.push(w[i])
    }
    return out
  })
}

let current = words
for (let step = 1; step <= 4; step++) {
  const [pair, n] = mostFrequentPair(current)
  current = merge(current, pair.split(' '))
  console.log(`${step}. ${pair} -> ${pair.replace(' ', '')} (${n}x)`, current.map((w) => w.join('|')))
}

Sık yapılan hatalar

  • Token sayısını kelime sayısı sanmak: Türkçede bir kelime çoğu zaman birkaç tokendır.
  • Maliyet hesabında yalnız giriş tokenını saymak: çıkış tokenı genellikle çok daha pahalıdır.
  • Bağlam penceresine cevap için yer bırakmamak: max_tokens da pencereden pay alır.
  • Farklı modellerin aynı tokenlaştırıcıyı kullandığını varsaymak: model değişince sayımı yeniden ölç.

Yazılım mühendisliği bağlantısı

Token sayısı bir kaynak bütçesidir; bellek ve süre gibi ölçülür ve izlenir.

  • Her isteğin giriş ve çıkış token sayısını kayıt altına al (API cevabındaki usage alanı); maliyet ve gecikme raporu buradan çıkar.
  • Prompt şablonlarını sürüm denetiminde tut ve her değişiklikte token sayısını ölçen küçük bir test yaz: şablon sessizce iki katına çıkmasın.

Kendini sına

  1. BPE eğitiminde her adımda ne yapılır?

  2. Aynı anlamdaki Türkçe bir paragraf İngilizce eğitilmiş bir tokenlaştırıcıda neden genellikle daha çok token tutar?

  3. Bir istekte 6000 giriş ve 400 çıkış tokenı var; fiyatlar milyon token başına giriş 2 $, çıkış 10 $. İstek kaç dolar tutar?

  4. Bağlam penceresine hangisi dahil değildir?

Macademia'da ilgili

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç