AI Sözlüğü
Orta· ~2 dk okuma#embedding#vector

Embedding

Anlamı sayıya çeviren temsil

Bir metin, görsel veya sesin anlamını yakalayan vektör temsili.

KELİME → ANLAM-VEKTÖRÜ"king"EMBEDDINGMODELİVEKTÖR · 1536 BOYUT[0.21, -0.45, 0.78,0.12, -0.33, 0.66, …]anlam matematiğe dönüşür: "king − man + woman ≈ queen"
Tanım

Bir embedding modeli "kral" gibi bir kelimeyi alır ve onu sabit uzunlukta bir vektör olarak çıktılar. Bu vektör, kelimenin anlamını saklar — "kral" ve "kraliçe" embedding'leri benzerdir.

Anlamsal arama, öneri, kümeleme, RAG — hepsinin altında embedding'ler var. Modern modeller: OpenAI text-embedding-3, Cohere Embed v3, Voyage, BGE, Jina.

Embedding modeli seçimi kritik: dil desteği, boyut (256-3072), bağlam penceresi (girdiye sığacak en fazla token), maliyet (1M token başına $0.02-0.13) modelden modele değişir. Yanlış model = kötü arama = kötü RAG.

Benzetme

Resmi 12 megapikselden 1536 sayıya sıkıştırıyorsun ama o 1536 sayı, "kedi mi köpek mi" sorusuna cevap verecek kadar bilgi taşıyor. Embedding tam olarak budur: detayı atar, anlamı saklar. Kayıplı sıkıştırma — ama doğru şeyi kaybediyor.

Gerçek dünyadan örnek

Slack mesaj arşivi. "Geçen ay deploy hatasından bahsetmiştim" diye arama yapıyorsun. Klasik arama "deploy" + "hata" anahtar kelimelerini içeren mesajları döner — ama "Cuma günü release patladı" mesajını döndürmez (kelimeler farklı, anlam aynı).

Embedding tabanlı arama: senin sorguna 1536 boyutlu bir vektör üretir; her mesajın vektörü zaten hazır. Kosinüs benzerliği ile en yakın 20 mesaj döner — "release patladı" da içinde.

Bir adım daha derine
ANLAM ARİTMETİĞİkingmanwomanqueen ✓king − man + woman ≈ queenanlamlar arasındaki yön matematik olarak korunur
Kod örnekleri
OpenAI embedding + kosinüs benzerliğiPython
from openai import OpenAI
import numpy as np

client = OpenAI()

def embed(text: str) -> np.ndarray:
    resp = client.embeddings.create(
        model="text-embedding-3-small",
        input=text,
    )
    return np.array(resp.data[0].embedding)

def cosine(a: np.ndarray, b: np.ndarray) -> float:
    return float(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)))

v_king   = embed("king")
v_queen  = embed("queen")
v_potato = embed("potato")

print(cosine(v_king, v_queen))   # ≈ 0.78  (yakın anlam)
print(cosine(v_king, v_potato))  # ≈ 0.23  (uzak anlam)
Ne zaman kullan
  • Anlamsal arama (tam metin aramasının ötesi)
  • RAG için parça (chunk) indeksleme
  • Öneri sistemleri (kullanıcı/ürün benzerliği)
  • Yinelenen tespiti (yakın ama birebir aynı olmayan içerik)
  • Sınıflandırma için özellik olarak kullanma
Ne zaman kullanma
  • Tam metin eşleşmesi (slug, ID, kullanıcı adı)
  • Yapısal sorgular (WHERE created_at > X)
  • Açıklanabilir karar gerektiğinde
  • Model maliyeti yüksek ve veri çok az değişiyor — önbelleklemeyi unutma
Sık yapılan hatalar

Embed et, unut

Embedding modelini güncellediğinde tüm vektörleri yeniden hesaplamak gerekir. Eski ve yeni vektörler aynı uzayda değildir. Göç (migration) planı şart.

Parçalamayı (chunking'i) hafife almak

Tüm dokümanı tek vektörle embed edersen detay kaybolur. 50 sayfayı 1 vektöre sıkıştırmak istemezsin. Uygun parçalama şart.

Türkçe için tek dilli model kullanmak

Sadece İngilizce için eğitilmiş model, Türkçe'de zayıftır. Cohere multilingual ya da BGE-m3 gibi çok dilli modelleri tercih et.