Okullar için Robotik ve Mühendislik · anaokulundan liseye

2. ünite / 10 · 4 saat

Gömmeler ve anlamsal benzerlik

Metni sayı vektörüne çevirmek, kosinüs benzerliği, en yakın komşu araması ve yüksek boyutu düzlemde görmek.

Bu ünitenin sonunda

  • Gömme vektörünün ne olduğunu ve nereden geldiğini açıklamak
  • Kosinüs benzerliğini elle ve kodla hesaplamak
  • Bir soruya en yakın cümleleri vektör aramasıyla bulmak
  • Öğretim gömmesinin sınırını (yüzey ve anlam farkı) göstermek

Ders notları

Gömme (embedding), bir metni sabit uzunlukta bir sayı vektörüne çeviren fonksiyondur. İyi bir gömme modelinde anlamca yakın metinler uzayda yakın düşer: "batarya kaç volta inebilir" ile "hücre gerilimi alt sınırı" farklı kelimelerle aynı şeyi sorar ve vektörleri benzer olur.

Benzerliği ölçmek

kosinüs(a, b) = (a · b) / (|a| |b|)

Kosinüs benzerliği iki vektör arasındaki açıya bakar, uzunluğa değil: 1 aynı yön, 0 ilgisiz, negatif zıt yön demektir. Vektörler birim uzunluğa getirilmişse kosinüs basit bir nokta çarpımıdır; vektör veritabanları bu yüzden çoğu zaman normalize vektör saklar.

Bu dersteki öğretim gömmesi

Gerçek gömme modelleri milyarlarca cümleyle eğitilmiş sinir ağlarıdır ve bir sağlayıcının API'si ya da açık bir model üzerinden çağrılır. Bu sayfa hiçbir dış servise istek göndermediği için simülasyonlar küçük bir öğretim gömmesi kullanır: metni kelime gövdelerine ve harf üçlülerine böler, her özelliği sabit bir karma fonksiyonuyla 64 boyuttan birine atar ve toplar (hashing trick).

  • Deterministiktir: aynı metin her zaman aynı vektörü verir, eğitim gerekmez.
  • Yüzey örtüşmesini yakalar: ortak kelime ya da ek paylaşan cümleler yakın düşer.
  • Anlamı yakalamaz: eş anlamlı ama farklı yazılan cümleler uzak kalabilir. Bu sınırı simülasyonda bilerek göreceksin.

Düzlemde görmek

64 boyut ekrana sığmaz. PCA, verinin en çok yayıldığı iki yönü bulur ve noktaları bu düzleme izdüşürür. İzdüşümde yakın görünen iki nokta gerçekte uzak olabilir; mesafeyi her zaman tam vektörde ölç.

Simülasyon

Öğretim modeli: bu sayfadaki simülasyonlar gerçek bir dil modeli değildir. Küçük, deterministik, tarayıcıda çalışan modellerdir; kavramı göstermek için yazıldılar. Site hiçbir dış LLM servisine istek göndermez.

Gömme ve benzerlik: 2B izdüşüm görüntüleyici

Ders notlarından alınmış cümleler öğretim amaçlı bir gömme fonksiyonuyla 64 boyutlu vektörlere çevrilir ve PCA ile düzleme izdüşürülür. Bir soru yaz: noktası haritada belirir, en yakın üç cümle kosinüs benzerliğiyle listelenir. Özellik türünü (kelime, harf üçlüsü) değiştir ve komşuların nasıl değiştiğine bak.

3B gömme uzayı: 64 boyuttan üç eksene

Aynı öğretim gömmesi bu kez PCA ile üç eksene izdüşürülür; her nokta bir ders notu cümlesi, renk notun konusudur. Sorunu yaz: sorgu noktası uzayda yerine kayar, en yakın k cümleye kosinüs puanlı çizgiler uzanır. Sürükleyerek döndür, iki parmakla yakınlaş; 2B düğmesi üçüncü ekseni bastırıp 2B görüntüleyicinin düzlemine iner.

Kendin dene

