Takip et

Manticore Search’te KNN Ön Filtreleme: Vektör Aramalarında Performans ve Doğruluk Optimizasyonu

Manticore Search, yüksek performanslı ve ölçeklenebilir bir arama motoru olarak, metin tabanlı aramaların yanı sıra modern uygulamaların vazgeçilmezi haline gelen vektör aramalarını da desteklemektedir.

Manticore Search’te KNN Ön Filtreleme: Vektör Aramalarında Performans ve Doğruluk Optimizasyonu

Manticore Search, yüksek performanslı ve ölçeklenebilir bir arama motoru olarak, metin tabanlı aramaların yanı sıra modern uygulamaların vazgeçilmezi haline gelen vektör aramalarını da desteklemektedir. Büyük veri kümelerinde en yakın komşu (KNN) aramaları, özellikle yoğun vektörler söz konusu olduğunda önemli hesaplama kaynakları gerektirebilir. Bu makale, Manticore Search’te KNN aramalarının verimliliğini artırmak için kullanılan güçlü bir teknik olan ön filtrelemeyi detaylı bir şekilde ele alacaktır. Ön filtreleme, arama kapsamını akıllıca daraltarak hem performansı artırır hem de kaynak tüketimini optimize eder.

KNN ve Vektör Aramanın Temelleri

Modern arama ve öneri sistemlerinin temelini oluşturan vektör aramaları, verilerin anlamsal yakınlığını keşfetmemizi sağlar. Bu bölümde, KNN algoritmasının ne olduğunu, vektör embeddings kavramını ve bu tür aramaların getirdiği zorlukları inceleyeceğiz.

KNN Nedir?

K-En Yakın Komşu (K-Nearest Neighbors – KNN) algoritması, bir veri noktasının uzaydaki en yakın K adet komşusunu bulmaya dayalı basit ama güçlü bir makine öğrenimi algoritmasıdır. Sınıflandırma, regresyon ve öneri sistemleri gibi çeşitli alanlarda kullanılır. Örneğin, bir kullanıcının beğendiği filmlere benzer K adet film bulmak veya bir ürünün görsel özelliklerine en yakın K adet ürünü listelemek KNN’nin yaygın kullanım alanlarındandır. Temel prensip, bir sorgu vektörüne en benzer olan veri vektörlerini belirli bir uzaklık veya benzerlik ölçütüne göre sıralamaktır.

Vektör Embeddings ve Benzerlik Ölçütleri

Vektör embeddings, metin, resim, ses gibi karmaşık veri türlerini, yüksek boyutlu sayısal vektörlere dönüştürme işlemidir. Bu vektörler, verinin anlamsal özelliklerini ve ilişkilerini yakalar. Örneğin, “kedi” ve “köpek” kelimelerinin embedding’leri, “masa” kelimesinin embedding’inden birbirine daha yakın konumlanacaktır. Bu sayede, kelimeler arasındaki anlamsal benzerlikler matematiksel olarak ifade edilebilir.

Vektörler arasındaki benzerliği veya uzaklığı ölçmek için çeşitli metrikler kullanılır:

  • Kosinüs Benzerliği: İki vektör arasındaki açının kosinüsünü ölçer. Vektörlerin yönü önemlidir, büyüklüğü değil. Özellikle metin ve görüntü benzerliği aramalarında yaygın olarak kullanılır.
  • Öklid Mesafesi: İki vektör arasındaki düz çizgi mesafesidir. Vektörlerin büyüklüğü ve yönü birlikte hesaba katılır.
  • Manhattan Mesafesi (L1 Mesafesi): Vektörler arasındaki mutlak farkların toplamıdır. “Şehir bloğu” mesafesi olarak da bilinir.

Manticore Search, bu benzerlik ölçütlerini kullanarak vektör aramalarını destekler.

Yoğun Vektör Aramanın Zorlukları

