Cosine Similarity (Kosinüs Benzerliği)

İki vektör arasındaki açının kosinüsünü hesaplayarak anlamsal benzerliği ölçen matematiksel metrik; RAG ve semantik aramanın temel taşı.

Kosinüs benzerliği (Cosine Similarity), iki vektör arasındaki açının kosinüsünü ölçen ve vektörlerin yönleri arasındaki benzerliği sayısal olarak ifade eden matematiksel bir metriktir. Değeri [-1, 1] aralığında değişir: 1 tam benzer (aynı yön), 0 ortogonal (ilgisiz) ve -1 zıt anlamlıdır. Formülü: cos(θ) = (A·B)/(‖A‖×‖B‖), yani iki vektörün iç çarpımını her birinin uzunluklarının çarpımına böler. Yapay zeka ve doğal dil işleme alanlarında kosinüs benzerliği, çok boyutlu embedding vektörleri arasındaki anlamsal yakınlığı ölçmek için tercih edilir. Vektörlerin büyüklüğünden bağımsız olarak yalnızca yönü dikkate alması, belge uzunluğuna duyarsız bir ölçüm sağlar; bu nedenle tf-idf ve embedding vektörlerinde öklid mesafesine kıyasla daha güvenilir sonuçlar verir. Örneğin kısa bir tweet ile uzun bir makale, aynı konuyu ele alıyorsa benzer kosinüs skoru alırken öklid mesafesi büyük fark gösterir. Vektör veritabanlarında (Pinecone, Weaviate, Qdrant, ChromaDB, pgvector) ve semantik arama motorlarında sorgular önce bir embedding modeline gönderilir; elde edilen vektörle veritabanındaki tüm vektörler arasındaki kosinüs benzerliği hesaplanır ve en yakın k komşu (k-NN) döndürülür. Modern vektör veritabanları HNSW (Hierarchical Navigable Small World) veya IVF (Inverted File Index) gibi yaklaşık en yakın komşu (ANN) algoritmaları sayesinde milyonlarca vektörde bu aramaları milisaniyeler içinde tamamlar. RAG (Retrieval-Augmented Generation) sistemlerinde kosinüs benzerliği kritik bir role sahiptir: kullanıcı sorgusu embedding vektörüne dönüştürülür; bu vektörle belge parçaları (chunk) arasındaki kosinüs benzerliği hesaplanır; en yüksek skoru alan parçalar bağlam olarak LLM'e iletilir. Yaygın kullanılan pratik eşik değeri 0.70–0.85 arasında seçilir. L2-normalize vektörlerde kosinüs benzerliği, nokta çarpımına (dot product) eşdeğer olduğundan GPU matris çarpım işlemleri önemli ölçüde hızlanır. Python'da sklearn.metrics.pairwise.cosine_similarity, torch.nn.functional.cosine_similarity veya NumPy ile np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)) şeklinde hesaplanabilir. Öneri sistemlerinde kullanıcı profilleri ve içerik özellikleri vektör uzayına yansıtılarak kosinüs benzerliğiyle eşleştirme yapılır. Kümeleme ve sınıflandırma görevlerinde de benzerlik matrisi olarak yaygın biçimde kullanılmaktadır. Sıfır vektörlerle tanımsız olduğu ve izotropik olmayan dağılım üreten modellerde MIPS (Maximum Inner Product Search) daha uygun olabilir.

Kosinüs Benzerliği — Temel Kavramlar

functions Formül

cos(θ) = (A·B) / (|A| × |B|) — İç çarpımı vektör büyüklüklerinin çarpımına böler; yönler arasındaki açının kosinüsünü verir.

navigation Yön Odaklı

Büyüklükten bağımsız sadece yönü ölçer. 100 kelimelik ve 1000 kelimelik aynı konuyu anlatan belgeler benzer kosinüs puanı alır.

compare Öklid Mesafesi ile Farkı

Öklid, noktaların konumunu; kosinüs, vektörlerin yönünü karşılaştırır. Metin semantiği için kosinüs genellikle daha anlamlı sonuçlar verir.

linear_scale [-1, 1] Skalası

Normalize edilmiş embedding'ler için 1: özdeş yön, 0: ilgisiz, -1: zıt anlam. Birçok RAG sisteminde 0.7+ eşiği yüksek benzerlik olarak değerlendirilir.

search Kosinüs Benzerliğinin RAG'daki Rolü

RAG akışında: 1) Kullanıcı sorgusu bir embedding modeli ile vektöre dönüştürülür. 2) Vektör veritabanında bu sorgu vektörüne en yüksek kosinüs benzerliğine sahip k belge parçası (chunk) bulunur. 3) Bu parçalar bağlam olarak LLM'e iletilir. 4) Model bağlamı kullanarak yanıt üretir. Benzerlik eşiği, bağlama alınacak parça sayısını ve kalitesini doğrudan etkiler.

