Yazılarımız

Veri Akademi

TRANSFORMER VE LLM NEDİR? TOKENİZATİON, ATTENTİON VE INFERENCE SÜRECİ

Bir metin yazıyorsunuz ve model saniyeler içinde devamını getiriyor; bir kod parçasını paylaşıyorsunuz ve hatayı bulup düzeltme önerisi sunuyor. Bu “sihir” gibi görünen deneyimin arkasında, aslında oldukça düzenli bir matematik ve mühendislik zinciri var: Transformer mimarisi, bunun üstüne inşa edilen LLM’ler (Large Language Models) ve bu modellerin metni işleme biçimi.

Bu yazıda, “Transformer ve LLM nedir?” sorusunu tek bir tanımdan ibaret bırakmadan, üç kritik adımı birlikte ele alacağız: tokenization (metnin sayılara çevrilmesi), attention (bağlamın seçilmesi) ve inference (çıktının üretilmesi). Amaç, kavramları ezberletmek değil; bileşenlerin nasıl birbirini tamamladığını zihninizde netleştirmek.

Bir LLM, metni doğrudan “kelime” olarak görmez; onu token’lara böler, embedding’lere dönüştürür, Transformer katmanlarında bağlamı hesaplar ve en sonunda bir sonraki token olasılıklarını üretir. Burada, eğitim aşamasını yalnızca gerektiği kadar anıp, özellikle çalışma anındaki süreç (inference) üzerinde duracağız.

Sembolik kelimelerden vektör uzayına uzanan akış, katmanlar boyunca bağlamın taşınmasını anlatan konsept

Transformer nedir? Temel fikir: bağlamı paralel işlemek

Transformer, sıralı verilerde (metin gibi) bağlam ilişkilerini yakalamak için tasarlanmış bir mimaridir. Daha eski yaklaşımlarda (RNN/LSTM) bilgi adım adım taşınırken, Transformer “hangi parçanın hangisiyle ne kadar ilişkili olduğunu” aynı anda hesaplayabilir. Bu paralellik, hem eğitimde hem de inference sırasında verimliliği artıran önemli bir kırılımdır.

Transformer’ın asıl başarısı, “bağlamı tek bir özet vektöre sıkıştırmak” yerine, her token’ın diğer token’larla ilişkisini katman katman güncellemesidir. Böylece model, bir cümlenin başındaki özne ile sonundaki yüklemi, arada uzun bir mesafe olsa bile doğrudan ilişkilendirebilir.

Katmanlar, embedding ve boyut kavramı

Metin token’lara ayrıldıktan sonra her token bir embedding vektörüne dönüşür. Embedding boyutu (ör. 768, 4096), modelin temsil kapasitesiyle ilişkilidir: daha büyük boyut, daha zengin temsil demek olabilir; ama bellek ve hız maliyeti de artar.

Konumsal bilgi: “sıra” nereden geliyor?

Transformer, attention ile token’lar arası ilişkiyi kurar; ancak attention tek başına “sıra” bilgisini garanti etmez. Bu yüzden modele konum bilgisi eklenir: konumsal kodlama (positional encoding) ya da modern varyantlarda göreli konumlama yaklaşımları. Böylece “Bugün hava güzel” ile “Güzel hava bugün” gibi yapılar farklı temsillere sahip olur.


LLM nedir? Büyük dil modeli, olasılık makinesi gibi çalışır

LLM, büyük metin koleksiyonları üzerinde eğitilmiş ve “bir sonraki token” olasılıklarını tahmin etmeyi öğrenmiş bir model sınıfıdır. Bu, pratikte; metin tamamlama, soru-cevap, özetleme ve kod üretimi gibi görevleri mümkün kılar. Modelin “anlıyor” gibi görünmesi, büyük ölçüde bağlamdan iyi genelleme yapabilmesinden kaynaklanır.

LLM’lerde Transformer genellikle decoder-only yapıdadır: her adımda yalnızca geçmiş token’lara bakarak (nedensel/causal maskeleme) bir sonraki token dağılımını üretir. Bu, sohbet deneyimlerinde gördüğünüz “adım adım yazma” davranışının temelidir.

Ön eğitim ve talimatla hizalama

Ön eğitim (pretraining) aşamasında model, genel dil örüntülerini öğrenir. Ardından talimatla hizalama (instruction tuning) ve tercihe dayalı yöntemler, modelin kullanıcı niyetine daha iyi yanıt vermesini sağlar. Bu aşamalar, modelin ton ve davranış kalitesini belirgin biçimde etkiler.