Büyük veri kümelerinde, özellikle yüksek boyutlu (örneğin 512, 768 veya daha fazla boyutlu) yoğun vektörler üzerinde KNN araması yapmak ciddi zorluklar içerir. Her sorgu vektörü için veri kümesindeki her vektörle karşılaştırma yapmak (brute-force arama), veri kümesi büyüdükçe katlanarak artan bir hesaplama maliyetine yol açar. Bu durum, “boyut laneti” (curse of dimensionality) olarak bilinir ve sorgu sürelerinin kabul edilemez seviyelere çıkmasına neden olabilir. Bu nedenle, verimli bir şekilde KNN araması yapabilmek için optimizasyon tekniklerine ihtiyaç duyulur.

Manticore Search’te Vektör Araması

Manticore Search, modern arama motorlarının sunduğu gelişmiş yeteneklerden biri olan vektör aramalarını yerleşik olarak destekler. Bu yetenek, metin tabanlı aramaların ötesine geçerek anlamsal aramaların kapısını aralar.

Manticore’un Vektör Desteği

Manticore Search, VECTOR alan tipi sayesinde yüksek boyutlu vektör verilerini depolayabilir ve bu veriler üzerinde hızlı KNN aramaları gerçekleştirebilir. Manticore, vektörleri optimize edilmiş bir şekilde indeksleyerek, milyonlarca hatta milyarlarca vektör arasında bile düşük gecikmeli aramalar yapılmasına olanak tanır. Bu, özellikle büyük ölçekli öneri sistemleri, anlamsal arama motorları ve görsel arama uygulamaları için kritik bir özelliktir.

VECTOR Alan Tipi

Manticore’da vektör verilerini depolamak için özel bir alan tipi olan VECTOR kullanılır. Bu alan tipi, vektörün boyutunu ve her bir bileşenin veri tipini (örneğin FLOAT32) belirtmenizi sağlar. İndeksleme sırasında, Manticore bu vektörleri verimli bir şekilde saklar ve arama performansını artırmak için özel indeks yapıları kullanabilir.

Örnek bir indeks tanımı:


CREATE TABLE my_index (
    id INT,
    text_field TEXT,
    vector_field VECTOR(128, FLOAT32)
);

Bu tanım, 128 boyutlu FLOAT32 tipinde vektörleri saklayabilen bir vector_field oluşturur.

KNN Fonksiyonu

Manticore Search, vektör aramalarını gerçekleştirmek için KNN fonksiyonunu sunar. Bu fonksiyon, bir sorgu vektörüne en yakın K adet vektörü bulmak için kullanılır. SQL benzeri sorgu diliyle entegre olması, geliştiricilerin kolayca vektör aramaları yapmasını sağlar.


SELECT id, KNN(vector_field, [0.1, 0.2, ..., 0.128], 10) AS distance
FROM my_index
ORDER BY distance ASC
LIMIT 10;

Yukarıdaki sorgu, my_index tablosundaki vector_field alanında, verilen sorgu vektörüne en yakın 10 vektörü bulur ve uzaklıklarına göre sıralar. [0.1, 0.2, ..., 0.128] kısmı, kullanıcının aradığı hedef vektörü temsil eder.

Ön Filtrelemenin Önemi ve Amacı

Vektör aramalarının gücüne rağmen, tüm veri kümesi üzerinde doğrudan KNN çalıştırmak, özellikle büyük ölçekli sistemlerde verimsiz olabilir. Ön filtreleme, bu sorunu çözmek için kritik bir optimizasyon tekniğidir.

Büyük Veri Kümelerinde Verimlilik

Milyonlarca veya milyarlarca vektör içeren veri kümelerinde, her sorgu için tüm vektörleri karşılaştırmak, kabul edilemez derecede uzun sorgu sürelerine ve yüksek hesaplama maliyetlerine yol açar. Bu, gerçek zamanlı uygulamalar için bir darboğaz oluşturur. Ön filtreleme, arama uzayını önemli ölçüde küçülterek bu sorunu hafifletir.

Arama Kapsamını Daraltma

Ön filtrelemenin temel amacı, KNN aramasının yapılacağı veri kümesini, belirli kriterlere göre önceden daraltmaktır. Örneğin, bir e-ticaret sitesinde "tişört" arayan bir kullanıcıya sadece "giyim" kategorisindeki ürünlerin vektörleri arasında arama yapmak, "elektronik" veya "mobilya" gibi alakasız kategorilerdeki ürünleri baştan elemek anlamına gelir. Bu, hem arama hızını artırır hem de sonuçların alaka düzeyini yükseltir.

