Robocikowo>ROBOCIKOWO
Wyszukiwanie

IVF

2003AktywnyOpublikowano: 20 maja 2026Aktualizacja: 20 maja 2026Opublikowany
IVF (Inverted File Index) to klasyczny algorytm ANN, który dzieli przestrzeń wektorową na nlist komórek Voronoi (centroidy k-means) i podczas zapytania przeszukuje tylko nprobe najbliższych komórek. Stanowi podstawę indeksów IVF, IVF-PQ i IVF-OPQ w bibliotece FAISS oraz w większości wektorowych baz danych.
Kluczowa innowacja
Partycjonowanie przestrzeni wektorowej na komórki Voronoi wokół centroidów k-means, dzięki czemu zapytanie odwiedza tylko nprobe najbliższych komórek zamiast całego zbioru — z dokładnego k-NN robi się ANN o sterowalnym trade-offie recall/szybkość.
Kategoria
Wyszukiwanie
Poziom abstrakcji
Building block
Poziom operacji
RetrievalDaneInferencja
Zastosowania
Wyszukiwanie semantyczne na 10⁶–10⁹ embeddingachIVF-PQ jako tani indeks dla RAG na dużych korpusachWektorowe bazy danych: FAISS, Milvus, Qdrant, pgvectorWyszukiwanie obrazów po cechach (image retrieval)Rekomendacje na ogromnych katalogachKlastrowanie wstępne w pipeline analizy embeddingówWyszukiwanie podobnych logów / fingerprintów

Jak działa

Trening (offline): (1) pobierz próbkę zbioru (np. 1–5%), (2) uruchom k-means z k = nlist i otrzymaj centroidy c₁…c_nlist, (3) dla każdego wektora z bazy znajdź najbliższy centroid i dopisz go do listy odwróconej tej komórki. Indeks fizycznie to słownik: centroid → tablica (id wektora, wektor). Zapytanie: (a) policz odległości od q do wszystkich nlist centroidów — koszt O(nlist · D), (b) wybierz nprobe komórek o najmniejszej odległości, (c) zeskanuj wektory z wybranych list i utrzymuj heap top-k, (d) zwróć top-k. Klucz to dobranie nlist (typowo √N — np. nlist=4096 dla 16M wektorów) i nprobe (zwykle 1–10% nlist). Wariant IVF-PQ zastępuje pełne wektory w listach kodami PQ (np. 8–16 bajtów per wektor) — odległości liczone są przez Asymmetric Distance Computation (ADC) z pretrenowanej tablicy LUT, co dramatycznie obniża zużycie RAM i przyspiesza skan komórki. IVF-OPQ dodaje wstępną rotację ortogonalną optymalizującą rozproszenie wymiarów między subkwantyzery PQ.

Rozwiązany problem

Dokładne k-NN na milionach lub miliardach wektorów wymaga przeszukania całego zbioru przy każdym zapytaniu, co jest niewykonalne czasowo. IVF rozwiązuje ten problem przez wstępne partycjonowanie zbioru: zamiast O(N · D) operacji na zapytanie wystarczy O((nlist + nprobe · N/nlist) · D), a parametr nprobe daje administratorowi twardą kontrolę nad balansem recall vs. latency.

Komponenty

k-means coarse quantizerDefiniuje partycjonowanie przestrzeni

Wytrenowane centroidy k-means definiują nlist komórek Voronoi. Liczba i jakość centroidów decydują o tym, jak rozkład danych mapuje się na listy odwrócone.

Oficjalna

Inverted listsFizyczna struktura indeksu

Dla każdego centroida przechowywana jest lista ID i (opcjonalnie skompresowanych) wektorów przypisanych do jego komórki — analogicznie do inverted index w wyszukiwaniu tekstowym.

nprobe selectorMechanizm wyboru komórek do skanowania

Podczas zapytania liczone są odległości q→centroid i wybierane nprobe najbliższych komórek. nprobe to główny pokrętło recall/latency.

Optional PQ encoderKompresja wektorów w komórkach (IVF-PQ)

W wariancie IVF-PQ wektory w listach trzymane są jako krótkie kody PQ; odległości liczone są z LUT przez Asymmetric Distance Computation, co radykalnie obniża RAM i przyspiesza skan.

Oficjalna

Implementacja

Pułapki implementacyjne
Zła próbka treningowa → nierówne komórkiWysoka

Jeśli próbka do k-means nie reprezentuje rozkładu produkcyjnego (np. zła stratyfikacja, za mały rozmiar), powstają „mega-komórki" zawierające większość danych, co degraduje recall i niweluje zysk z indeksu.

Rozwiązanie:Użyć próbki ≥ 30 · nlist, losowo stratyfikowanej; monitorować rozmiary list po przypisaniu.
Zbyt małe nprobe → niski recallWysoka

Domyślne nprobe=1 daje często recall poniżej 50% na realnych zbiorach. To najczęstsze źródło „IVF jest słaby" w benchmarkach.

Rozwiązanie:Tunować nprobe na walidacji do osiągnięcia docelowego recall; trzymać profile dla różnych SLO.
Brak normalizacji / niewłaściwa metrykaKrytyczna

Mieszanie metryk (cosine vs L2) lub brak L2-normalizacji embeddingów dla cosine prowadzi do całkowicie błędnych centroidów i wyników wyszukiwania.

