Vektör Veritabanları: Teknik Bir Başlangıç Kılavuzu [PDF]
(tge-data-web.nyc3.digitaloceanspaces.com)- Yapay zeka uygulamaları yapılandırılmamış ve yüksek boyutlu verilerle çalıştıkça, vektör veritabanları verileri sayısal diziler biçiminde depolayıp arayan özel sistemler olarak önem kazanıyor
- Temel nokta, kayıtları satır-sütunlar ya da açık ilişkiler yerine veri özellikleri arasındaki benzerliğe göre bağlayarak örtük anlamdan yararlanmak
- Anlamsal ilişkiler çok boyutlu vektörler olarak kodlandığında benzerlik araması, kümeleme ve sınıflandırma gibi analiz işleri daha hızlı yapılabiliyor
- Üretken yapay zekada, büyük miktarda yüksek boyutlu veriyi yönetmek ve benzer vektör aramasıyla eğitim ve çıkarım hızını ve kişiselleştirilmiş sonuçları iyileştirmek için kullanılıyor
- Gelişmiş indeksleme, arama hedefini yüksek alakalılığa sahip bir alt kümeye indirerek arama süresini azaltıyor ve benzerliği diğer koşullarla birleştiren karmaşık sorguları mümkün kılıyor
Vektör veritabanlarının işlediği veri biçimi
- Vektör veritabanı, yüksek boyutlu veri temsilleri olan vektörleri depolamak, yönetmek ve işlemek için özel bir veritabanıdır
- Geleneksel veritabanları verileri satır ve sütunlarda saklarken, vektör veritabanları verileri çok boyutlu uzayda vektörler olarak saklar
- Her vektör, bir veri noktasının özelliklerini veya niteliklerini temsil eden sayısal bir dizidir
Anlam ve benzerlik temelli bağlantılar
- Geleneksel veritabanları, öğeler arasındaki ilişkileri açık bağlantılar veya hiyerarşiler temelinde kurar
- Vektör veritabanları, kayıtları veri özelliklerinin benzerliğine göre algoritmik olarak bağlar
- Bu yöntem, veritabanı öğelerinin içindeki örtük anlama dayanarak daha sezgisel bağlantılar oluşturabilir
Analitik sorgulara göre yapılandırma
- Veriler, anlamsal ilişkileri yansıtan çok boyutlu vektörler, yani sayısal diziler olarak kodlandığında gelişmiş analiz işleri hızlı biçimde gerçekleştirilebilir
- Desteklenen işlemler arasında benzerlik araması, kümeleme ve sınıflandırma bulunur
- Hesaplama modeli; örüntü tespiti, öngörüsel analiz ve yüksek analiz gereksinimleri olan uygulamalar için uygundur
Yapay zeka ve üretken yapay zekada kullanım
- Yapay zeka ve makine öğreniminin yaygınlaşması, vektör veritabanlarına talebin artmasının başlıca nedenlerinden biridir
- Üretken yapay zeka alanında vektör veritabanları, büyük miktarda yüksek boyutlu veriyi verimli şekilde depolamak ve yönetmek üzere tasarlanmıştır
- Benzer vektörleri hızla arayıp sonuçları getirebildiği için üretken yapay zeka modellerinin eğitim ve çıkarım süreçlerini önemli ölçüde hızlandırabilir
- Üretken yapay zeka sistemlerinin kullanıcılara daha kişiselleştirilmiş ve daha alakalı içerik sunmasına da yardımcı olur
İndeksleme ve karmaşık arama koşulları
- Vektör veritabanları, benzer vektörleri hızla sorgulamak ve aramak için gelişmiş indeksleme teknikleri kullanır
- İndeks, arama hedefini daha küçük ve daha alakalı vektör alt kümelerine daraltarak arama süresini önemli ölçüde azaltır
- Benzerlik koşullarını diğer arama ölçütleriyle birleştiren karmaşık sorguları da işleyebilir
- Bu esneklik, gelişmiş arama özellikleri gerektiren ileri düzey yapay zeka uygulamaları için önemlidir
1 yorum
Hacker News görüşleri
A Comprehensive Survey on Vector Database: Storage and Retrieval Technique, Challenge: https://arxiv.org/abs/2310.11703
Survey of Vector Database Management Systems: https://arxiv.org/abs/2310.14021
What are Embeddings: https://raw.githubusercontent.com/veekaybee/what_are_embeddi...
Kaynak atfı: https://twitter.com/eatonphil/status/1745524630624862314 ve https://twitter.com/ChristophMolnar/status/17457316026829826...
Açıklamalı sunum materyalleri ve isteğe bağlı 38 dakikalık video ile de sunuluyor
Wikipedia maddesi: https://en.wikipedia.org/wiki/Vector_database
Vector Database 101: https://zilliz.com/learn/introduction-to-unstructured-data
Yaklaşık en yakın komşu ve benzerlik araması: https://vinija.ai/concepts/ann-similarity-search/
Dağıtık veritabanları: https://15445.courses.cs.cmu.edu/fall2021/notes/21-distribut...
Bu benim de merak ettiğim bir noktaydı; bir kıstas veya pratik kural olsa iyi olurdu
Kısa süre önce Simon Willison’ın harika
llmaracıyla embedding’lerle uğraştım; yaklaşım olabilecek en basit şeydi: mesafe hesaplamak için birkaç UDF ile birlikte embedding’leri SQLite’ta saklamakBu sadelik cazip, ama trafik ve veri belli bir eşiği aşınca daha uzmanlaşmış bir veritabanına ihtiyaç duyulacağı açık; merak ettiğim şey bu sınırın yaklaşık nerede olduğu
Arama en basit haliyle her şeyi tarayıp Hamming mesafesiyle (
xorvepopcount) karşılaştırıyordu; 2011 model tek çekirdekli bir MBP üzerinde 200 bin hash değerini 10ms’nin altında tarayıp en benzer öğeyi bulabiliyordumYaklaşık 1.000 satır koddu, yani sonunda harici bir vektör veritabanına ihtiyaç olmadı
Ama bunun ötesinde Pinecone gibi makul seçenekler karmaşıklaşıyor, yavaşlıyor ve saçma derecede pahalı hale geliyor
Benim bildiğim en iyi seçenek turbopuffer.com; Pinecone’dan yaklaşık 100 kat daha ucuz ve gerçekten ölçekleniyor gibi görünüyor
Slayttaki önerilen vektör DB listesinde yoktu, ben de iyi bir öneri olarak bırakayım dedim
https://news.ycombinator.com/item?id=38703943
Bu ders; vektörler, vektör veritabanları, indeksler ve benzerlik aramasının temel kavramlarını kapsayan teori ile demoları birleştiriyordu ve sonunda Pinecone ile Weaviate veritabanı demolarıyla bitiyordu
Bu aşamada insan muhakemesi çok ince bir biçimde, bazen neredeyse yok sayılacak ölçüde devreye giriyor; buna rağmen dışarıdan bakınca çok otomatikleştirilmiş, “tamamen matematikten ibaret” bir sistem gibi görünüyor
Ses örneğini ele alırsak, N boyutlu bir vektör oluşturmak için hangi özellikleri çıkaracaksınız? Kolay cevap “olabildiğince çok” olabilir
Ama birincisi, kolayca adlandırılabilen özellikler bile özelliklendirme verisinde erişilebilir olmayabilir
İkincisi, alan bilgisi derin değilse kullanmanız gereken örtük özelliklerin varlığından bile habersiz olabilirsiniz
Üçüncüsü, alan bilginiz derin olsa bile yine de kullanmanız gereken örtük özellikleri bilmiyor olabilirsiniz
Örneğin Reich tarzı faz kaydırmalı minimal müziğin hayranı olduğunuzu varsayalım. Bu türün tipik bir örneği olan, örneğin Piano Phase’e benzeyen müzikleri bulmak için vektör veritabanına dolaylı bir sorgu yapıyorsunuz
Veritabanı; baskın frekans, nota başlangıçları arasındaki aralık, ses yüksekliği, frekans dağılımına dayalı tını özellikleri, algılanan kök nota ve gam gibi çeşitli ses ve müzik özelliklerini kullanıyor
Ancak veritabanının özellik kümesinde “zamana göre notalar arasındaki aralığın sabit olması” yoksa, sorgu tını, armoni, melodi ve ritmi benzer olanları bulabilir ama temel özellik olan iki melodik çizginin göreli fazının sürekli değişmesini paylaşan parçaları bulmak tamamen şansa kalır
Görsel, metin, sayısal veri gibi her tür veride benzer örnekler üretmek zor değil
Elbette bu, vektör veritabanlarının ve özellik sınıflandırmasının işe yaramadığı anlamına gelmez
Belirli bir veri kümesinde eşleşme kalıpları bulunurken ya da bulunamazken en başta sorulması gereken sorulardan biri, özellik kümesinin tam olduğuna dair güçlü bir güvence olup olmadığı, yoksa bunun nasıl genişletileceğidir
Vektör veritabanları arama ve arama sonucunu geri getirme için ayarlanmıştır
Genelde vektör üretme yöntemi, büyük ölçekli ön-eğitimli bir modeli ince ayar yapıp iç temsillerini çıkarmaktır
Veri kümesinde başarılı sorgu ve geri getirme sonuçları bulunduğundan, ham girdiyi kullanıp vektör veritabanının desteklediği benzerlik hedefine göre kayıp fonksiyonunu optimize etmek yeterlidir
Tablo, metin, görüntü, ses gibi genel biçimlerde özellik seçiminde insan yargısı neredeyse hiç devreye girmez; sadece attention uygulanır
Bu arada E5-Mistral gibi modern metin-vektör modelleri, veri kümesinde insan kürasyonu bile gerektirmez
“Bilmediğini bilmeme” noktasını iyi yakalamış
Bir başka Steve Reich hayranı görmek güzel; sevdiğim Music for 18 Musicians benzeri parça önerilerini merak ediyorum
Harika bir genel bakış, ancak son bölüm Postgres+pgvector gibi bir vektör deposu ile Pinecone gibi bir vektör veritabanı arasında hangisinin seçileceğine dair klişe soruyu ele almıyor
Sorgu hızı, ekleme/indeks oluşturma hızı, kullanım kolaylığı gibi çeşitli ödünleşmeleri tartışıp her uygulama için uygun seçime yardımcı olan daha fazla sunum görmek isterim
PR her zaman memnuniyetle karşılanır
Veritabanı, depolama katmanına türlü türlü işlevler eklenmiş halidir
digitaloceanspaces.com S3 tarzı bir barındırma sağlayıcısı, bu yüzden Hacker News’in buna özel işlem uygulayıp alan adını sadece digitaloceanspaces.com diye göstermek yerine tge-data-web.nyc3.digitaloceanspaces.com gibi göstermesi iyi olurdu
Gerçi S3’te de aynı sorun var gibi görünüyor: https://news.ycombinator.com/item?id=38876761
Başka yerlerde emsal var. x.github.io alt alan siteleri burada özel işleme tabi tutuluyor: https://news.ycombinator.com/from?site=lfranke.github.io
Bu materyal, mühendislerin başlangıç noktası olarak kullanması için oldukça riskli görünüyor
Anlama göre kümelendiği ya da analize optimize edildiği gibi ifadeler şüpheli
Kümelenme, hesaplanan embedding’e bağlıdır. Embedding’in verinin anlamını iyi yaklaştırdığına inanıyorsanız böyle düşünmek kabul edilebilir olabilir
Ama bunu bozan embedding’leri hayal etmek kolay. Örneğin anlamca aynı olan bir ses dosyası ile bir metin dosyasını aynı embedding sürecine soksanız bile, multimodal değilse embedding vektör uzayında büyük olasılıkla birbirlerinden uzak düşerler
Gelecekte, anlamsal benzerlikten çok kullanım biçimine göre vektör uzayında birbirine yakın yerleştirilen embedding’lerin kesinlikle ortaya çıkacağını düşünüyorum
Bir öneri sistemi kuruyorsanız, tek seferlik bir satın almanın çeşitli varyasyonlarını birbirine yakın gruplamak istemezsiniz
Örneğin anlamsal olarak en benzer uçuşlar aynı varış noktasına giden farklı saatlerdeki uçuşlar veya yakın havalimanlarına giden uçuşlar olabilir; ama pratikte, o uçuşu alanların sıkça birlikte satın aldığı otelleri gruplayıp göstermek isteyebilirsiniz
Vektör veritabanları, zaman farkındalığı gibi ek boyutları da veriye katabilir. Anlamı kodlayan vektörleri kullanmak zorunda değilsiniz
Bu yüzden vektör veritabanları, girdi vektörüne dayalı sorgulama ya da arama için optimize edilmiştir; OLAP sorgularına benzemez
Snowflake’ten çok Elasticsearch’e daha yakındır. Vektör uzayı üzerinde raporlama ya da büyük ölçekli analiz beklentisiyle vektör veritabanı kullanacaksanız, benim bildiğim kadarıyla şu anda doğrudan kullanılabilir bir ürün yok
Bir elma fotoğrafından “elmalık” özelliğini temsil eden bir vektöre gidildiğini ve sonra bu vektörün sıradan matematikle başka vektörlerle karşılaştırıldığını anlıyorum
Anlamadığım şey, görüntüyü girdi alıp vektör üreten kişi/şeyin kim/ne olduğu
Belgeler için de aynı şey geçerli. Diziye bir sayı daha ekleyerek bir boyut eklemek istersem, vektör veritabanının hangi kısmını değiştirirsem o boyut vektör hesabına dahil olur?
Yoksa belgeyi, görüntüyü ya da her neyse onu vektör temsiline çevirme süreci veritabanının dışında başka bir yöntemle mi yapılıyor?
Düzeltme: Embedding hesaplama işi makine öğrenimi algoritmalarının görevi gibi görünüyor, ama o zaman o algoritmaların da önce eğitilmesi gerekir. Sonuçta iş sonsuz bir eğitim zincirine çıkıyor
PQ’nun neden bir “indeks stratejisi” olarak listelendiğini anlamıyorum
PQ, vektör sıkıştırma/kuantizasyon tekniğidir; arama uzayını bölme yöntemi değildir
Vektörleri PQ ile brute-force/düz indeks, IVF indeks ve HNSW içinde kodlayabilirsiniz; Faiss’te bunlar sırasıyla IndexPQ, IndexIVFPQ, IndexHNSWPQ olarak yer alır
İsterseniz k-D ağaçları veya ANNOY ile de kullanabilirsiniz
“Sorgu hızı doğruluktan daha önemliyse çok büyük veri kümeleri için HNSW ya da Annoy kullanın” sözü de sorunlu
Grafik tabanlı tekniklerin bellek ek yükü ve kurulum maliyeti büyüktür; milyar ölçekli veri kümeleri için pratik değildir
Genelde IVF tekniklerinden daha doğru ve daha hızlıdırlar, ama benzer doğruluğu elde etmek için IVF’in çok sayıda hücreyi ziyaret etmesi gerekir
Buna karşılık IVF, diğer tekniklerin aksine büyük ek yük olmadan trilyon ölçekli veritabanlarına kadar ölçeklenebilir ve yine de makul hız/doğruluk ödünleşmesi sunar
Ben olsam, “sorgu hızı önemli ama yüksek doğruluk da istiyorsanız ve düz/brute-force indeksin gerçekçi olmadığı orta ölçekli veri kümelerinde kullanın” derdim
Önce PQ uygular, sonra yeni ayrık vektör üzerinde KNN çalıştırırsınız
Böylece sözlük uzayını sabit boyuta sıkıştırabilirsiniz
SQLite gibi gömülü bir embedding veritabanı önerisi var mı?
Küçük ölçekli problemler için; ama LMDB + FAISS'ten daha kullanışlı olsa iyi olur
Python süreci içinde çalışabiliyor, içeriği SQLite'ta saklıyor ve embedding vektörlerini yerel vektör indeks formatlarında (Faiss, HNSW, Annoy) saklamayı destekliyor
Bu arada txtai'nin ana geliştiricisi benim
https://github.com/patricktrainer/hackernews-comment-search
llmaracı yalnızca SQLite ve birkaç UDF kullanıyorBu sadelik hoşuma gidiyor ama ne zaman ve neden yetersiz kalacağını pek kestiremiyorum
Go içinse yakın zamanda Chroma arayüzünden ilham alarak chromem-go'yu yapmaya başladım: https://github.com/philippgille/chromem-go
Henüz gelişmiş özellikler veya büyük ölçekli kullanım için değil ama RAG demosu çalışıyor
[1] https://github.com/chroma-core/chroma