Kaynak Tüketimini Azaltma

Daha küçük bir veri alt kümesi üzerinde KNN araması yapmak, CPU, bellek ve disk G/Ç gibi sistem kaynaklarının daha az tüketilmesini sağlar. Bu, sunucu maliyetlerini düşürür ve sistemin genel ölçeklenebilirliğini artırır. Azalan kaynak tüketimi, aynı donanım üzerinde daha fazla sorguya hizmet verebilmek veya daha karmaşık modellerle çalışabilmek anlamına gelir.

KNN Ön Filtreleme Nasıl Çalışır?

Ön filtreleme, iki ana aşamadan oluşan bir süreçtir: ilk olarak geleneksel filtreleme, ardından bu filtrelenmiş veri üzerinde vektör araması.

Filtreleme Aşaması

Bu aşama, Manticore Search'in güçlü SQL benzeri sorgu yeteneklerini kullanarak, vektör araması yapılmadan önce veri kümesini belirli kriterlere göre daraltmayı içerir. Geleneksel arama motorlarında kullanılan WHERE koşulları bu aşamada devreye girer. Örneğin, kategori ID'si, tarih aralığı, fiyat aralığı, kullanıcı ID'si veya metin alanlarındaki anahtar kelimeler gibi yapılandırılmış meta veriler kullanılarak ilk eleme yapılır. Bu filtreler, verimli indeksler (örneğin, B-tree veya hash indeksleri) üzerinde çalıştığı için çok hızlıdır.

KNN Arama Aşaması

Filtreleme aşamasından sonra elde edilen daha küçük veri alt kümesi üzerinde, KNN fonksiyonu kullanılarak vektör benzerlik hesaplamaları yapılır. Bu, yalnızca potansiyel olarak alakalı olan vektörler arasında yoğun hesaplama gerektiren işlemin yapılmasını sağlar. Bu iki aşamalı yaklaşım, brute-force KNN'nin maliyetini önemli ölçüde azaltır.

Ön Filtreleme Stratejileri

Etkili bir ön filtreleme stratejisi geliştirmek, uygulamanın gereksinimlerine ve veri yapısına bağlıdır. Yaygın stratejiler şunları içerir:

  • Meta Veri Tabanlı Filtreleme: Ürün kategorisi, marka, yazar, yayın tarihi, kullanıcı yaşı gibi yapılandırılmış alanlar üzerinde filtreleme yapmak. Bu, en yaygın ve etkili yöntemdir.
  • Coğrafi Filtreleme: Belirli bir coğrafi konum veya yarıçap içindeki öğeleri filtrelemek.
  • Kullanıcı Tercihleri: Kullanıcının geçmiş etkileşimlerine veya açık tercihlerine göre sonuçları daraltmak.
  • Güvenlik ve Yetkilendirme: Sadece kullanıcının erişim izni olan öğeleri arama kapsamına dahil etmek.

Doğru filtreleme stratejisi, hem performansı hem de arama sonuçlarının alaka düzeyini optimize etmek için kritik öneme sahiptir.

Manticore Search'te Ön Filtreleme Uygulamaları ve Yapılandırma

Manticore Search, SQL benzeri sorgu dili sayesinde ön filtrelemeyi son derece kolaylaştırır. İşte nasıl uygulanacağı ve bazı pratik ipuçları.

SQL ile Ön Filtreleme

Manticore Search'te ön filtreleme, SELECT sorgularında WHERE koşulları kullanılarak doğrudan uygulanır. WHERE koşulu, KNN fonksiyonundan önce değerlendirilir ve böylece vektör araması sadece filtrelenmiş dokümanlar üzerinde çalışır.


SELECT
    id,
    title,
    KNN(embedding_vector, [0.1, 0.2, 0.3, ..., 0.N], 10) AS distance
FROM
    products_index
WHERE
    category_id = 5
    AND price BETWEEN 10.00 AND 50.00
    AND is_available = TRUE
ORDER BY
    distance ASC
LIMIT 10;