Gömme görüntüleyicide "LiPo hücre gerilimi en az kaç volt olmalı?" sorusunun en yakın üç cümlesine bak. Sonra aynı soruyu "Batarya kaç volta kadar boşaltılabilir?" diye yeniden yaz: komşular değişti mi, neden? Özellik türünü "Yalnız harf üçlüsü" yapıp ekleri farklı kelimelerin nasıl yakınlaştığını gözle. Bulduğun bir başarısızlığı (anlamca yakın ama uzak düşen cümle) not et.

Kod

Bunları kendi bilgisayarında çalıştır. Anahtar ANTHROPIC_API_KEY ortam değişkeninden okunur; koda asla yazma.

Python: yerel bir gömme modeliyle anlamsal arama
# Anthropic gömme uç noktası sunmaz; burada açık kaynak, çok dilli bir model yerelde çalışır.
# pip install sentence-transformers numpy
import numpy as np
from sentence_transformers import SentenceTransformer

model = SentenceTransformer("sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2")

sentences = [
    "LiPo hücre 3,0 V altına indirilmemelidir.",
    "I2C hattında SDA veri, SCL saat hattıdır.",
    "PID denetleyicide türev terim aşımı azaltır.",
    "Dönem projesi 12. haftanın cuma günü teslim edilir.",
]
# normalize_embeddings=True: her vektörün boyu 1, kosinüs = iç çarpım
E = model.encode(sentences, normalize_embeddings=True)

def search(query, k=2):
    q = model.encode([query], normalize_embeddings=True)[0]
    scores = E @ q
    order = np.argsort(-scores)[:k]
    return [(round(float(scores[i]), 3), sentences[i]) for i in order]

print(search("Batarya kaç volta kadar boşaltılabilir?"))
print(search("Proje teslim tarihi ne?"))
JavaScript: kosinüs benzerliği ve en yakın komşular
const dot = (a, b) => a.reduce((s, x, i) => s + x * b[i], 0)
const norm = (a) => Math.sqrt(dot(a, a))
// Kosinüs: yönlere bakar, boya bakmaz; -1 ile 1 arasında
const cosine = (a, b) => dot(a, b) / (norm(a) * norm(b) || 1)

// Oyuncak 4 boyutlu vektörler: [elektrik, batarya, denetim, ders kuralı]
const docs = {
  ohm: [0.9, 0.2, 0.1, 0.0],
  lipo: [0.4, 0.9, 0.0, 0.1],
  pid: [0.1, 0.0, 0.95, 0.0],
  kurallar: [0.0, 0.0, 0.1, 0.95],
}

function nearest(query, k = 2) {
  return Object.entries(docs)
    .map(([id, v]) => [id, +cosine(query, v).toFixed(3)])
    .sort((x, y) => y[1] - x[1])
    .slice(0, k)
}

console.log(nearest([0.3, 0.8, 0.0, 0.0])) // batarya sorusu
console.log(nearest([0.0, 0.1, 0.0, 1.0])) // teslim tarihi sorusu

Sık yapılan hatalar

  • PCA izdüşümündeki görsel mesafeyi gerçek benzerlik sanmak: arama tam vektörde yapılır.
  • Farklı gömme modellerinin vektörlerini aynı dizinde karıştırmak: boyutlar ve uzaylar uyuşmaz.
  • Belgeleri bir modelle, soruları başka bir modelle gömmek.
  • Benzerlik eşiğini bir kez seçip veri değişince yeniden ölçmemek.

Yazılım mühendisliği bağlantısı

Gömme bir sürümlü artefakttır: model değişirse tüm dizin yeniden üretilir.

  • Dizinde her vektörün yanında gömme modelinin adı ve sürümü saklansın; karışık sürüm sorgusu hata versin.
  • Küçük bir altın küme (soru ve beklenen en yakın belge) tut ve gömme değişikliğinden sonra isabet oranını otomatik ölç.

Kendini sına

  1. İki birim vektörün nokta çarpımı 0,92. Kosinüs benzerliği kaçtır?

  2. Kosinüs benzerliği neden vektör uzunluğundan bağımsızdır?

  3. Bu dersteki öğretim gömmesi hangi durumda yanılır?

  4. Belgeleri yeni bir gömme modeline geçirirken ne yapılmalı?

Macademia'da ilgili

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç