NLP Laboratuvarı

Doğal Dil İşleme & Büyük Dil Modelleri (LLM) temelleri — canlı, etkileşimli ders aracı

Kısayol: Ctrl + Enter. Tüm hesaplamalar sunucuda saf PHP ile, harici kütüphane olmadan yapılır.

Doğal Dil İşleme (NLP) hattı

Bilgisayar metni doğrudan anlayamaz; metni önce temizleyip parçalara ayırır, sonra sayılara (vektörlere) dönüştürür. Tüm klasik NLP yöntemleri ve modern LLM'ler bu temel fikir üzerine kuruludur.

📄Ham metinKorpus / belgeler
→
🧹Ön işlemeküçük harf, noktalama, stopword, kök
→
✂️Tokenizasyonkelime / alt-kelime (BPE)
→
🔢VektörleştirmeBoW, TF-IDF, embedding
→
🧠Modelbenzerlik, sınıflandırma, dil modeli
→
🎯Çıktıetiket, özet, çeviri, cevap

1 · Metni temsil etmek Klasik NLP

  • Ön İşleme: metni temizleme adımları
  • Kelime Bulutu: frekansın görsel hâli
  • Bag of Words: kelime sayım vektörleri
  • TF-IDF: önemli kelimeleri ağırlıklandırma
  • N-gram: kelime sırasını yakalama

2 · Metinleri karşılaştırmak Analiz

  • Benzerlik: kosinüs ve Jaccard ile belge benzerliği
  • Zipf Yasası: dilin istatistiksel yapısı
  • Kelime Vektörleri: "bir kelimeyi arkadaşlarından tanırsın" — dağılımsal anlam

3 · Metin üretmek LLM

  • Dil Modeli: sonraki kelimeyi tahmin etme
  • Softmax & Sıcaklık: olasılıktan seçime
  • BPE: GPT'nin metni parçalama yöntemi
  • Dikkat: Transformer'ın kalbi
  • LLM Nasıl Çalışır: uçtan uca mimari

Klasik NLP ile LLM karşılaştırması

ÖzellikKlasik (BoW / TF-IDF / n-gram)Modern (Embedding / Transformer / LLM)
TemsilSeyrek (sparse) vektör: sözlük boyutu kadar, çoğu 0Yoğun (dense) vektör: yüzlerce–binlerce boyut, anlam taşır
Kelime sırasıBoW'da yok, n-gram'da yalnızca yerelKonum kodlaması + dikkat ile tüm bağlam
Anlam"araba" ile "otomobil" tamamen farklı sütunlarEş anlamlılar vektör uzayında birbirine yakın
Bilinmeyen kelimeSözlükte yoksa kaybolur (OOV sorunu)Alt-kelime (BPE) tokenları ile her kelime temsil edilir
Veri / hesapAz veri, hızlı, açıklanabilirÇok büyük veri, GPU, milyarlarca parametre
KullanımSpam filtresi, arama, anahtar kelime çıkarımıSohbet, çeviri, özetleme, kod yazma, soru cevaplama

Kavram sözlüğü

Korpus: Üzerinde çalışılan metin koleksiyonu.

Belge (doküman): Korpustaki tek bir metin birimi (burada her satır).

Token: Metnin en küçük işlenen parçası (kelime, alt-kelime veya karakter).

Sözlük (vocabulary): Korpustaki benzersiz tokenların kümesi.

Durak kelime (stopword): "ve, bu, bir" gibi çok sık geçip az anlam taşıyan kelimeler.

Kök bulma (stemming): Ekleri atarak kelimeyi köküne indirgeme (kitaplar → kitap).

Vektör: Metnin sayısal temsili; makine öğrenmesi modellerinin girdisi.

Embedding: Kelimenin anlamını taşıyan yoğun vektör.

Logit: Modelin her token için ürettiği ham puan; softmax ile olasılığa çevrilir.

Bağlam penceresi: Modelin tek seferde görebildiği en fazla token sayısı.

🧹 Metin ön işleme nedir?

Ham metin gürültülüdür: büyük/küçük harf farkları, noktalama, anlamsız sık kelimeler, aynı kelimenin farklı çekimleri vardır. Ön işleme bu gürültüyü azaltıp sözlüğü küçültür.

  • Küçük harf: "Model" ve "model" aynı token olur. Türkçede I→ı, İ→i kuralına dikkat edilir.
  • Noktalama temizliği: harf ve rakam dışındaki karakterler atılır. Türkiye'nin → türkiye
  • Tokenizasyon: metin boşluklardan kelimelere bölünür.
  • Stopword çıkarma: "ve, bir, bu, için" gibi kelimeler atılır.
  • Kök bulma: "modelleri → model", "kelimeler → kelime".