Bu örnekte:

  • products_index tablosunda arama yapılıyor.
  • category_id = 5, price BETWEEN 10.00 AND 50.00 ve is_available = TRUE koşulları, vektör araması yapılmadan önce uygulanır. Bu, arama kapsamını yalnızca 5 numaralı kategorideki, fiyatı 10-50 arasında olan ve stokta bulunan ürünlerle sınırlar.
  • KNN(...) fonksiyonu, bu filtrelenmiş ürünler arasından hedef vektöre en yakın 10 ürünü bulur.
  • Sonuçlar, hesaplanan distance'a göre artan sırada (en yakınlar önce) sıralanır ve ilk 10 tanesi döndürülür.

Bu yapı, hem performansı hem de arama sonuçlarının alaka düzeyini artırmak için oldukça etkilidir.

Gerçek Dünya Senaryoları

Ön filtreleme, çeşitli gerçek dünya uygulamalarında kritik rol oynar:

  • E-ticaret Ürün Önerileri: Bir kullanıcıya, baktığı ürüne benzer ancak aynı kategori, marka veya fiyat aralığındaki ürünleri önermek.
  • İçerik Keşfi: Bir makaleye benzer diğer makaleleri bulurken, aynı yazarın yazdığı veya aynı etiketlere sahip olanları önceliklendirmek.
  • Görsel Arama: Yüklenen bir görsele benzer görselleri ararken, sadece belirli bir renk paletine veya temaya sahip olanları filtrelemek.
  • Güvenlik Uygulamaları: Anormal ağ trafiği desenlerini tespit ederken, sadece belirli IP aralıklarından gelen veya belirli bir zaman diliminde gerçekleşen olayları incelemek.

Yapılandırma İpuçları

Manticore Search'te ön filtrelemeyi daha da optimize etmek için bazı yapılandırma ipuçları:

  • Doğru Alan Tipleri: Filtreleme için kullanılacak alanları (category_id, price, is_available gibi) uygun Manticore alan tipleriyle tanımlayın (örn. INT, FLOAT, BOOL). Bu, Manticore'un bu alanlar üzerinde hızlı indeksler oluşturmasını sağlar.
  • attributes Kullanımı: Filtreleme için kullanılacak alanları indeks tanımında attributes olarak belirtmek, Manticore'un bu alanlara hızlı erişimini sağlar. Örneğin: category_id INT ATTRIBUTE.
  • Bellek ve Disk Dengesi: Büyük indeksler için, bellek ve disk kullanımı arasında bir denge kurmak önemlidir. Manticore, filtreleme işlemleri için bellekteki verilere öncelik verir, bu da performansı artırır.

Performans Optimizasyonu ve En İyi Uygulamalar

Manticore Search'te KNN ön filtrelemenin tam potansiyelini kullanmak için bazı en iyi uygulamaları ve optimizasyon stratejilerini göz önünde bulundurmak önemlidir.

Doğru Filtre Alanlarını Seçme

Ön filtreleme için seçilen alanlar, performansı ve sonuçların alaka düzeyini doğrudan etkiler. İdeal olarak, filtreleme alanları:

  • Yüksek Seçiciliğe Sahip Olmalı: Filtre uygulandığında, arama kapsamını önemli ölçüde daraltan alanlar seçilmelidir. Örneğin, sadece 2-3 farklı değeri olan bir alan yerine, yüzlerce veya binlerce farklı değeri olan bir kategori alanı daha etkili olabilir.
  • İyi İndekslenmiş Olmalı: Manticore'un hızlı erişim sağlayabileceği şekilde indekslenmiş alanlar kullanılmalıdır.
  • Sorgu Başına Değişmeli: Genellikle kullanıcı girdisine veya bağlama göre değişen filtreler daha faydalıdır.

İndeksleme Stratejileri

Manticore Search'in indeksleme yetenekleri, ön filtrelemenin performansını doğrudan etkiler. Özellikle attributes olarak tanımlanan alanlar, Manticore'un dahili olarak hızlı erişim yapıları oluşturmasını sağlar. Örneğin:


CREATE TABLE my_products (
    id INT,
    name TEXT,
    category_id INT ATTRIBUTE,
    price FLOAT ATTRIBUTE,
    created_at TIMESTAMP ATTRIBUTE,
    embedding_vector VECTOR(768, FLOAT32)
);

