- SQLite'ın yerleşik tam metin arama (FTS5) eklentisi,
sqlite-vec semantik aramasıyla birlikte kullanılarak uygulamalarda "hibrit arama" oluşturulabilir
- Sonuçlar; anahtar kelime önceliği, "semantic" temelli yeniden sıralama ve karşılıklı sıra birleştirme gibi çeşitli yöntemlerle birleştirilebilir
- En önemlisi, her şey SQLite içinde bulunduğu için deney ve prototipler düşük maliyetle ve kolayca oluşturulabilir; harici bir hizmet gerekmez
sqlite-vec ve diğer vektör arama araçlarının temel kullanım alanı, metin verileri için "anlamsal arama" sağlamaktır
- Tam metin arama (anahtar kelime araması) tek başına her zaman iyi sonuç vermez
- "climate change" arandığında, "global warming" gibi belgeler döndürülmez
- Anlamsal arama kullanıldığında sonuçlar "hava"sına göre bulunabilir ve daha fazla anlam içeren daha zengin sonuçlar döndürülebilir
- Ancak yalnızca "anlamsal arama" kullanmak uygulama için zararlı olabilir
Demo: NBC News başlıkları
- 2024 Ocak-Ağustos döneminden 14.500'den fazla başlık içeren bir veri kümesi kullanılıyor
- Toplam 4,3 MB metin verisiyle oldukça küçük bir veri kümesi
FTS5 tablosu oluşturma
fts_headlines tam metin arama sanal tablosu oluşturulur
headline sütunu tanımlanır
content= ve content_rowid= seçenekleri yapılandırılır
- Temel
articles tablosundan doğrudan INSERT INTO yapılır
- FTS5 tablosunu sorgulamak için yalnızca tek bir
SELECT ifadesi gerekir
sqlite-vec ile vektör arama kurma
sqlite-vec, vektör depolama ve vektör karşılaştırması sağlar, ancak embedding üretmez
- Bu örnekte
sqlite-lembed eklentisi ve Snowflake Artic Embed 1.5 modeli kullanılıyor
- Metin
lembed() ile embedding'e dönüştürülüp vec0 sanal tablosunda saklanır
- KNN sorgulamak için yalnızca tek bir
SELECT ifadesi gerekir
Hibrit yaklaşım 1: "Anahtar kelime öncelikli"
- Önce tam metin arama sonuçları döndürülür, ardından kalanlar vektör aramayla tamamlanır
- CTE ile uygulanabilir
- Sonuçlar
UNION ALL ile birleştirilir
Hibrit yaklaşım 2: karşılıklı sıra birleştirme (RRF)
- FTS5 ve vektör eşleşmesi sonuçlarına sıralama verilir
- Tek bir
SELECT sorgusu ve CTE ile uygulanabilir
:weight_fts veya :weight_vec değiştirilerek FTS5/vektör sonuçları farklı şekilde sıralanabilir
Hibrit yaklaşım 3: anlama göre yeniden sıralama
- Yalnızca FTS5 araması yapılır, ancak sonuçlar vektör uzaklığına göre yeniden sıralanır
- Sadece anahtar kelime eşleşmeleri alınır, ancak daha iyi anlamsal eşleşmeler üste taşınır
- BM25'in zayıf yönlerini gidermeye yardımcı olur
Hangi yaklaşım seçilmeli?
- Uygulamaya ve kullanım senaryosuna göre değişir
- Bir e-posta gelen kutusu için arama motoru oluşturuluyorsa anahtar kelime önceliği daha uygundur
- Şirket içi belgeler üzerinde RAG kuruluyorsa RRF iyi bir seçenek olabilir
- Bir web uygulamasında "yinelenen gönderiler" özelliği geliştiriliyorsa anlama göre yeniden sıralama iyi çalışır
Gelecekteki iyileştirmeler
- FTS5 sorguları belgede eşleşen bölümleri "vurgulama" ile gösterebilir, ancak
sqlite-vec yalnızca sorgu vektörü ile belge arasındaki L2/kosinüs uzaklığını döndürür
- FTS5 sorgularında ifade araması,
NEAR sorguları ve Boole işleçleri gibi başka özellikler vardır, ancak bunları vektör aramayla birlikte kullanmak tuhaf olabilir
- FTS5 +
sqlite-vec ile hibrit aramayı genişletmek hantallaşabilir
- FTS5 tabloları her seferinde tüm veri kümesi üzerinde tam arama yaptığından metadata filtreleme veya tek bir FTS5 indeksini desteklemez
sqlite-vec için de durum benzer, ancak bölümleme ve metadata filtreleme desteği yakında gelecek
GN⁺ görüşü
- SQLite ile hibrit arama; deney ve prototiplemeyi kolaylaştırdığı için çeşitli uygulamalarda faydalı görünüyor. Verinin tek bir dosyada tutulması, birden çok sorgunun tek bir
SELECT ifadesiyle test edilebilmesi, maliyet gerektirmemesi, tüm programlama dillerinde çalışması ve birkaç satır kodla kolayca uygulanabilmesi önemli avantajlar
- Ancak FTS5 ile
sqlite-vec arasında hâlâ iyileştirilmesi gereken noktalar var. FTS5, belgede eşleşen bölümleri vurgulayabilirken sqlite-vec yalnızca sorgu vektörü ile belge arasındaki uzaklığı döndürüyor. Ayrıca FTS5'in gelişmiş özellikleri kullanıldığında bunu vektör aramayla birleştirmek tuhaf olabilir
- Bu sınırlamalara rağmen, SQLite ile hibrit arama; veri boyutu ve uygulama türünden bağımsız olarak anahtar kelime araması ile anlamsal aramanın avantajlarını birlikte kullanabilen güçlü bir çözüm
- Yapılandırılmamış veriden bilgi çıkarıp bunu aranabilir hâle getirmenin giderek daha önemli olduğu bir ortamda, FTS5 gibi anahtar kelime araması ile
sqlite-vec gibi vektör aramasını birleştirmek; hem anahtar kelime eşleşmesini hem de bağlamsal ilgiyi dikkate alan gelişmiş bir arama sağlar
- Mevcut arama sistemlerine
sqlite-vec eklenirken ya da yeni bir arama uygulaması geliştirilirken SQLite tabanlı hibrit arama değerlendirmeye değer. Özellikle embedding modelinin kendisinin özelleştirilebilmesi büyük bir avantaj
1 yorum
Projede sqlite içine 1 milyon(+) kayıt ekleyip işleme çalışması yaptım.
Veri miktarı fazlaysa iyi bir SSD gerektiğini düşünüyorum. (SATA SSD kullandığım için işlem süresinin biraz uzadığını düşündüm.)