Kosinüs Benzerliğinin Teknik Detayları ve Varyantları

  • check_circle Matematiksel Formül: cos(θ) = (A·B) / (|A| × |B|). İki vektörün iç çarpımını, her vektörün normlarının çarpımına böler. Sonuç -1 ile 1 arasında değişir.
  • check_circle Normalizasyon Avantajı: Vektör büyüklüğünden bağımsız yalnızca yönü karşılaştırır. Bu özellik, farklı uzunluktaki belgeler arasında adil karşılaştırma sağlar.
  • check_circle Nokta Çarpımı ile İlişki: L2-normalize edilmiş vektörlerde nokta çarpımı = kosinüs benzerliği. Bu eşdeğerlik GPU matris işlemlerinde büyük hız avantajı sağlar.
  • check_circle Euclidean Mesafe ile Karşılaştırma: Euclidean mesafe mutlak uzaklığı ölçerken kosinüs benzerliği yön uyumunu ölçer. Yüksek boyutlu gömme (embedding) uzaylarında kosinüs genellikle daha anlamlı sonuç verir.
  • check_circle Simetrik Ölçüm: sim(A,B) = sim(B,A); bu simetri, semantik arama ve kümeleme algoritmalarını basitleştirir.
  • check_circle Vektör Veritabanları: Pinecone, Weaviate, Chroma ve pgvector kosinüs benzerliğini en temel dizin ve arama ölçütü olarak destekler.

Kosinüs Benzerliğinin RAG ve Semantik Aramadaki Rolü

Kosinüs benzerliği, modern AI uygulamalarının tam ortasında yer almaktadır. RAG (Retrieval-Augmented Generation) sistemlerinde, sorgu gömmeleri ile belge gommeleri arasındaki kosinüs benzerliği en ilgili belge parçalarını sıralamak için kullanılır. Semantik aramada, anahtar kelime eşleşmesi yerine anlamsal yakınlık ölçülür; 'araba' ve 'taşıt' yüksek kosinüs benzerliğine sahip gömmeler üretir. Öneri sistemlerinde kullanıcı profilini ve ürün özelliklerini gömme olarak temsil edip kosinüs benzerliğiyle en uygun eşleşmeleri bulmak yaygın bir yaklaşımdır. Pratik Python kodu: `from sklearn.metrics.pairwise import cosine_similarity` veya `torch.nn.functional.cosine_similarity(a, b)` ile hesaplanabilir. Numpy ile manuel: `np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))`. Dikkat edilmesi gereken nokta: kosinüs benzerliği sıfır vektörlerle tanımsızdır ve bazı gömme modelleri izotropik olmayan dağılım üretebilir; bu durumlarda MIPS (Maximum Inner Product Search) veya başka metrikler tercih edilebilir.

quiz Sık Sorulan Sorular

  • check_circle Normalizasyon neden önemlidir?: Embedding vektörleri L2 normalize edilirse kosinüs benzerliği = nokta çarpımı (dot product). Bu HNSW ve FAISS gibi kütüphanelerde önemli hız kazancı sağlar.
  • check_circle Negatif kosinüs benzerliği ne anlama gelir?: Vektörler zıt yönlerdeyse teorik olarak negatif değer alabilir. Ancak çoğu embedding modeli pozitif alanda çalışır (ReLU etkisi) ve pratikte negatif değerler nadirdir.
  • check_circle Kosinüs benzerliği nedir?: İki vektör arasındaki açının kosinüsünü hesaplayarak yön benzerliğini ölçen matematiksel metriktir. 1 tam benzerlik, 0 dik açı (ilişkisiz), -1 zıt yönü ifade eder.
  • check_circle Kosinüs benzerliği ne zaman kullanılır?: Metin veya görüntü gömmelerini karşılaştırmak, semantik arama, RAG'da ilgili belge bulma, öneri sistemleri ve kümeleme algoritmalarında kullanılır. Vektör boyutu farklılıklarından etkilenmez.
  • check_circle Kosinüs benzerliği Python'da nasıl hesaplanır?: `sklearn.metrics.pairwise.cosine_similarity(A, B)`, `torch.nn.functional.cosine_similarity(a, b)` veya numpy ile `np.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b))` kullanılabilir.
  • check_circle Kosinüs benzerliği ve Euclidean mesafe arasındaki fark nedir?: Euclidean mesafe mutlak uzaklığı ölçer; büyüklük farkı sonucu etkiler. Kosinüs benzerliği yalnızca yönü karşılaştırır; büyüklükten bağımsızdır. Yüksek boyutlu gömme uzaylarında kosinüs genellikle tercih edilir.