pgVector

pgVector

pgvector, PostgreSQL veritabanında vektör veri tipleri ile çalışmanıza olanak tanır. Bu, genellikle makine öğrenimi ve yapay zeka uygulamalarında kullanılan embedding vektörleri gibi veriler için oldukça faydalıdır. Özellikle benzerlik aramalarıvektör karşılaştırmaları ve en yakın komşu aramaları (KNN) gibi işlemler için kullanılır. Vektör verisi, genellikle yüksek boyutlu sayılarla temsil edilen veridir (örneğin, bir metnin veya bir görüntünün vektörel temsili).

pgvector, bu tür verilerin saklanmasını ve üzerinde sorgulama yapılmasını sağlayan bir PostgreSQL eklentisidir.

pgvector Kurulumu

git clone https://github.com/pgvector/pgvector.git
cd pgvector
make
sudo make install

psql -u root --port 5432 -d postgres

CREATE EXTENSION IF NOT EXISTS vector;

pgvector Özellikleri

pgvector’ün sunduğu en önemli özellikler şunlardır:

1. Vektör Veri Tipi Desteği:

• pgvector, PostgreSQL için özel olarak tasarlanmış vector veri tipini destekler. Bu tip, vektörleri saklamak için oldukça verimlidir.

2. Vektör Benzerlik Aramaları:

• pgvector, Cosine Similarity, Euclidean Distance, ve Manhattan Distance gibi benzerlik ölçütlerini destekler. Bu sayede, en yakın komşu aramalarını ve vektör benzerliklerini kolayca sorgulayabilirsiniz.

3. Hızlı Arama ve İndeksleme:

• pgvector, yüksek performanslı vektör aramaları için ivfflat ve hnsw gibi özel indeksleme yöntemlerini kullanır.

4. Vektör Normalize Edilmesi:

• Vektörlerin normalize edilmesini destekler. Bu, özellikle cosine similarity gibi karşılaştırmalar yaparken kullanışlıdır.

5. Vektör ile Çalışmak için Fonksiyonlar:

• pgvector, vektör verisi üzerinde sorgular yapabilmek için birçok fonksiyon sunar. Bunlar arasında vector_norm(), vector_distance(), vector_dot() gibi fonksiyonlar bulunur.

Cosine Similarity Euclidean Distance Manhattan Distance

Bu üç kavram, özellikle veri bilimimakine öğrenimidoğal dil işleme (NLP)ve benzerlik aramaları gibi alanlarda yaygın olarak kullanılır. Hepsi, iki vektör arasındaki benzerliği veya mesafeyi ölçmek için kullanılan matematiksel metriklerdir. Şimdi bu üç metriğin ne olduğunu, nasıl kullanıldığını ve her birinin avantajlarını detaylıca inceleyelim.

1. Cosine Similarity (Kosinüs Benzerliği)

Cosine Similarity, iki vektör arasındaki açıyı ölçerek benzerliği hesaplar. Bu, genellikle metin karşılaştırmaları ve belge benzerliği için kullanılır. Cosine similarity’nin ana avantajı, verilerin büyüklüğünden bağımsız olarak yönelimi ölçmesidir. Yani, uzunlukları farklı olsa da iki vektör arasındaki yönelimin ne kadar benzer olduğunu belirler.

Cosine Similarity Aralığı:

• 1: İki vektör tam olarak aynı yönü gösteriyor, yani aynı.

• 0: İki vektör tamamen farklı yönlere sahip, yani birbirine ortogonal.

-1: İki vektör zıt yönlerde.

Kullanım Alanları:

• Metin benzerliği: İki metnin benzerliğini ölçmek (belge arama, arama motorları).

Belge veya cümle karşılaştırma.

Vectör Yönü nedir dediğinizi duyar gibiyim

Vektör Yönü (Vector Direction), bir vektörün hangi doğrultuda olduğunu ifade eder. Matematiksel anlamda, bir vektörün yönü, o vektörün başlatıldığı noktadan (veya orijinalinden) nereye doğru uzandığını gösterir.

Vektörler büyüklük (magnitude) ve yön olmak üzere iki bileşenden oluşur:

• Büyüklük: Vektörün uzunluğunu (veya şiddetini) gösterir. Örneğin, bir hız vektörünün büyüklüğü, bir cismin hızını ifade eder.

• Yön: Vektörün nereden nereye gittiğini (yani doğrultusunu) belirtir. Bu, genellikle vektörün bileşenlerinin oranıyla ölçülür.

Vektör Yönü Nedir?

Vektörün yönü, genellikle açı ile ifade edilir. Örneğin:

• İki boyutlu uzayda bir vektörün yönü, vektörün yatay (x) ve dikey (y) eksenlerle oluşturduğu açıdır.

• Üç boyutlu uzayda ise, vektörün yönü, üç eksen (x, y, z) ile ilişkili bir açıyla belirlenir.

Vektör yönü, özellikle cosine similarity gibi benzerlik ölçümlerinde önemli bir rol oynar, çünkü burada vektörlerin yönleri ne kadar birbirine yakınsa, aralarındaki benzerlik de o kadar yüksek olur.

