CodeBlanks Logo Icon CodeBlanks

Text generation

GPT, greedy veya beam search ile metin üretir.

Metin üretimi

Model her adımda bir sonraki belirteç için logitler verir. Bundan bir belirteç seçmenin yolları:

  • Açgözlü: en yüksek olasılık (argmax); tekrar eden, sıkıcı metin üretebilir.
  • Sıcaklık (T): logitleri T'ye bölüp örnekle; T < 1 keskin, T > 1 yaratıcı/dağınık.
  • Top-k: yalnızca en olası k belirteç arasından örnekle.
  • Top-p (çekirdek): toplam olasılığı p'ye ulaşan en küçük küme arasından örnekle.
p = softmax(logit / T)
sonraki = rng.choice(len(p), p=p)

Sohbet modelleri genellikle T ≈ 0.7 ve top-p ≈ 0.9 civarında çalışır.

Sıcaklığın etkisi

Aynı logitlerle sıcaklık değiştikçe dağılım keskinleşir ya da düzleşir:

logit = np.array([2.0, 1.0, 0.5, 0.0])
for T in [0.5, 1.0, 2.0]:
    print(T, np.round(softmax(logit / T), 3))

Top-k ise dağılımın kuyruğunu keser: k dışındaki logitler −∞ yapılır, kalanlar yeniden normalleşir.

Uygulama Örnekleme stratejileri

Verilen logit için: açgözlü seçimi; T = 0.5 ve T = 2 için olasılıkları np.round(..., 3) ile; ve top_k(logit, 2) fonksiyonuyla (k dışını −∞ yap, softmax uygula) olasılıkları np.round(..., 3) ile alt alta yazdır. Son olarak T = 1 ile 10 000 örnekte ilk belirtecin oranını round(..., 2) ile yazdır.

Başlangıç kodu

model.py
import numpy as np

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

rng = np.random.default_rng(0)
logit = np.array([2.0, 1.0, 0.5, 0.0])

# buraya yaz

Örnek çözüm

model.py
import numpy as np

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

rng = np.random.default_rng(0)
logit = np.array([2.0, 1.0, 0.5, 0.0])

def top_k(logit, k):
    z = np.full_like(logit, -np.inf)
    en_iyi = np.argsort(logit)[-k:]
    z[en_iyi] = logit[en_iyi]
    return softmax(z)

print(int(np.argmax(logit)))
print(np.round(softmax(logit / 0.5), 3))
print(np.round(softmax(logit / 2), 3))
print(np.round(top_k(logit, 2), 3))
secim = rng.choice(4, size=10_000, p=softmax(logit))
print(round((secim == 0).mean(), 2))

Beklenen çıktı

0
[0.831 0.112 0.041 0.015]
[0.409 0.248 0.193 0.15 ]
[0.731 0.269 0.    0.   ]
0.58

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Sıcaklık 0'a yaklaştıkça örnekleme neye dönüşür?

  • Top-p'ye
  • Hata verir
  • Açgözlü seçime (argmax) Doğru cevap
  • Düzgün rastgele seçime

Açıklama: Küçük T farkları büyütür; olasılık en yüksek logite yığılır.

2 Logitleri sıcaklıkla ölçekle.

Soru
p = softmax(logit ____ T)
Cevap
p = softmax(logit / T)

Açıklama: T'ye bölmek T &lt; 1'de farkları büyütür.

3 Yöntemleri eşleştir.

Kavram Anlamı
argmax Açgözlü
T > 1 Düzleşmiş dağılım
top-k En olası k belirteç
top-p Olasılık kütlesi p

Uzman bölümündeki tüm dersler