Otoregresif
- Makine Öğrenmesi kursu
- Uzman
- Ders 24/44
- 5 dk
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.5Bigram 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
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
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.
ciftler = Counter(____(kelimeler, kelimeler[1:]))
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 |