2. Euclidean Distance (Öklid Mesafesi)

Euclidean Distance, iki nokta arasındaki doğrudan mesafeyi ölçen en klasik mesafe metriğidir. Bu metrik, genellikle geometrik mesafe olarak da bilinir. İki vektör arasındaki farkları dik doğrultularla ölçer.

Euclidean Distance Aralığı:

• 0: İki vektör tamamen aynı, yani mesafe sıfır.

• Daha büyük değerler: Vektörler arasındaki mesafe arttıkça değer büyür.

Kullanım Alanları:

• Veri kümesi arasındaki mesafeleri ölçme.

• Kümeleme algoritmaları (örneğin K-Means).

• Görüntü karşılaştırmaları ve genetik veri gibi yerlerde kullanılır.

3. Manhattan Distance (Manhattan Mesafesi)

Manhattan Distance, iki nokta arasındaki mesafeyi hesaplamak için kullanılan bir ölçüdür ve genellikle “city block” mesafesi olarak da bilinir. Adını, New York City’deki sokak düzeninden alır, çünkü şehirdeki sokaklar dik açıyla birbirine bağlıdır ve bir noktadan başka bir noktaya gitmek için sadece yatay ve dikey yollar kullanılabilir.

Özellikleri:

• Dikey ve yatay mesafelerin toplamı olduğundan, her iki eksende de mesafeleri göz önünde bulundurur.

• Düzgün yollarla ilerler: Yani bir noktadan başka bir noktaya ulaşmak için sadece dikey ve yatay yollar kullanılabilir.

Karmaşık olmayan bir mesafe ölçüsüdür ve genellikle grid tabanlı sistemlerde, sokak düzeni gibi yapılarla çalışırken kullanılır.

Ne Zaman Kullanılır?

• Şehir haritası, yol ağı ve sokak planlaması gibi durumlarda sıklıkla kullanılır.

• Veri kümeleri arasındaki basit mesafeleri hesaplamak için de uygun bir yöntemdir.

IVFFLAT ve HNSW

IVFFLAT (Inverted File Flat)

Çalışma prensibi:

• Verileri K-means clustering gibi algoritmalarla kümelere ayırır.

• Her küme bir “liste” olarak tutulur (lists parametresi).

• Sorgu sırasında bütün veriye bakmaz, sadece ilgili kümeye bakar → hızlı sonuçalırsın.

• Hafıza kullanımı düşük (RAM tüketimi az).

Özellikler:

• Yaklaşık arama (Approximate Search): %100 doğru değildir, ama çok yakındır.

• İndeks boyutu küçüktür: çünkü sadece liste başlıkları tutulur.

• Arama süresi kısa: sadece birkaç liste taranır.

• lists değeri:

• Küçükse → hızlanır, doğruluk düşer.

• Büyükse → doğruluk artar, hız biraz düşer.

Nasıl ayarlanır:

CREATE INDEX ON tablo_adi USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100);

• lists = 100: 100 tane küme oluşturur.

Dikkat:

• İndeksi oluştururken tablo boş olmamalı.

Çünkü pgvector, var olan veriye göre kümeleri oluşturuyor!

özetle IVFFLAT vektör verilerini gruplar halinde organize ederek daha hızlı aramalar yapmanıza olanak tanır. Bu indeksleme yöntemi, özellikle Euclidean Distance gibi metriklerle yapılan aramalarda etkilidir.

HNSW (Hierarchical Navigable Small World)

Çalışma prensibi:

• Verileri bir çok katmanlı (hierarchical) graf yapısına yerleştirir.

• Her veri noktası bir düğüm (node) ve bazı diğer düğümlerle bağlantılıdır.

• Arama yapılınca: yüksek seviyeden başlar, hızlıca en yakın noktalara geçiş yapar (greedy search).

Özellikler:

• Daha yüksek doğruluk: neredeyse %99 doğru sonuç.

• Çok hızlı arama: graf yapısı sayesinde az adımda hedefe ulaşıyor.

• İyi ölçeklenebilirlik: milyonlarca veri noktasını destekler.

• Hafıza kullanımı yüksek olabilir: çünkü graf bağlantıları tutulur.

Nasıl ayarlanır:

CREATE INDEX ON tablo_adi USING hnsw (embedding vector_cosine_ops) WITH (m = 16, ef_construction = 64);

• m → Bir düğüm kaç komşu düğümle bağlı olsun? (Bağlantı sayısı)

• ef_construction → İndeks inşa edilirken kalite/performans dengesi.

Dikkat:

• m yüksek olursa → daha iyi sonuç, daha fazla RAM kullanımı.

• ef_construction yüksek olursa → daha iyi indeks kalitesi, ama oluşturması daha uzun sürer.

özetle HNSW yüksek boyutlu vektörlerdeki benzerlikleri çok hızlı bir şekilde bulmanızı sağlar. Genellikle büyük veri setlerinde kullanılır.

Indexlerle İlgili Sorgular

