Bölüm 8 · Büyük dil modellerinin parçaları · Ders 33
Kelime vektörleri
Birlikte geçen kelimeler, haritada yan yana düşer
Veri. Bir depo robotunun bakım kayıtlarından 20 kısa cümle aldık; içlerinde 19 farklı kelime var: algılayıcılar (LiDAR, kamera, sonar), hareket (motor, tekerlek, palet) ve enerji (batarya, şarj, hücre) ile bunların yanında geçen kelimeler. Kimse modele "LiDAR ile sonar benzer" demiyor. Yalnızca hangi kelimenin hangisinin yanında geçtiğini sayarak her kelimeye 19 sayılık bir vektör veriyoruz ve bunu 2B bir haritaya indiriyoruz.
import numpy as npT = [g.split() for g in ["lidar camera sonar", # konu başına 3 nesne"distance obstacle scan", "motor wheel track", # ve 3 bağlam kelimesi"speed turn torque", "battery charger cell","voltage current power"]]S = [["robot", n, C[i], C[(i + 1) % 3]] # 18 cümlefor N, C in zip(T[::2], T[1::2])for j, n in enumerate(N) for i in range(3) if i != j]S += [b.split() for b in ["robot motor current speed", # 2 köprü cümle"robot camera power scan"]]V = sorted({w for s in S for w in s}); win = 2 # 19 kelime · pencereix = {w: i for i, w in enumerate(V)}; M = np.zeros((19, 19))for s in S: # eş-bulunma sayımıfor a in range(4):for b in range(a + 1, min(a + win + 1, 4)):M[ix[s[a]], ix[s[b]]] += 1 # aradaki uzaklık ≤ pencereM = M + M.T; P = M / M.sum(); r = P.sum(1) # simetrik, olasılıkX = np.log(P / np.outer(r, r) + 1e-12).clip(0) # PPMIU = X / np.linalg.norm(X, axis=1, keepdims=True) # birim vektörleru, s, _ = np.linalg.svd(U - U.mean(0)) # ortalamayı çıkar, SVDY, cos = u[:, :2] * s[:2], U @ U.T # 2B konumlar, kosinüsa, b, c = ix["lidar"], ix["sonar"], ix["battery"]print(cos[a, b].round(2), cos[a, c].round(2), Y[a].round(2))ev = s ** 2 / (s ** 2).sum() # bileşen başına açıklanan varyanshistory = {"component": list(range(1, 20)), # değerlendirme geçmişi"explained": list(ev), "cumulative": list(ev.cumsum())}top = {w: i // 2 for i, g in enumerate(T) for w in g} # kelimenin konusutw = [ix[w] for w in V if w in top]same = [cos[i, j] for i in tw for j in tw if i < j and top[V[i]] == top[V[j]]]other = [cos[i, j] for i in tw for j in tw if i < j and top[V[i]] != top[V[j]]]for k, v in [("kept_2d", ev[:2].sum()), ("cos_same", np.mean(same)), # son ölçümler("cos_other", np.mean(other))]: print(f"{k:<10}{v:>8.3f}")import csvwith open("egitim_gecmisi.csv", "w", newline="") as f: # satır başına bir bileşencsv.writer(f).writerows([list(history), *zip(*history.values())])try:import matplotlib.pyplot as plt # varsa grafik çizplt.bar(history["component"], history["explained"])plt.plot(history["component"], history["cumulative"], "o-")plt.xlabel("component"); 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
- Eş-bulunma: her cümlede, aralarında en fazla "pencere" kadar kelime olan her çift için matristeki iki hücre 1 artar.
- PPMI: "robot" her cümlede geçtiği için her şeyle sık görünür. Sayıyı, iki kelime bağımsız olsaydı beklenecek sayıya böleriz ve logaritmasını alırız; beklenenden seyrekse 0 yazarız.
- Her satır bir kelime vektörüdür. İki vektör arasındaki açının kosinüsü benzerliği verir: 1 aynı yön, 0 ilgisiz.
- 19 boyutu görebilmek için ortalamayı çıkarıp en çok değişen iki yönü güç (altuzay) yöntemiyle buluruz: bir vektörü matrisle tekrar tekrar çarpınca en büyük yöne döner.
- Şunu dene: pencereyi 1 yap. Kelime yalnız hemen yanındakini görür; kümeler gevşer ve LiDAR–sonar benzerliği düşer.
Neden önemli
Dil modelleri her kelimeyi (aslında her parçayı) böyle bir vektöre çevirerek başlar; bugün bu vektörler sayımla değil eğitimle öğrenilir ama fikir aynıdır: "bir kelimeyi yanındakilerden tanırsın". Robotikte sesli komutları, arıza raporlarını ve kılavuzları anlamada, benzer kayıtları bulmada aynı vektörler kullanılır.
ESOF 323, 11. hafta: robotlarda derin öğrenme →