Neden “büyük”? Parametre sayısı ve veri ölçeği

“Büyük” ifadesi, parametre sayısı ve eğitildiği veri hacmiyle ilişkilidir. Parametre sayısı arttıkça temsil kapasitesi yükselir; ancak eğitim maliyeti, enerji tüketimi ve inference gecikmesi gibi trade-off’lar da büyür. Bu nedenle pratikte, kullanım senaryosuna uygun model boyutu seçimi kritik bir karar haline gelir.


Tokenization: Metni token’lara bölmek neden bu kadar önemli?

Tokenization, metni modelin işleyebileceği sembollere ayırma sürecidir. Bu semboller her zaman “kelime” değildir; çoğu modern LLM, kelime parçaları (subword) kullanır. Amaç, hem farklı dillerde verimli çalışmak hem de nadir kelimeleri yönetilebilir parçalara bölmektir.

Tokenization, görünmez ama belirleyici bir katmandır: aynı cümlenin farklı token’lara bölünmesi, bağlam penceresini farklı doldurur; bu da maliyeti, hızını ve hatta cevap kalitesini etkileyebilir. Özellikle uzun metinlerde token bütçesi doğrudan kullanıcı deneyimine yansır.

BPE ve alt-birim yaklaşımı

Yaygın yöntemlerden biri BPE (Byte Pair Encoding) benzeri alt-birim algoritmalarıdır. Bu yaklaşım, sık geçen parçaları birleştirerek hem sözlüğü yönetilebilir tutar hem de yeni kelimeleri parçalayarak temsil edebilir. Türkçe gibi eklemeli dillerde, alt-birim token’lar çoğu zaman kelime bütünlüğünü “yaklaşık” taşır.

Özel token’lar: başlangıç, bitiş ve ayrım işaretleri

Birçok sistemde metin, özel token’larla çerçevelenir (ör. başlangıç, bitiş, rol ayrımı). Sohbet formatlarında “kullanıcı” ve “asistan” gibi rollerin ayrışması, modelin davranışını daha tutarlı hale getirir. Bu ayrım, özellikle çok turlu konuşmalarda bağlamın doğru okunmasını sağlar.

Tokenization akışını zihinde canlandırmak için kısa bir özet:

  1. Metni normalize et (boşluklar, unicode biçimleri, opsiyonel alt kurallar).
  2. Metni parçala (alt-birim kurallarına göre).
  3. Her parçayı sözlük kimliğine çevir (token id).
  4. Token id’leri embedding’lere dönüştür ve modele besle.
Metnin alt-birimlere ayrılması, token kimliklerine dönüştürülmesi ve embedding katmanına beslenmesini anlatan şema

Attention mekanizması: Model hangi parçaya “odaklanır”?

Attention, her token’ın diğer token’larla ilişkisini ölçen bir ağırlıklandırma mekanizmasıdır. “Odaklanma” benzetmesi günlük anlatım için uygundur; teknik olarak model, her token için bir dağılım hesaplar ve bu dağılımla bağlam bilgisini toplar. Bu süreç, her katmanda tekrarlandığı için bağlam temsili giderek rafine olur.

Transformer’da attention, genellikle multi-head yapıdadır: birden fazla attention “kafası” farklı ilişki türlerini yakalayabilir. Örneğin bir head sözdizimsel bağı, başka bir head referans çözümlemeyi veya konu sürekliliğini daha iyi taşıyabilir.

Q, K, V: Soru-cevap gibi değil, projeksiyon gibi düşünün

Pratikte her token embedding’i üç farklı doğrusal dönüşümle üç vektöre çevrilir: Query (Q), Key (K), Value (V). Q ile K arasındaki benzerlik, “hangi token’lar birbirine ne kadar ilgili” sorusunu sayısallaştırır. Bu skorlar normalize edilerek ağırlıklar elde edilir ve bu ağırlıklarla V’ler toplanır.

Causal masking: Geleceğe bakmayı engellemek

Decoder-only LLM’lerde model, bir sonraki token’ı üretirken “gelecek” token’ları görmemelidir. Bu yüzden attention matrisinde üst üçgen maskelenir. Böylece her konum yalnızca kendisinden önceki konumlara bakabilir. Bu basit kural, metin üretimini istatistiksel olarak tutarlı kılar.

Aşağıda, ölçeklenmiş nokta çarpım attention mantığını sadeleştiren bir Python örneği var (gerçek modellerde çok daha büyük boyutlar ve optimizasyonlar kullanılır):

