AI Atlas
Orta · ~1 dk okuma #embedding #vector

Embedding

Anlamın sayılarla temsili

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 sabit uzunlukta bir vektör olarak temsil eder. Bu vektör, kelimenin anlamını kodlar — örneğin "kral" ve "kraliçe" embedding'leri birbirine yakındır.

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

Model seçimi kritiktir: dil desteği, vektör boyutu (256–3072), bağlam penceresi (maksimum giriş token sayısı) ve maliyet (1M token başına $0.02–0.13) modelden modele değişir. Yanlış model seçimi = zayıf arama = başarısız RAG.

Benzetme

12 megapiksellik bir fotoğrafı 1536 sayıya indiriyorsun, ama bu 1536 sayı hâlâ "kedi mi köpek mi?" sorusunu cevaplayacak kadar bilgi taşıyor. Embedding tam olarak budur: ayrıntıyı azaltır, anlamı korur. Kayıplı sıkıştırmadır — ama doğru bilgiyi koruyacak şekilde kayıp yaşatır.

Gerçek dünyadan örnek

Bir Slack mesaj arşivi düşün. "Geçen ay deploy hatasından bahsetmiştim" diye arama yapıyorsun. Klasik arama, "deploy" ve "hata" kelimelerini içeren mesajları getirir — ancak "Cuma günü release patladı" mesajını getirmez (kelimeler farklı, anlam aynı).

Embedding tabanlı arama ise sorgunu bir vektöre dönüştürür; her mesajın vektörü zaten hazırdır. Kosinüs benzerliği ile en yakın 20 mesaj döndürülür — "release patladı" da bunların içinde olur.

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ği python
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  (anlamsal olarak yakın)
print(cosine(v_king, v_potato))  # ≈ 0.23  (anlamsal olarak uzak)
Ne zaman kullan
  • Anlamsal arama (tam metin aramasının ötesinde)
  • RAG için veri parçalarını (chunk) indeksleme
  • Öneri sistemleri (kullanıcı/ürün benzerliği)
  • Yinelenen içerik tespiti (birebir aynı olmayan ama benzer içerikler)
  • Sınıflandırma için özellik (feature) olarak kullanma
Ne zaman kullanma
  • Tam metin eşleşmesi gereken durumlar (slug, ID, kullanıcı adı)
  • Yapısal sorgular (WHERE created_at > X gibi)
  • Kararların açıklanabilir olması gereken durumlar
  • Model maliyeti yüksek ve veri nadiren değişiyorsa — önbellekleme yapmayı unutma
Sık yapılan hatalar

Embed edip unutmak

Embedding modelini güncellediğinde tüm vektörleri yeniden oluşturman gerekir. Eski ve yeni vektörler aynı uzayda değildir. Bu yüzden bir geçiş (migration) planı şarttır.

Parçalamayı (chunking) hafife almak

Tüm dokümanı tek bir vektör olarak embed etmek detay kaybına yol açar. 50 sayfayı tek bir vektöre sıkıştırmak istemezsin. Doğru parçalama kritik öneme sahiptir.

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

Sadece İngilizce için eğitilmiş modeller Türkçe performansında zayıf kalır. Cohere multilingual veya BGE-m3 gibi çok dilli modeller tercih edilmelidir.