Cosine similarity, iki vektör arasındaki yönsel benzerliği ölçer. Aşağıdaki sorgu, her bir vektörün cosine similarity ile ne kadar benzer olduğunu hesaplar.

SELECT 
id,
embedding <=> '[1, 2, 3]' AS cosine_similarity
FROM items;


id | cosine_similarity
----+----------------------
1 | 0
2 | 0.025368153802923787
3 | 0
4 | 0.025368153802923787
5 | 0.04058805443332969

Burada:
• embedding <=> '[1, 2, 3]' ifadesi, Cosine Similarity hesaplar. Bu, vektörün yönünü karşılaştıran bir metriktir.

Euclidean distance, iki vektör arasındaki doğrusal mesafeyi ölçer.

SELECT 
id,
embedding <-> '[1, 2, 3]' AS euclidean_distance
FROM items;

id | euclidean_distance
----+--------------------
1 | 0
2 | 5.196152422706632
3 | 0
4 | 5.196152422706632
5 | 10.392304845413264

Burada:
• embedding <-> '[1, 2, 3]' ifadesi, Euclidean Distance hesaplar. Bu, iki vektör arasındaki düz mesafeyi ölçer.

Manhattan distance, iki vektör arasındaki yatay ve dikey mesafelerin toplamıdır.

SELECT 
id,
embedding <#> '[1, 2, 3]' AS manhattan_distance
FROM items;


id | manhattan_distance
----+--------------------
1 | -14
2 | -32
3 | -14
4 | -32
5 | -50

Vektör Normalizasyonu Neden Yapılır?

Vektör normalizasyonu, özellikle benzerlik ölçümleri ve makine öğrenmesigibi alanlarda önemli bir adımdır. İşte normalizasyon yapmanın nedenleri:

1. Cosine Similarity Hesaplamaları İçin:

Cosine Similarity, iki vektör arasındaki açıya dayanarak benzerliği ölçer. Normalizasyon yapılmadan, vektörlerin büyüklüğü (normu) benzerliği etkileyebilir. Ancak vektörler normalleştirildiğinde, büyüklükleri 1’e çekilir ve sadece yön (açı) dikkate alınır. Bu, benzerlik hesaplamalarının gerçekten “benzer” olan verileri daha doğru şekilde tanımlamasını sağlar.

Örnek:

İki vektör arasında Cosine Similarity hesaplamak için, vektörlerin büyüklüklerinin (normlarının) 1’e normalleştirilmiş olması gerekir. Eğer vektörler normalize edilmezse, daha uzun olan vektörler, daha kısa olanlardan daha fazla benzerlik gösterebilir.

2. Vektörlerin Boyutlarının Etkisini Gidermek:

Farklı veriler farklı ölçeklerde olabilir. Örneğin, bir veri kümesinde bazı özellikler çok yüksek değerlere sahipken, diğerleri çok düşük değerlere sahip olabilir. Bu tür verilerde, veri normalizasyonu, tüm verilerin aynı boyutta ve ölçeklenmiş olarak ele alınmasını sağlar. Normalizasyon yapıldığında, her bir vektörün büyüklüğü (normu) 1’e eşit olur, bu da adil karşılaştırmalar yapabilmeyi sağlar.

3. Algoritmalarda Performans İyileştirme:

Vektörler üzerinde yapılan işlemler, genellikle daha küçük ve daha yönetilebilir sayılarla çalıştığında daha verimli hale gelir. Makine öğrenmesi algoritmaları ve benzerlik hesaplamaları gibi uygulamalarda, vektörlerin normalize edilmesi, hesaplamaların daha hızlı ve daha güvenilir olmasını sağlar.

4. Özniteliklerin Eşit Ağırlığa Sahip Olması:

Normalizasyon, farklı özelliklerin (özellikle vektörler üzerinden yapılan hesaplamalarda) eşit ağırlıkta olmasını sağlar. Örneğin, bir özelliğin diğerlerinden çok daha yüksek bir değeri varsa, normalizasyon yapılmazsa bu özellik diğerlerine göre daha fazla etkili olur. Normalizasyon yapıldığında, her bir özellik eşit şekilde değerlendirilir.

5. Makine Öğrenmesinde ve Veri Madenciliğinde Kullanım:

K-means clusteringnearest neighbor search ve k-en yakın komşu (k-NN)gibi algoritmalar, vektörler arasındaki mesafeyi hesaplar. Normalizasyon yapılmazsa, büyük değerlere sahip veriler (örneğin, bir özellik çok büyükse) diğerlerine kıyasla daha fazla ağırlık taşıyabilir. Bu, yanıltıcı sonuçlarverebilir.

6. Daha Sağlam Benzerlik Hesaplamaları:

Normalizasyon, verilerin farklı ölçeklerinde meydana gelebilecek hataları en aza indirir. Böylece, gerçekten benzer olan öğeler arasında daha doğru bir benzerlik hesaplaması yapılabilir.

Şimdilik bu kadar diyelim 🙂

One thought on “pgVector

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back To Top