Bu tanımda, category_id, price ve created_at alanları, Manticore'un bu alanlar üzerinde hızlı filtreleme yapabilmesi için optimize edilmiştir. Vektör alanı ise yoğun vektör aramaları için özel olarak işlenir. Bu ayrım, hem geleneksel filtreleme hem de vektör araması için en iyi performansı sağlar.

Ölçeklenebilirlik ve Dağıtık Yapılar

Büyük veri kümeleriyle çalışırken, Manticore Search'in dağıtık mimarisi ve sharding yetenekleri ön filtreleme ile birleştiğinde maksimum verimlilik sağlar. Ön filtreleme, her bir shard'da (parça) yalnızca ilgili veri alt kümeleri üzerinde KNN aramasının yapılmasını sağlayarak, dağıtık sistemlerdeki ağ trafiğini ve genel hesaplama yükünü azaltır. Replikasyon ise yüksek erişilebilirlik ve sorgu yük dengelemesi sunar. Bu kombinasyon, milyarlarca vektör içeren sistemlerde bile düşük gecikmeli ve yüksek performanslı KNN aramaları yapmayı mümkün kılar.

Sonuç

Manticore Search'te KNN ön filtreleme, vektör aramalarının performansını ve verimliliğini artırmak için vazgeçilmez bir stratejidir. Geleneksel SQL filtreleme yeteneklerini vektör arama yetenekleriyle birleştirerek, geliştiricilere büyük veri kümelerinde bile hızlı, alakalı ve kaynak dostu çözümler oluşturma gücü verir. Ön filtreleme, arama kapsamını akıllıca daraltarak gereksiz hesaplama yükünü ortadan kaldırır ve böylece sistemin genel ölçeklenebilirliğini ve tepki süresini önemli ölçüde iyileştirir. Doğru filtreleme stratejileri ve Manticore'un güçlü indeksleme özelliklerinin birleşimiyle, anlamsal arama ve öneri sistemleri çok daha etkin bir şekilde hayata geçirilebilir.

Sık Sorulan Sorular (SSS)

Ön filtreleme tüm KNN aramaları için gerekli midir?

Hayır, küçük veri kümeleri (örneğin birkaç bin veya on bin vektör) için brute-force KNN araması genellikle kabul edilebilir bir performans sunar. Ancak, milyonlarca veya milyarlarca vektör içeren orta ve büyük ölçekli veri kümelerinde, ön filtreleme performansı önemli ölçüde artırdığı ve kaynak tüketimini azalttığı için şiddetle tavsiye edilir.

Ön filtreleme doğruluğu etkiler mi?

Doğru bir şekilde uygulandığında, ön filtreleme arama sonuçlarının doğruluğunu etkilemez. Aksine, arama kapsamını daha alakalı bir alt kümeye daraltarak sonuçların alaka düzeyini artırabilir. Ancak, yanlış veya çok kısıtlayıcı filtreler kullanıldığında, potansiyel olarak ilgili sonuçların arama kapsamından çıkarılmasına ve dolayısıyla sonuçların eksik olmasına neden olabilir. Bu nedenle, filtre kriterlerinin dikkatlice seçilmesi önemlidir.

Manticore Search hangi benzerlik ölçütlerini destekler?

Manticore Search, KNN fonksiyonu ile birlikte Kosinüs Benzerliği (varsayılan), Öklid Mesafesi (L2) ve Manhattan Mesafesi (L1) gibi yaygın benzerlik ölçütlerini destekler. Kullanıcılar, ihtiyaçlarına göre uygun metriği seçebilirler.

Ön filtreleme için hangi alan tipleri en uygundur?

Ön filtreleme için en uygun alan tipleri, sayısal (INT, FLOAT), tarih/zaman (TIMESTAMP), boolean (BOOL) ve kategorik metin (genellikle INT veya STRING olarak indekslenmiş) alanlarıdır. Bu alanlar üzerinde Manticore hızlı indeksler oluşturabilir ve WHERE koşullarıyla verimli bir şekilde filtreleme yapabilir.

Ön filtreleme ve ANN (Approximate Nearest Neighbor) arasındaki fark nedir?

Ön filtreleme, kesin KNN (Exact Nearest Neighbor) araması için ar

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

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

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.