Hər hansı bir "semantik" sistem — istər RAG (Retrieval-Augmented Generation) boru kəməri, istər tövsiyə mexanizmi, istərsə də təsvir axtarışı — əsasən bir əməliyyata əsaslanır: verilmiş vektora ən yaxın olan vektorları milyonlarla giriş arasından tapmaq. Bu vektorlar əslində "embedding" adlanan, bir neçə yüzdən bir neçə minə qədər rəqəmdən ibarət massivlərdir və "yaxınlıq" məna yaxınlığı deməkdir.
Çoxları düşünə bilər ki, verilənlər bazası ya bütün vektorları sadəcə skan edir (yavaş, amma dəqiq), ya da bəzi ağıllı ağac strukturlarından istifadə edərək birbaşa cavaba çatır. Əslində heç biri doğru deyil. Müasir vektor axtarış sistemləri bilərəkdən ən yaxın vektorların təxminən ən yaxını ilə kifayətlənir — və məhz bu kompromis vektor axtarışını sürətli edir. Praktikada iki alqoritm pgvector, Qdrant, FAISS kimi alətlərdə demək olar ki, bütün yükü öz üzərinə götürür: IVF (Inverted File Index) və HNSW (Hierarchical Navigable Small World).
Yüksək ölçülü fəzanın qəribəliyi: niyə təxmini axtarış?
Təbii sual: niyə təxmini (approximate)? Sadəcə əsl ən yaxın qonşunu tapmaq olmaz? İki və ya üç ölçüdə bu işi k-d ağacı kimi strukturlar asanlıqla görür. Amma embedding-lər yüzlərlə ölçüdə yaşayır və yüksək ölçülü fəza çox qəribədir. Buna "ölçü lənəti" (curse of dimensionality) deyilir. Ölçülər artdıqca ən yaxın və ən uzaq nöqtəyə olan məsafələr demək olar ki, eyniləşir. Formal olaraq, (d_max − d_min) / d_min ifadəsi sıfıra yaxınlaşır. Hər şey hər şeydən təxminən eyni məsafədə olanda, ağac strukturu "bu budaq çox uzaqdır, atla" deyə bilmir — bütün sərhədlər üst-üstə düşür, hər budaq məntiqli görünür və axtarış yenə bütün məlumatı skan etməyə çevrilir.
Beləliklə, sualı dəyişirik: "ən yaxını tapdığını sübut et" əvəzinə "sürətlə çox güman ki, ən yaxınlar arasında olanı tap" deyirik. Bu, Approximate Nearest Neighbor (ANN) axtarışı adlanır və sürət üçün dəqiqlik zəmanətindən imtina edir. Keyfiyyət parametri "recall" olur: həqiqətən ən yaxın olan k vektorun nə qədərini qaytardıq? Hər alqoritm recall'u yüksək saxlamaq üçün fərqli strategiya tətbiq edir.
IVF: sadə, lakin effektiv
Inverted File Index (IVF) iki alqoritmdən daha sadəsidir. Əvvəlcə bütün verilənlər bazası k-means alqoritmi ilə nlist sayda qrupa (klaster) bölünür. Hər qrupun bir mərkəzi (centroid) olur və hər vektor ən yaxın mərkəzin yanında qeydə alınır. Sorğu gələndə vektor milyonlarla vektorla yox, bir neçə centroid'lə müqayisə edilir; ən yaxın nprobe sayda centroid seçilir və yalnız həmin klasterlərin içi axtarılır. İki əsas parametr var: nlist (klaster sayı) və nprobe (axtarılan klaster sayı). nprobe'i artırsanız, recall yüksəlir, lakin gecikmə də artır.
Əgər yaddaş problemi varsa, IVF tez-tez Product Quantization (PQ) ilə birləşdirilir. Bu üsulda hər vektor parçalara bölünür, hər parça üçün kiçik kod kitabçası yaradılır və vektor yalnız bu kodların indeksi kimi saxlanılır. Məsələn, 128 ölçülü bir float vektor bir neçə bayta sığışdırıla bilər. Bu, milyardlarla vektorun yaddaşa sığmasına imkan verir.
HNSW: sürət və yaddaş arasında tarazlıq
Hierarchical Navigable Small World (HNSW) qrafik əsaslı bir alqoritmdir və hazırda bir çox vektor verilənlər bazasında standart hesab olunur. İdeya gözəldir: hər vektor qrafikdə bir düyün (node) olur və özünün ən yaxın qonşuları ilə əlaqələnir. Bu qrafik qatlardan ibarətdir: ən yuxarı qatda az sayda düyün uzunməsafəli əlaqələrlə, aşağı qatlarda isə daha çox düyün qısaməsafəli əlaqələrlə yerləşir. Axtarış yuxarı qatdan başlayır, sürətlə uzaq əlaqələrlə düzgün bölgəyə çatır, sonra aşağı qatlara enərək daha incə səviyyədə axtarış aparır. Bu, ünvana çatmağa bənzəyir: əvvəl şəhər, sonra rayon, sonra küçə, sonra ev.
HNSW-nin üç parametri var: M (hər düyünün qonşu sayı), ef_construction (qrafik qurularkən keyfiyyət), ef_search (sorğu zamanı namizəd siyahısının ölçüsü). ef_search artdıqca recall yüksəlir, lakin sürət azalır.
Hansını seçməli?
- HNSW — ən yaxşı sürət-recall tarazlığı tələb edən, RAM-i kifayət edən kiçik və orta ölçülü verilənlər üçün idealdır. Bir çox sistemin standart seçimi məhz budur.
- IVF (+PQ) — verilənlər bazası çox böyük olduqda və ya yaddaş məhdud olduqda seçilir. Aşağı yaddaş izi və təmiz miqyaslanma qabiliyyəti ilə seçilir. Recall'u artırmaq üçün nprobe parametrini tənzimləmək lazım gəlir.
Və yekunda bir xatırlatma: verilənlər bazanız bir neçə min vektordan ibarətdirsə, sadəcə hamısını skan edin. Bu üsul dəqiqdir, heç bir qurma xərci tələb etmir və müasir avadanlıqda kifayət qədər sürətlidir. ANN alqoritmləri yalnız xətti skan həqiqətən ağrılı olduqda öz mürəkkəbliyinə dəyər.
Mənbə: Dev.to (https://dev.to/arthurpro/how-vector-search-actually-works-ivf-and-hnsw-1hnb)


