Kelimeyle değil anlamla aramak
“Kablosuz kulaklık” arayan biri “Bluetooth hoparlör”ü de görmek isteyebilir; LIKE bunu bulamaz. Yapay zekâ modelleri bir metni (veya görseli) yüzlerce sayıdan oluşan bir vektöre (embedding) çevirir. Anlamca yakın metinlerin vektörleri birbirine yakındır. Veritabanı bu vektörleri saklayıp “en yakın olanları” bulduğunda anlamsal arama yapmış olur. RAG (retrieval-augmented generation) denen, şirket belgeleriyle konuşan sohbet botları da bu yöntemle çalışır.
Kosinüs benzerliği
İki vektör arasındaki açının kosinüsüdür: 1'e ne kadar yakınsa o kadar benzerdir.
benzerlik = Σ(aᵢ·bᵢ) ÷ ( √Σaᵢ² · √Σbᵢ² )
Gerçek embedding'ler 384–3072 boyutludur; fikri görmek için 3 boyutlu küçük bir örneği düz SQL ile hesaplayalım:
WITH emb AS (
SELECT 1 AS product_id, 0.90 AS x, 0.10 AS y, 0.05 AS z UNION ALL -- Kablosuz Kulaklık
SELECT 3, 0.80, 0.20, 0.10 UNION ALL -- Bluetooth Hoparlör
SELECT 9, 0.05, 0.90, 0.20 UNION ALL -- Suç ve Ceza
SELECT 28, 0.10, 0.20, 0.95 -- Yoga Matı
)
SELECT b.product_id,
p.name,
ROUND((a.x * b.x + a.y * b.y + a.z * b.z)
/ (SQRT(a.x * a.x + a.y * a.y + a.z * a.z) * SQRT(b.x * b.x + b.y * b.y + b.z * b.z)), 3) AS benzerlik
FROM emb a
JOIN emb b ON b.product_id <> a.product_id
JOIN products p ON p.product_id = b.product_id
WHERE a.product_id = 1
ORDER BY benzerlik DESC;
SQL türlerinde vektör desteği
| SQL türü | Nasıl? |
|---|---|
| SQL Server 2025 / Azure SQL | VECTOR(1536) veri tipi, VECTOR_DISTANCE('cosine', a, b), vektör indeksi |
| PostgreSQL | pgvector eklentisi: vector(1536) tipi, a <=> b (kosinüs mesafesi), HNSW indeksi |
| Oracle 23ai | VECTOR tipi, VECTOR_DISTANCE, AI Vector Search |
| BigQuery | ML.GENERATE_EMBEDDING ile embedding üretme, VECTOR_SEARCH ile arama |
| MySQL 9 | VECTOR tipi (HeatWave'de vektör araması) |
-- PostgreSQL + pgvector
CREATE EXTENSION IF NOT EXISTS vector;
ALTER TABLE products ADD COLUMN embedding vector(1536);
SELECT name
FROM products
ORDER BY embedding <=> (SELECT embedding FROM products WHERE product_id = 1)
LIMIT 5;
-- SQL Server 2025
SELECT TOP (5) name,
VECTOR_DISTANCE('cosine', embedding, @soru_vektoru) AS mesafe
FROM dbo.products
ORDER BY mesafe;