Dikkat: Türkçe eklemeli (sondan eklemeli) bir dildir. Buradaki kök bulucu basit bir ek listesi kullanır ve yaklaşık sonuç verir. Gerçek projelerde Zemberek ya da TRmorph gibi morfolojik çözümleyiciler kullanılır.
Duygu analizinde değil gibi olumsuzluk kelimeleri stopword sayılıp atılırsa anlam tersine dönebilir! Stopword listesi göreve göre seçilmelidir.

Adım adım dönüşüm

Analiz Et'e basın.

Token sayısı her adımda nasıl azalıyor?

Çıkarılan durak kelimeler

Kök bulma eşleşmeleri

☁️ Kelime bulutu (Word Cloud)

Kelimenin büyüklüğü, metinde kaç kez geçtiğiyle orantılıdır. Kelimenin üzerine gelince sayısını görebilirsiniz. Stopword'leri açıp kapatarak farkı karşılaştırın.

En sık 20 kelime

Frekans tablosu

🎒 Bag of Words (Kelime Torbası)

Her belge, sözlükteki kelimelerin kaç kez geçtiğini gösteren bir vektöre dönüştürülür. Kelimeler bir torbaya atılmış gibidir; sıra kaybolur.

1. Belgeleri toplaher satır = bir belge
↓
2. Ön işle ve tokenlara ayır
↓
3. Sözlük oluşturtüm benzersiz kelimeler → sütun
↓
4. Sayher belge = bir satır vektör
xd,t = count(t, d)d belgesinde t teriminin geçme sayısı. İkili (binary) BoW'da yalnızca var=1 / yok=0.

Artıları: basit, hızlı, açıklanabilir. Spam filtreleme ve metin sınıflandırmada hâlâ güçlü bir temel yöntemdir.

Eksileri:

  • Kelime sırası kaybolur: "köpek adamı ısırdı" ile "adam köpeği ısırdı" neredeyse aynı vektör olur.
  • Seyreklik: sözlük büyüdükçe vektörlerin çoğu 0 olur.
  • Anlam yok: "güzel" ile "harika" arasında ilişki kurulamaz.

Doküman-terim matrisi

1 · Belgeler ve tokenları

2 · Sözlük (vocabulary)

3 · Vektör gösterimi

⚖️ TF-IDF (Terim Sıklığı × Ters Belge Sıklığı)

BoW'da "model" gibi her belgede geçen kelimeler baskın çıkar. TF-IDF, bir kelimeye belgede sık, korpusta nadir olduğu ölçüde yüksek ağırlık verir.

TF(t,d) = ft,d / Σk fk,dKelimenin belgedeki oranı
IDF(t) = ln((1+N)/(1+dft)) + 1N: belge sayısı, df: kelimenin geçtiği belge sayısı
TF-IDF(t,d) = TF(t,d) × IDF(t)
  • Her belgede geçen kelime → IDF düşük → önemsiz
  • Tek belgede geçen kelime → IDF yüksek → o belgeyi ayırt eden kelime
Kullanım: arama motorları, anahtar kelime çıkarma, belge sınıflandırma, öneri sistemleri.

IDF değerleri (yüksek = nadir = ayırt edici)

Her belgenin en ayırt edici 5 kelimesi

TF-IDF matrisi (ısı haritası)

TF matrisi (normalize terim sıklığı)

🔗 N-gram

Art arda gelen n tokenlık diziler. BoW'un kaybettiği yerel sırayı kısmen geri kazandırır.

  • Unigram (n=1): "doğal", "dil", "işleme"
  • Bigram (n=2): "doğal dil", "dil işleme"
  • Trigram (n=3): "doğal dil işleme"
m kelimelik cümlede n-gram sayısı = m − n + 1

N-gramlar hem öznitelik (feature) olarak hem de n-gram dil modellerinde (bkz. 🔮 Dil Modeli sekmesi) kullanılır. n büyüdükçe bağlam artar ama veri seyrekleşir.

Kayan pencere (ilk belge)

En sık n-gramlar

Tablo

📐 Belge benzerliği