Rozwiązanie:Ujednolicić metrykę między treningiem, indeksem i zapytaniem; dla cosine L2-normalizować przed indeksowaniem.
Częste mutacje bez ponownego treningu centroidówŚrednia

IVF jest semi-statyczny — gdy rozkład danych dryfuje, centroidy przestają być reprezentatywne, recall spada. Dodawanie wektorów bez retreningu pogłębia problem.

Rozwiązanie:Okresowy retrening kwantyzatora; w środowiskach mutowalnych preferować HNSW lub FreshDiskANN.
IVF-PQ z m źle dobranym do DŚrednia

W IVF-PQ wymiar D musi być podzielny przez m. Wybór m, który nie pasuje (np. m=8 dla D=384 dobre, m=10 — błąd) powoduje błędy konstrukcji lub konieczność paddingu, a źle dobrane m drastycznie obniża recall.

Rozwiązanie:Dobrać m jako dzielnik D; rozważyć IVF-OPQ, który częściowo łagodzi ten problem przez rotację.

Ewolucja

Oryginalny paper · 2003 · ICCV 2003 · Josef Sivic
Video Google: A Text Retrieval Approach to Object Matching in Videos
Josef Sivic, Andrew Zisserman
2003
Sivic & Zisserman — Video Google (inverted file for visual features)
Punkt przełomowy

Pomysł indeksu odwróconego dla cech wizualnych: każdy „visual word" (centroid) ma listę dokumentów, w których występuje. Praktyczna geneza IVF dla wektorów.

2011
Jégou et al. — IVF + Product Quantization (IVF-PQ)
Punkt przełomowy

Połączenie IVF z PQ („Product Quantization for Nearest Neighbor Search", IEEE TPAMI 2011) — fundament współczesnych ANN w skali miliardów.

2017
FAISS — open-source biblioteka z IVF i IVF-PQ

Facebook AI Research udostępnia FAISS — najpopularniejszą implementację IVF i jej wariantów, z akceleracją GPU.

2020
IVF jako domyślny indeks w wektorowych bazach danych

Milvus, Qdrant, Weaviate, pgvector i inne wystawiają IVF / IVF-PQ jako podstawowy indeks ANN obok HNSW.

Hiperparametry (konfigurowalne osie)

Number of inverted lists (nlist)Krytyczna

Liczba centroidów k-means / komórek Voronoi. Większe nlist = krótsze listy = szybszy skan, ale większy koszt selekcji centroidów i dłuższy trening. Typowo nlist ≈ √N.

1024Małe zbiory (~1M).
4096Średnie zbiory (~10M).
65536Duże zbiory (~100M+).
Number of probed cells (nprobe)Krytyczna

Liczba komórek odwiedzanych podczas zapytania. Główne pokrętło recall vs latency — większe nprobe = wyższy recall i wolniejsze zapytanie.

1Najszybciej, recall często <50%.
8Typowy punkt pracy dla 90%+ recall.
128Wysoki recall, kosztem latency.
k-means training sample sizeWysoka

Liczba wektorów użytych do treningu kwantyzatora k-means. Zalecane ≥ 30 · nlist; zbyt mała próbka prowadzi do nierównych komórek i degradacji recall.

30 · nlistFAISS rekomendacja minimum.
256 · nlistDla maksymalnej stabilności.
PQ subquantizers (m) — for IVF-PQWysoka

Wariant IVF-PQ: liczba pod-kwantyzerów PQ. Wektor dimD jest dzielony na m równych segmentów, każdy kwantyzowany niezależnie. Większe m = wyższy recall, większy RAM.

88 bajtów per wektor.
1616 bajtów per wektor.
3232 bajty per wektor, zbliżone do IVF-Flat.

Złożoność obliczeniowa

Złożoność czasowa: O((nlist + nprobe · N/nlist) · D) per query. Złożoność przestrzenna: O(nlist · D + N · D) (IVF) / O(nlist · D + N · b_PQ) (IVF-PQ).

Wąskie gardło obliczeniowe

Per-cell vector scan

Najwięcej cykli zjada liniowy skan wektorów w nprobe wybranych komórkach. Dla IVF-Flat to dot-product na pełnych wektorach, dla IVF-PQ to ADC z tablicą LUT — w obu przypadkach to operacje wektorowe na CPU.

Paradygmat wykonania

Tryb główny
sparse

Tylko nprobe z nlist komórek jest aktywnych na zapytanie — paradygmat „sparse cell activation".

Wzorzec aktywacji
subset_active

Równoległość

Poziom równoległości
fully_parallel

Zapytania są niezależne. Wewnątrz jednego zapytania skan różnych komórek można też puścić równolegle — IVF jest klasycznie data-parallel.

Zakres
inferenceacross_devices

Wymagania sprzętowe

Podstawowe

Skanowanie list i obliczanie odległości to gęste operacje wektorowe — idealne dla SIMD CPU (AVX2/AVX-512). IVF-PQ z ADC dodatkowo intensywnie korzysta z LUT, które trzymają się w cache L1/L2.

Dobry fit

FAISS GPU akceleruje IVF / IVF-PQ — duża równoległość zapytań i regularne pętle pasują do GPU, choć Tensor Cores wykorzystywane są ograniczenie (operacje nie są klasycznym GEMM).

Dobry fit

IVF działa wydajnie na ARM (Graviton, Apple Silicon) i x86; wymaga głównie dobrej przepustowości pamięci i SIMD.