CodeBlanks Logo Icon CodeBlanks

Otoregresif

GPT, önceki tokenlerden sonrakını tahmin ederek metin üretir.

Otoregresif model

Otoregresif bir model, dizinin olasılığını zincir kuralıyla parçalar: her belirteç kendinden öncekilere koşulludur.

P(kedi süt içti) = P(kedi) · P(süt | kedi) · P(içti | kedi süt)

Üretim de aynı yoldan yapılır: bir belirteç seç, girdiye ekle, tekrar et. Bu yüzden üretim sıralıdır; 100 belirteç üretmek modeli 100 kez çalıştırmak demektir (KV önbelleği bu tekrarı hızlandırır).

En basit dil modeli: bigram

Bağlamı yalnızca bir önceki kelimeyle sınırlarsak bigram modeli elde ederiz: P(sonraki | önceki) = sayım(önceki, sonraki) / sayım(önceki). GPT bunun, bağlamı binlerce belirtece uzatan ve sayım yerine öğrenilen bir ağ kullanan hâlidir:

from collections import Counter
ciftler = Counter(zip(kelimeler, kelimeler[1:]))
once = Counter(kelimeler[:-1])
p = ciftler[("kedi", "süt")] / once["kedi"]     # 0.5

Bigram modeli "köpek süt içti"yi de üretebilir, ama "kedi uyudu süt" gibi bağlamı uzun ilişkileri yakalayamaz.

Uygulama Bigram dil modeli

Verilen metinden bigram sayımlarını çıkar ve p(onceki, sonraki) fonksiyonunu yaz. p("kedi", "süt") ve p("süt", "içti") değerlerini aynı satırda yazdır. Ardından zincir kuralıyla "kedi süt içti ." dizisinin olasılığını ("kedi" ile başladığını varsayarak) round(..., 3) ile yazdır.

Başlangıç kodu

model.py
from collections import Counter

metin = "kedi süt içti . köpek su içti . kedi uyudu . köpek süt içti ."
kelimeler = metin.split()

# buraya yaz

Örnek çözüm

model.py
from collections import Counter

metin = "kedi süt içti . köpek su içti . kedi uyudu . köpek süt içti ."
kelimeler = metin.split()

ciftler = Counter(zip(kelimeler, kelimeler[1:]))
once = Counter(kelimeler[:-1])

def p(onceki, sonraki):
    return ciftler[(onceki, sonraki)] / once[onceki]

print(p("kedi", "süt"), p("süt", "içti"))
dizi = "kedi süt içti .".split()
olas = 1.0
for a, b in zip(dizi, dizi[1:]):
    olas *= p(a, b)
print(round(olas, 3))

Beklenen çıktı

0.5 1.0
0.5

Soru ve cevaplar

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

1 Otoregresif üretimde 50 belirteç üretmek için model kaç kez ileri geçiş yapar?

  • 2500
  • 50 Doğru cevap
  • 1
  • 25

Açıklama: Her yeni belirteç bir ileri geçiş gerektirir.

2 Ardışık kelime çiftlerini say.

Soru
ciftler = Counter(____(kelimeler, kelimeler[1:]))
Cevap
ciftler = Counter(zip(kelimeler, kelimeler[1:]))

Açıklama: zip, her kelimeyi bir sonrakiyle eşler.

3 Bigram olasılıklarını eşleştir.

Kavram Anlamı
P(süt | kedi) 0.5
P(içti | su) 1.0
P(kedi | .) ≈ 0.33
P(uyudu | süt) 0.0

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