Bölüm 4 · Gören ve yazan modeller · Ders 22
Mini dil modeli: bir sonraki kelime
Robotun görev günlüğünden yazmayı öğrenen 29×29 puan tablosu
Veri. Ayıklama hattındaki robot, yaptığı her işi günlüğüne kısa bir cümleyle yazıyor: "robot şarj istasyonuna gitti ve bekledi ." gibi. Elimizde 16 cümle, 105 kelime var (nokta da kelime sayılır); farklı kelime sayısı 29. Model bu günlükten her kelimenin ardından hangi kelimenin geldiğini öğrenecek, sonra kendi günlük cümlelerini yazacak.
import numpy as npstory = '''robot kırmızı kutuyu aldı ve rafa koydu . robotmavi kutuyu aldı ve banda koydu . kol yeşil kutuyu bandabıraktı . robot şarj istasyonuna gitti ve bekledi . kameramavi etiketi okudu . kol mavi kutuyu rafa bıraktı . robotengeli gördü ve yavaşça durdu . kamera kırmızı etiketi okuduve bekledi . robot depoya gitti ve kutuyu aldı . kol kutuyubanda koydu ve durdu . robot şarj istasyonuna hızla döndü .kamera yeşil kutuyu gördü . robot kapıya gitti ve bekledi .kol kırmızı kutuyu depoya taşıdı . robot şarj istasyonunagitti ve durdu . kamera engeli gördü ve robot durdu .'''w = story.split(); V = sorted(set(w)); n = len(V) # 29 farklı kelimeix = {s: i for i, s in enumerate(V)}; P = np.zeros((n, n)) # 29×29 puan, hepsi 0sm = lambda v: np.exp(v) / np.exp(v).sum() # softmaxj = ' '.join(w).split(' .')[:-1] # 16 cümless, tr, va = [x.split() + ['.'] for x in j], ['.'], ['.']for i, x in enumerate(ss): [tr, va][i % 4 > 2].extend(x) # her 4. cümle doğrulamanll = lambda a, b: -np.log(sm(P[ix[a]])[ix[b]])ce = lambda q: np.mean([nll(*p) for p in zip(q, q[1:])]) # ortalama çapraz entropihistory = {k: [] for k in ['tour', 'loss', 'val_loss','perplexity', 'val_perplexity']} # eğitim geçmişifor tour in range(500):for a, b in zip(tr, tr[1:]): # çift çift okup = sm(P[ix[a]]); p[ix[b]] -= 1; P[ix[a]] -= .5 * p # hata → küçük adımlt, lv = ce(tr), ce(va) # eğitim / doğrulama kaybır = [tour + 1, lt, lv, np.exp(lt), np.exp(lv)] # şaşkınlık = e^kayıpfor k, v in zip(history, r): history[k].append(float(v))print(sm(P[ix['şarj']]).max().round(3)) # 'şarj' sonrası en olasırng, t = np.random.default_rng(7), ['.'] # cümle başından yazfor _ in range(24):q = sm(P[ix[t[-1]]]) # son kelimeden sonraki olasılıklart.append(V[rng.choice(n, p=q)]) # ağırlıklı zar# t.append(V[q.argmax()]) # hep en olası: döngüye girerprint(' '.join(t[1:]))for k in history: print(f'{k:<15}{history[k][-1]:>10.3f}') # son ölçümlerimport csvwith open('egitim_gecmisi.csv', 'w', newline='') as f: # satır başına bir turcsv.writer(f).writerows([list(history),*zip(*history.values())])try:import matplotlib.pyplot as plt # varsa grafik çizfor k in ('loss', 'val_loss'):plt.plot(history['tour'], history[k], label=k)plt.xlabel('tour'); plt.legend(); plt.show()except ImportError:print('matplotlib yok: grafik atlandı')
Eğitim paneli
Eğitim çalıştırılıyor…
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Veri seti
Tüm veri setleri →Bu dersin kodu verisini kendi içinde üretir; indirilecek dosya yok. Kodu yine de aşağıda tarayıcında çalıştırabilirsin.
Kodu tarayıcıda çalıştırPython · NumPy · matplotlib · Pyodide
Python ve NumPy bu sayfada, tarayıcında çalışır (Pyodide). Kodu değiştirip yeniden çalıştırabilirsin; dersin veri setleri çalışma klasöründe hazır. Kod matplotlib kullanırsa grafikler çıktının altında görünür, yazdığı dosyalar (ör. egitim_gecmisi.csv) indirilebilir.
Çıktı
Çıktı burada görünecek.Nasıl çalışır
- Kelimeler sayıya dönüşür: her kelime, 29 farklı kelimelik alfabetik listedeki sırasını alır. Büyük dil modelleri de aynısını kelime parçalarıyla (token) yapar.
- Her kelime için olası her sonraki kelimeye bir puan tutulur: 29 × 29 = 841 puan, hepsi sıfırdan başlar. Softmax puanları olasılığa çevirir; başta her kelime eşit: %3,4.
- Model günlüğü çift çift okur: sonraki kelimeyi tahmin eder, hata yanlış kelimelere verdiği olasılıktır; küçük bir adım bu olasılığı gerçekten gelen kelimeye kaydırır.
- Yazarken son kelimenin olasılıklarıyla ağırlıklı bir zar atar, kazananı metne ekler ve oradan yeniden atar.
- Şunu dene: yazma modunu 1 (en olası) yap. Model hep aynı cümleyi tekrarlar. Tohumu değiştir: zar başka bir günlük yazar.
Neden önemli
ChatGPT gibi büyük dil modelleri de bir sonraki parçayı tahmin edip zar atarak yazar; fark, yalnız son kelimeye değil bütün konuşmaya bakmaları ve milyarlarca ağırlıkla çalışmalarıdır. Robotikte aynı fikir, sesli komutları ve görev planlarını adım adım üreten modellerde ve olay günlüklerinde "beklenmedik sıra" yakalamakta kullanılır.
ESOF 323, 11. hafta: robotlarda derin öğrenme →