Czym jest FAISS?
FAISS to biblioteka open-source, która w zbiorze gęstych wektorów wyszukuje te, które są najbliższe wektorowi zapytania. Nazwa oznacza Facebook AI Similarity Search. Projekt pisze ją jako „Faiss”.
Co robi
Gęsty wektor to lista liczb o stałej długości. Sieć neuronowa może zamienić obraz lub tekst w taki wektor. Nazywa się to embeddingiem. FAISS przechowuje wiele wektorów w indeksie. Dla wektora zapytania zwraca najbliższe wektory i ich odległości. Porównuje wektory odległością L2 (euklidesową) lub iloczynem skalarnym. Obsługuje też podobieństwo cosinusowe, które jest iloczynem skalarnym wektorów znormalizowanych.
Grupa Fundamental AI Research w Meta rozwija FAISS. Biblioteka jest napisana w C++ i ma wrappery dla Pythona. Niektóre algorytmy działają też na GPU.
Typy indeksów
Typ indeksu określa równowagę między szybkością a dokładnością.
- IndexFlatL2 i IndexFlatIP porównują zapytanie z każdym wektorem, więc wynik jest dokładny. IndexFlatIP używa iloczynu skalarnego. Przy wektorach znormalizowanych daje podobieństwo cosinusowe.
- IndexIVFFlat dzieli wektory na nlist komórek. Zapytanie przeszukuje tylko nprobe z nich. Jest to szybsze, ale najbliższy sąsiad może zostać pominięty, jeśli jego komórka nie zostanie przeszukana.
- IndexHNSWFlat przeszukuje graf wektorów (hierarchical navigable small world graph).
- IndexIVFPQ dodaje kwantyzację iloczynową (product quantization), która przechowuje każdy wektor w postaci skompresowanej.
Większość indeksów trzeba wytrenować na przykładowych wektorach przed użyciem. IndexFlatL2 nie wymaga treningu.
Skala
FAISS może przeszukiwać zbiory wektorów, które nie mieszczą się w RAM. W artykule z 2017 roku autorzy zbudowali graf najbliższych sąsiadów dla 1 miliarda wektorów w mniej niż 12 godzin na 4 GPU.
Często zadawane pytania
- Kto tworzy FAISS i w jakim języku jest napisany?
- FAISS jest rozwijany głównie w grupie Fundamental AI Research w Meta. Jest napisany w C++ i ma wrappery dla Pythona i numpy. Kod ma licencję MIT. Meta ogłosiła go w marcu 2017 roku.
- Czy FAISS to baza danych wektorowych?
- Nie. FAISS to biblioteka, którą wywołujesz z własnego programu. Jej strona projektu opisuje go jako bibliotekę do wyszukiwania podobieństw i klastrowania gęstych wektorów, a nie jako bazę danych.
- Jak FAISS wyznacza podobieństwo cosinusowe?
- FAISS porównuje wektory odległością L2 lub iloczynem skalarnym. Dla podobieństwa cosinusowego najpierw znormalizuj wektory do długości jednostkowej. Potem użyj indeksu iloczynu skalarnego, na przykład IndexFlatIP. Podobieństwo cosinusowe to iloczyn skalarny wektorów znormalizowanych.
- Czy FAISS zawsze zwraca dokładnego najbliższego sąsiada?
- Nie. Indeksy płaskie (IndexFlatL2 i IndexFlatIP) przeszukują każdy wektor, więc wyniki są dokładne. Indeksy z podziałem, takie jak IndexIVFFlat, przeszukują tylko część danych. Są szybsze, ale tracą gwarancję znalezienia najbliższego sąsiada.
Bibliografia
- faiss-github
- facebookresearch/faiss, README Meta Fundamental AI Research (GitHub)
- faiss-wiki-indexes
- Faiss indexes (Faiss wiki) Meta Fundamental AI Research (GitHub)
- faiss-wiki-getting-started
- Getting started (Faiss wiki) Meta Fundamental AI Research (GitHub)
- faiss-meta-2017
- Faiss: A library for efficient similarity search Engineering at Meta
- johnson-2017
- Billion-scale similarity search with GPUs (Johnson, Douze, Jegou), arXiv:1702.08734 arXiv
- douze-2024
- The Faiss library (Douze et al.), arXiv:2401.08281 arXiv
To wpis referencyjny. TarmacView świadczy usługi inspekcji dronami i nie sprzedaje sprzętu ani materiałów opisanych w tym słowniczku.