import numpy as np

def softmax(x, axis=-1):
    x = x - np.max(x, axis=axis, keepdims=True)
    e = np.exp(x)
    return e / np.sum(e, axis=axis, keepdims=True)

def scaled_dot_product_attention(Q, K, V, mask=None):
    # Q, K, V: [seq_len, d_k]
    d_k = Q.shape[-1]
    scores = (Q @ K.T) / np.sqrt(d_k)   # [seq_len, seq_len]
    if mask is not None:
        scores = np.where(mask, scores, -1e9)
    weights = softmax(scores, axis=-1) # attention weights
    return weights @ V, weights

# örnek: 4 token, 8 boyut
np.random.seed(0)
Q = np.random.randn(4, 8)
K = np.random.randn(4, 8)
V = np.random.randn(4, 8)

# causal mask: sadece geçmişe bak
seq_len = 4
mask = np.tril(np.ones((seq_len, seq_len), dtype=bool))

out, attn = scaled_dot_product_attention(Q, K, V, mask=mask)
print(out.shape, attn.shape)

Inference süreci: Model yanıtı nasıl üretir?

Inference, eğitilmiş modelin giriş token’larını alıp çıktı token’larını üretmesidir. Basitçe: önce giriş token’ları modele verilir, model bir dağılım üretir ve bu dağılımdan bir sonraki token seçilir. Sonra bu token girişe eklenir ve süreç, durdurma koşulu sağlanana kadar devam eder.

Burada iki kritik nokta var: (1) çıktı seçme stratejisi (greedy, beam, top-k, top-p, temperature), (2) performans (KV cache, batching, kuantizasyon). Aynı model, farklı decoding ayarlarıyla bambaşka bir üslup veya doğruluk profili sergileyebilir.

Decoding stratejileri: Tutarlılık ve yaratıcılık dengesi

Greedy decoding her adımda en olası token’ı seçer; genelde tutarlıdır ama bazen tekdüze veya erken kilitlenme üretebilir. Top-k veya top-p (nucleus) örnekleme, olasılık kütlesinin bir kısmından seçim yaparak daha çeşitli metinler üretir. Temperature ise dağılımı keskinleştirir veya yumuşatır.

KV cache: Tekrar hesaplamayı azaltmak

Decoder-only LLM’lerde her yeni token üretiminde geçmiş token’ların K ve V projeksiyonlarını baştan hesaplamak maliyetlidir. KV cache yaklaşımı, geçmişin K/V değerlerini saklar; böylece yeni adımda sadece yeni token için hesap yapılır. Bu, uzun yanıtların gecikmesini belirgin biçimde düşürür.

Aşağıdaki örnek, top-p örneklemeyi basitleştirilmiş şekilde gösterir (gerçek sistemlerde sayısal kararlılık ve çoklu batch işleme daha kapsamlıdır):

function sampleTopP(logits, p = 0.9, temperature = 1.0) {
  // logits: number[] (vocab size)
  const scaled = logits.map(x => x / temperature);

  // softmax
  const maxLogit = Math.max(...scaled);
  const exps = scaled.map(x => Math.exp(x - maxLogit));
  const sumExp = exps.reduce((a, b) => a + b, 0);
  const probs = exps.map(x => x / sumExp);

  // sort by prob desc
  const indexed = probs.map((prob, idx) => ({ idx, prob }))
                       .sort((a, b) => b.prob - a.prob);

  // nucleus cut
  let cum = 0;
  const nucleus = [];
  for (const item of indexed) {
    nucleus.push(item);
    cum += item.prob;
    if (cum >= p) break;
  }

  // renormalize
  const nucSum = nucleus.reduce((a, b) => a + b.prob, 0);
  const r = Math.random();
  let acc = 0;
  for (const item of nucleus) {
    acc += item.prob / nucSum;
    if (r <= acc) return item.idx;
  }
  return nucleus[nucleus.length - 1].idx;
}
Bir sohbet arayüzünde modelin ardışık token üretimini, olasılık dağılımı ve seçim stratejileriyle anlatan kompozisyon

Bağlam penceresi, maliyet ve kalite: Pratikte nelere dikkat edilir?

LLM’lerle çalışırken “bağlam penceresi” (context window) hem teknik hem ürün kararlarını etkiler. Daha uzun bağlam, daha çok bilgi taşıyabilir; ancak token sayısı arttıkça maliyet yükselir ve gecikme artar. Ayrıca çok uzun bağlamlarda her bilgi aynı ölçüde etkili olmayabilir; modelin “hangi sinyali öne alacağı” önem kazanır.