Belgeler vektöre dönüştükten sonra aralarındaki açı ile benzerlik ölçülür.

cos(A,B) = (A · B) / (‖A‖ ‖B‖)1 = aynı yön (çok benzer), 0 = ortak kelime yok
Jaccard(A,B) = |A ∩ B| / |A ∪ B|Kelime kümelerinin kesişim/birleşim oranı (sayılar önemsiz)

TF-IDF + kosinüs klasik arama motorlarının temelidir. LLM tabanlı sistemlerde (RAG, semantik arama) aynı kosinüs formülü embedding vektörleri üzerinde kullanılır.

İpucu: "Haber başlıkları" örneğini seçin; spor, ekonomi, teknoloji ve sağlık haberlerinin kendi aralarında kümelendiğini görün.

Benzerlik matrisi

En benzer belge çiftleri

Belgeler

📉 Zipf Yasası

Doğal dillerde bir kelimenin frekansı, sıklık sıralamasındaki yeriyle ters orantılıdır. En sık kelime ikinciden yaklaşık 2 kat, üçüncüden 3 kat fazla geçer.

f(r) ≈ C / rs   (s ≈ 1)log-log grafikte eğimi ≈ −1 olan bir doğru
  • Birkaç kelime çok sık geçer (genelde stopword'ler).
  • Kelimelerin büyük çoğunluğu yalnızca 1–2 kez geçer (hapax legomena).
  • Bu yüzden stopword çıkarmak metni çok küçültür, nadir kelimeler ise seyreklik sorunu yaratır.
Not: Bu grafik stopword'ler dahil ham kelimelerle çizilir. Küçük metinlerde eğim −1'den uzak olabilir; yasa büyük korpuslarda belirginleşir.

Sıra – frekans (log-log)

İlk 30 kelime · r × f sabite yakın mı?

🧬 Kelime vektörleri (Embedding)

Dağılımsal hipotez (Firth, 1957): "Bir kelimeyi, çevresindeki kelimelerden tanırsın." Benzer bağlamlarda geçen kelimeler benzer anlama sahiptir.

1. Eş-geçiş (co-occurrence) matrisipencere içinde birlikte geçen kelimeleri say
↓
2. PPMI ağırlıklandırmatesadüfi birliktelikleri ayıkla
↓
3. PCA ile 2 boyuta indirvektörleri düzlemde göster
PPMI(w,c) = max(0, log2 P(w,c) / (P(w)·P(c)))

Word2Vec, GloVe ve LLM'lerin embedding katmanları aynı fikrin sinir ağlarıyla öğrenilmiş hâlidir. LLM'lerde her token binlerce boyutlu bir vektördür.

3
60
2

2 boyutlu kelime uzayı (PCA)

Nokta büyüklüğü = frekans. Birbirine yakın noktalar, benzer bağlamlarda geçen kelimelerdir. (PCA bilgiyi sıkıştırdığı için tam komşuluk sağdaki listede daha doğrudur.)

En yakın kelimeler (kosinüs)

Eş-geçiş matrisi (ilk 15 kelime)

🔮 Dil modeli: sonraki kelimeyi tahmin et

Bir dil modeli, bir kelime dizisinin olasılığını hesaplar. Zincir kuralı ile bu, her adımda sonraki kelimenin olasılığına indirgenir:

P(w1…wm) = Π P(wi | w1…wi−1)

N-gram modeli yalnızca son n−1 kelimeye bakar (Markov varsayımı) ve olasılığı sayarak bulur:

P(wi | wi−2, wi−1) = C(wi−2 wi−1 wi) / C(wi−2 wi−1)

Bağlam korpusta hiç yoksa daha kısa bağlama geri çekilir (backoff).

GPT de tam olarak bunu yapar: sonraki tokenın olasılık dağılımını hesaplar. Farkı, olasılıkları saymak yerine milyarlarca parametreli bir Transformer ile tahmin etmesi ve binlerce tokenlık bağlama bakabilmesidir.
0.8
25

İpucu: "Masal" örneğini seçip bağlama küçük yazın.

Sonraki kelime olasılıkları

Üretilen metin

"Metin üret" düğmesine basın. Renk koyuluğu = seçilen kelimenin olasılığı.

Kelimenin üzerine gelince olasılığı, kullanılan n-gram derecesi ve aday sayısı görünür. Düşük sıcaklıkta metin korpusu ezberden tekrarlar, yüksek sıcaklıkta daha rastgele ve "yaratıcı" olur.

Modelin sayım tablosu (en sık n-gramlar)

🌡️ Softmax, sıcaklık, Top-k ve Top-p

LLM her adımda sözlükteki her token için bir puan (logit) üretir. Softmax bu puanları toplamı 1 olan olasılıklara çevirir.

P(i) = ezi/T / Σj ezj/T
  • T < 1: dağılım sivrileşir, model daha kararlı ve tekrarcı olur (T→0: hep en olası token, greedy).
  • T = 1: modelin öğrendiği orijinal dağılım.
  • T > 1: dağılım düzleşir, daha yaratıcı ve rastgele olur.
  • Top-k: yalnızca en olası k token arasından seç.
  • Top-p (nucleus): kümülatif olasılığı p'ye ulaşan en küçük token kümesinden seç.
1.00
10
1.00

"Kedi süt ___" cümlesi için sonraki token dağılımı

Açık renkli çubuklar T=1'deki orijinal dağılımı gösterir. Gri çubuklar top-k veya top-p filtresiyle elenen tokenlardır.

Logitler (düzenlenebilir) ve hesap tablosu

✂️ Byte Pair Encoding (BPE)

GPT, LLaMA ve benzeri modeller metni kelimelere değil alt-kelime (subword) tokenlarına böler. BPE bu sözlüğü veriden öğrenir:

1. Başlangıçher kelime karakterlerine ayrılır, sonuna </w> eklenir
↓
2. Sayyan yana gelen en sık karakter çiftini bul
↓
3. Birleştirbu çifti yeni bir token yap ve sözlüğe ekle
↻
4. Tekrarlaistenen birleştirme sayısına ulaşana kadar
  • Sık kelimeler tek token olur: dil
  • Nadir kelimeler parçalanır: model + leri
  • Bilinmeyen kelime (OOV) sorunu ortadan kalkar.
  • Türkçe gibi eklemeli dillerde ekler ayrı token olarak öğrenilir.
40

Tokenizasyon sonucu

Sözlük büyümesi

Öğrenilen birleştirme kuralları (sırayla)

Korpustaki sık kelimeler nasıl bölündü?

🎯 Öz-dikkat (Self-Attention)

Transformer'da her token, cümledeki diğer tokenlara ne kadar dikkat edeceğine kendisi karar verir. Böylece "o" zamirinin "kedi"yi işaret ettiği öğrenilebilir.

Q (Query)"Ben neyi arıyorum?"
K (Key)"Ben neyim, neyi sunuyorum?"
V (Value)"Seçilirsem aktaracağım bilgi"
Attention(Q,K,V) = softmax( Q·KT / √dk ) · V
  1. Her token çifti için Q·K benzerlik puanı hesaplanır.
  2. √dk ile ölçeklenir (sayılar patlamasın diye).
  3. Her satıra softmax uygulanır → dikkat ağırlıkları.
  4. V vektörleri bu ağırlıklarla toplanır → bağlamlı yeni temsil.

Maskeli (causal) dikkat: GPT gibi üretici modellerde bir token yalnızca kendinden öncekilere bakabilir; geleceği göremez.

Çok başlı dikkat: Gerçek modellerde bu işlem paralel olarak onlarca "baş"ta yapılır; her baş farklı bir ilişki türünü (özne-yüklem, zamir-isim…) öğrenir.

Dikkat ağırlıkları ısı haritası

Satır = dikkat eden token (Query), sütun = dikkat edilen token (Key). Bir satıra tıklayın.

"o" tokenı kime dikkat ediyor?

Not: Bu örnekteki Q ve K vektörleri, kavramı göstermek için elle seçilmiş 4 boyutlu oyuncak vektörlerdir. Gerçek modellerde bunlar öğrenilmiş ağırlık matrisleriyle (WQ, WK, WV) üretilir ve yüzlerce boyutludur.

🤖 Büyük Dil Modeli (LLM) nasıl çalışır?

ChatGPT, Claude, Gemini ve LLaMA gibi modeller decoder-only Transformer mimarisindedir. Temel görevleri tektir: verilen metnin devamındaki tokenı tahmin etmek. Bu işlem her yeni token için tekrarlanır (otoregresif üretim).

Bir tokenın yolculuğu

💬Girdi metni"Doğal dil işleme bir"
↓
✂️Tokenizer (BPE)["Doğal", " dil", " işleme", " bir"] → [8412, 1771, 30512, 264] (temsili ID'ler)
↓
🧬Embedding + konum bilgisiher token ID → d boyutlu vektör (+ pozisyon kodlaması)
↓
🔁N × Transformer bloğuMaskeli çok başlı öz-dikkat → Ekle & Normalize → İleri beslemeli ağ (MLP) → Ekle & Normalize
↓
📊Çıkış katmanı → logitlersözlükteki her token için bir puan (on binlerce)
↓
🌡️Softmax + örneklemesıcaklık, top-k, top-p → "yapay"
↻
➕Yeni token girdiye eklenirve döngü <son> tokenına kadar sürer

Eğitim aşamaları

1Ön eğitim (Pre-training)
İnternet, kitap, kod gibi trilyonlarca token üzerinde sonraki tokenı tahmin etme. Model dilin yapısını ve dünya bilgisini öğrenir. Kayıp fonksiyonu: çapraz entropi.
2İnce ayar (Supervised Fine-Tuning)
Soru–cevap ve talimat örnekleriyle modele asistan gibi davranmayı öğretmek.
3Tercih hizalama (RLHF / DPO)
İnsanların tercih ettiği cevaplar ödüllendirilir: daha yararlı, doğru ve güvenli cevaplar.
Kayıp = − Σ log P(wi | w<i)Doğru sonraki tokena verilen olasılık ne kadar yüksekse kayıp o kadar düşük

Bu laboratuvardaki karşılıkları

Tokenizer✂️ BPE Tokenizer sekmesi
Embedding🧬 Kelime Vektörleri sekmesi
Öz-dikkat🎯 Dikkat sekmesi
Sonraki token tahmini🔮 Dil Modeli sekmesi (n-gram versiyonu)
Softmax / örnekleme🌡️ Softmax & Sıcaklık sekmesi

Önemli kavramlar

Bağlam penceresi

Modelin tek seferde görebildiği en fazla token sayısı. Pencerenin dışında kalan bilgi "unutulur".

Halüsinasyon

Model, olasılığı yüksek görünen ama gerçekte yanlış bilgi üretebilir; çünkü amacı doğruluk değil, akla yatkın devam üretmektir.

RAG

Retrieval-Augmented Generation: soruya benzer belgeler embedding + kosinüs benzerliği ile bulunur ve modele bağlam olarak verilir.

Prompt mühendisliği

Talimat, örnek (few-shot) ve bağlam vererek modelin çıktısını yönlendirmek.

Parametre

Modelin öğrenilen ağırlıkları. Büyük modellerde milyarlarca parametre bulunur.

Token ≠ kelime

Türkçe gibi eklemeli dillerde bir kelime çoğu zaman birden fazla tokena bölünür; bu, maliyeti ve bağlam kullanımını artırır.

🏷️ Metin sınıflandırma ve baseline disiplini

1. Verietiket;metin satırları
↓
2. Tabakalı bölmeher sınıftan aynı oranda test · sabit seed
↓
3. Vektörleştirsözlük + IDF yalnızca eğitimden öğrenilir
↓
4. EğitÇoğunluk · NB · LR · SVM
↓
5. Değerlendiraccuracy, macro-F1, confusion matrix
↓
6. Hata analizineden yanıldı? → iyileştir
Precision = TP / (TP + FP)   Recall = TP / (TP + FN)
F1 = 2·P·R / (P + R)Kesinlik ve duyarlılığın harmonik ortalaması
macro-F1 = (1/C) Σc F1cHer sınıf eşit ağırlıklı → dengesiz verilerde accuracy'den daha dürüst
  • Naive Bayes: kelimelerin sınıf içinde bağımsız olduğunu varsayar; çok hızlı, az veride güçlü.
  • Lojistik Regresyon: her kelimeye sınıf başına ağırlık öğrenir; olasılık verir.
  • Lineer SVM: sınıflar arasındaki marjı en büyütür; seyrek metin verisinde çok başarılıdır.
  • Çoğunluk sınıfı: hep en sık sınıfı söyler. Modeliniz bunu geçemiyorsa bir şeyler yanlıştır.
Veri sızıntısı: TF-IDF'i tüm veriye fit edip sonra bölmek, test bilgisini eğitime sızdırır. Burada vektörleştirici yalnızca eğitim kısmından öğrenir (sklearn Pipeline'ın yaptığı gibi).
0.25

Veri seti ve bölme

📋 Sonuç tablosu (test kümesi)

Eğitim ve test macro-F1 arasındaki büyük fark aşırı öğrenmeye (overfitting) işaret eder. Küçük veri setlerinde modeller eğitim verisini ezberler.

🔬 Model detayı

Confusion matrix

Satır = gerçek sınıf, sütun = tahmin. Bir hücreye tıklayınca o hatalar aşağıda filtrelenir.

Sınıf bazında metrikler

🐞 Hata analizi

Hata analizi soruları: Model hangi kelimeye kandı? Olumsuzluk (değil) stopword olarak atıldı mı? Örnek gerçekten iki sınıfa da ait olabilir mi (etiket belirsizliği)? Eğitimde hiç görülmeyen kelimeler mi var?

🔑 Sınıfların en belirleyici kelimeleri

✍️ Yeni bir cümleyi sınıflandır

📏 Perplexity ve yumuşatma (smoothing)

Perplexity, dil modelinin görmediği test metnine ne kadar şaşırdığını ölçer. Düşük = daha iyi. Sezgisel olarak: model her adımda ortalama kaç seçenek arasında kararsız kalıyor?

PP = exp( −(1/N) Σi ln P(wi | wi−1) )

Sıfır olasılık sorunu: Testte eğitimde hiç görülmemiş bir bigram varsa MLE olasılığı 0 olur ve PP = ∞. Yumuşatma bu yüzden gereklidir:

MLE: C(h,w) / C(h)
Laplace (add-1): (C(h,w) + 1) / (C(h) + V)
Add-k: (C(h,w) + k) / (C(h) + k·V)
İnterpolasyon: λ·PMLE(w|h) + (1−λ)·Padd-1(w)Bigram bilgisi yoksa unigram'a yaslanır
Karşılaştırma tuzağı: Farklı tokenizasyonların token başına PP'si doğrudan karşılaştırılamaz. Karakter modelinin 30 seçeneği, kelime modelinin binlerce seçeneği vardır. Adil karşılaştırma için toplam log-olasılık kelime sayısına bölünür (kelime başına PP).
<UNK> tuzağı: Bilinmeyen kelimelerin hepsi tek bir <UNK> tokenına dönüşür. OOV oranı yüksekse kelime modelinin PP'si yapay olarak düşük görünür. OOV oranını mutlaka raporlayın.
0.20
100
0.70

Korpus: sayfanın üstündeki metin kutusu. Anlamlı sonuç için uzun bir metin seçin (ör. "Haber korpusu").

📋 Perplexity karşılaştırma tablosu

Yöntem × tokenizasyon (log ölçek)

Add-k: k değeri perplexity'yi nasıl etkiliyor? (kelime başına)

k çok büyükse görülmemiş olaylara fazla olasılık dağıtılır, çok küçükse görülmemiş bigramlar ağır cezalandırılır. En iyi k normalde bir doğrulama (validation) kümesinde seçilir, test kümesinde değil!

Test cümlelerinde token olasılıkları

Renk koyuluğu = olasılık. Dalgalı alt çizgi = eğitimde hiç görülmemiş bigram.

🔎 BM25 (Okapi Best Matching 25)

Arama motorlarının (Elasticsearch, Lucene, Solr) varsayılan sıralama fonksiyonu. TF-IDF'in iki zayıflığını düzeltir:

  • Terim frekansı doyması: Bir kelimenin 10. kez geçmesi, 1. kez geçmesi kadar bilgi taşımaz. k1 bu doymayı ayarlar.
  • Belge uzunluğu normalizasyonu: Uzun belgeler kelimeleri doğal olarak daha çok içerir. b bu cezayı ayarlar.
score(D,Q) = Σt∈Q IDF(t) · f(t,D)·(k1+1) / ( f(t,D) + k1·(1 − b + b·|D|/avgdl) )
IDF(t) = ln( (N − df + 0.5)/(df + 0.5) + 1 )
  • k1 = 0 → yalnızca var/yok (ikili). k1 büyüdükçe TF-IDF'e yaklaşır. Tipik: 1.2–2.0
  • b = 0 → uzunluk yok sayılır. b = 1 → tam normalizasyon. Tipik: 0.75
1.5
0.75

Belgeler: sayfanın üstündeki metin kutusundaki satırlar. "Haber korpusu" örneği arama için idealdir.

Sorgu terimleri

BM25 skorunun terimlere dağılımı (ilk 10 belge)

🥇 BM25 sıralaması

TF-IDF (kosinüs) sıralaması

Terim frekansı doyması (k1)

TF-IDF'te skor frekansla doğrusal artar; BM25'te k1+1 değerine doğru doyar.

Belge uzunluğu normalizasyonu (b)

Aynı terim frekansında (tf = 2) belge uzadıkça skor düşer. Düşüşün şiddeti b ile artar.

📓 Hafta 2 ödev rehberi

Bu sayfa ödevin nasıl yapılacağını anlatır. Teslim edilecek notebook'u Python'da siz yazacaksınız. Site, kavramları görmek ve notebook'taki sonuçlarınızı kontrol etmek içindir. (Sitedeki algoritmalar sklearn ile aynı formülleri kullanır; eğitim algoritmalarındaki küçük farklar nedeniyle sayılar birebir aynı çıkmayabilir.)

1 · Notebook + tablo + hata analizi

  1. Veriyi yükle, sınıf dağılımını göster.
  2. train_test_split(..., stratify=y, random_state=42)
  3. Önce DummyClassifier(strategy="most_frequent")
  4. Pipeline: TfidfVectorizer + NB / LR / LinearSVC
  5. Aynı modeller BoW ve (1,2)-gram ile de
  6. Tek bir sonuç tablosu: accuracy, macro-P/R/F1
  7. En iyi modelin confusion matrix'i
  8. En az 10 yanlış örneği incele, hataları kategorilere ayır

Sitede: 🏷️ Sınıflandırma sekmesi

2 · Perplexity: kelime vs lemma vs subword

  1. Korpusu cümlelere böl, train/test ayır.
  2. Üç tokenizasyon: kelime, lemma (Zemberek / Stanza / spaCy-tr), subword (SentencePiece veya HF tokenizers BPE).
  3. Her biri için bigram modeli + yumuşatma (Laplace ve add-k).
  4. PP'yi hem token hem kelime başına raporla.
  5. OOV oranını ve sözlük boyutunu tabloya ekle.
  6. Yorum: hangisi neden daha iyi? Karşılaştırma adil mi?

Sitede: 📏 Perplexity sekmesi

3 · Proje veri setinde baseline

  1. Proje verini aynı formata getir (metin + etiket).
  2. Aynı bölme, aynı Dummy + TF-IDF + LR/SVM baseline.
  3. macro-F1'i raporla; sınıf dengesizliğine bak.
  4. En iyi pipeline'ı kaydet: joblib.dump(pipe, "baseline.joblib")
  5. Yükleyip tek bir cümle ile test et: joblib.load(...)

Sitede: kendi CSV'ni 🏷️ Sınıflandırma sekmesine yükleyip ön deneme yapabilirsin.

⚠️ Sık yapılan hatalar

  • Veri sızıntısı: vektörleştiriciyi tüm veriye fit etmek. → Pipeline kullan, sadece X_train ile fit.
  • Test kümesinde ayar yapmak: k, C, α gibi hiperparametreleri test sonucuna bakarak seçmek. → Doğrulama kümesi veya cross-validation.
  • Yalnızca accuracy: dengesiz veride %90 accuracy, azınlık sınıfı hiç bilinmeden de elde edilebilir. → macro-F1.
  • Seed vermemek: sonuçlar her çalıştırmada değişir, tekrarlanamaz. → random_state=42
  • Baseline'sız sonuç: "%70 aldım" tek başına anlamsız. Çoğunluk sınıfı ne kadar alıyor?
  • Stopword körlüğü: duygu analizinde "değil", "hiç" gibi kelimeleri atmak anlamı ters çevirebilir.
  • PP karşılaştırma hatası: farklı tokenizasyonların token-başına PP'sini doğrudan kıyaslamak.

🧾 Rapor tablosu şablonu

ModelTemsiln-gramAccuracyMacro-F1Not
Dummy——……alt sınır
MultinomialNBTF-IDF(1,1)……
LogisticRegressionTF-IDF(1,2)……
LinearSVCTF-IDF(1,2)……

Hata analizi kategorileri (örnek)

  • Olumsuzluk / ironi ("güzel ama dayanıksız")
  • Konu örtüşmesi ("hastanede yapay zeka": sağlık mı, teknoloji mi?)
  • Eğitimde görülmemiş kelimeler (OOV)
  • Etiket hatası / belirsiz etiket
  • Çok kısa metin, bilgi yetersiz