- SQLite'ın yerleşik tam metin arama (FTS5) eklentisi,
sqlite-vecsemantik 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-vecve 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
- Tam metin arama (anahtar kelime araması) tek başına her zaman iyi sonuç vermez
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_headlinestam metin arama sanal tablosu oluşturulurheadlinesütunu tanımlanırcontent=vecontent_rowid=seçenekleri yapılandırılır- Temel
articlestablosundan doğrudanINSERT INTOyapılır - FTS5 tablosunu sorgulamak için yalnızca tek bir
SELECTifadesi 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-lembedeklentisi veSnowflake Artic Embed 1.5modeli kullanılıyor - Metin
lembed()ile embedding'e dönüştürülüpvec0sanal tablosunda saklanır - KNN sorgulamak için yalnızca tek bir
SELECTifadesi 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 ALLile 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
SELECTsorgusu ve CTE ile uygulanabilir :weight_ftsveya:weight_vecdeğ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-vecyalnızca sorgu vektörü ile belge arasındaki L2/kosinüs uzaklığını döndürür - FTS5 sorgularında ifade araması,
NEARsorguları ve Boole işleçleri gibi başka özellikler vardır, ancak bunları vektör aramayla birlikte kullanmak tuhaf olabilir - FTS5 +
sqlite-vecile 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-veciç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
SELECTifadesiyle test edilebilmesi, maliyet gerektirmemesi, tüm programlama dillerinde çalışması ve birkaç satır kodla kolayca uygulanabilmesi önemli avantajlar - Ancak FTS5 ile
sqlite-vecarasında hâlâ iyileştirilmesi gereken noktalar var. FTS5, belgede eşleşen bölümleri vurgulayabilirkensqlite-vecyalnı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-vecgibi 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-veceklenirken 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.)