Bu nedenle uygulamalarda bağlam yönetimi yapılır: gereksiz bölümler atılır, özetlenir, önemli kısımlar işaretlenir veya dış bellek (RAG) ile ihtiyaç anında getirilir. Buradaki hedef, en düşük token ile en yüksek fayda yaklaşımıdır.

Kuantizasyon ve hız optimizasyonları

Kuantizasyon, ağırlıkları daha düşük hassasiyette (ör. 8-bit, 4-bit) temsil ederek bellek kullanımını ve bazen gecikmeyi azaltabilir. Bu teknik, donanım ve model türüne göre farklı sonuçlar verir; kalite kaybı kabul edilebilir sınırdaysa ciddi maliyet avantajı sağlayabilir.

Halüsinasyon riski ve doğrulama stratejileri

LLM’ler, dil örüntülerini güçlü biçimde modellediği için “inandırıcı ama yanlış” üretimler yapabilir. Bunu yönetmek için kaynak gösterme, dış doğrulama, kısıtlı cevap şablonları ve güvenilir veriyle destekleme (RAG) gibi yaklaşımlar kullanılır. Özellikle kritik alanlarda çıktıların denetlenmesi iyi bir standarttır.

  • Prompt’ta amaç, format ve kısıtları net ifade etmek.
  • Uzun belgelerde özet + alıntı stratejisiyle bağlamı kontrollü büyütmek.
  • Üretilen bilgiyi ikinci bir kontrol adımıyla doğrulamak (kural tabanlı ya da ayrı bir modelle).
  • Gerekirse “bilinmiyor” yanıtını teşvik eden talimatlar eklemek.

RAG ve uygulama desenleri: LLM’i ürüne bağlamak

Birçok gerçek dünya senaryosunda LLM’in tek başına “her şeyi bilmesi” beklenmez; bunun yerine, doğru bilgiyi doğru anda çağıracak bir düzenek kurulur. RAG (Retrieval-Augmented Generation), dış veri kaynağından ilgili parçaları getirip modele bağlam olarak ekleyerek daha doğru ve denetlenebilir çıktılar üretmeyi hedefler.

Benzer şekilde “agent” yaklaşımlarında model, araçlar (arama, veri tabanı sorgusu, hesaplama) çağırarak adım adım ilerler. Burada önemli olan, modelin güçlü dil üretimini, sistemin güvenilir veri ve işlem kabiliyetiyle birleştirmektir.

Basit bir RAG akışı

RAG için tipik akış: (1) belge parçalama, (2) embedding çıkarma, (3) vektör arama ile ilgili parçaları bulma, (4) bulunan parçaları prompt’a ekleyip yanıt üretme. Bu sayede model, kendi parametre bilgisinin ötesinde güncel ve kurumsal içerikle konuşabilir.

Üretim ortamında gözlemlenebilirlik

Üretimde, gecikme (latency), token tüketimi, hata oranı ve kalite metrikleri izlenir. Özellikle “hangi prompt şablonu hangi segmentte daha iyi çalışıyor” sorusuna cevap verebilmek için kayıt ve değerlendirme altyapısı kurmak, model kalitesini sürdürülebilir hale getirir.

Bu konuları daha sistematik bir çerçevede ele almak isterseniz, uygulama odaklı içeriğe şu bağlantıdan geçebilirsiniz: Generative AI ve LLM eğitimi.


Özet: Tokenization + Attention + Inference bir zincir gibi çalışır

Transformer, bağlamı paralel hesaplayabilen attention tabanlı bir mimaridir; LLM ise bu mimari üzerinde büyük veriyle eğitilerek bir sonraki token olasılıklarını modelleyen bir sistemdir. Tokenization metni modele uygun hale getirir, attention bağlam ilişkilerini hesaplar, inference ise bu hesapları kullanarak çıktıyı adım adım üretir.

Bu üç adımı birlikte düşündüğünüzde, “model neden bazen yanlış anlıyor”, “neden token sayısı maliyeti etkiliyor” veya “neden decoding ayarları dili değiştiriyor” gibi sorular çok daha anlaşılır hale gelir. İhtiyaç duyduğunuzda, KV cache, kuantizasyon ve RAG gibi pratik desenlerle kalite-maliyet dengesini daha iyi yönetebilirsiniz.

 VERİ AKADEMİ