Čo je FAISS?
FAISS je open-source knižnica, ktorá v množine hustých vektorov vyhľadáva vektory najbližšie k dotazovému vektoru. Názov je skratka pre Facebook AI Similarity Search. Projekt ho píše „Faiss“.
Čo FAISS robí
Hustý vektor je pevný zoznam čísel. Neurónová sieť dokáže obrázok alebo text previesť na takýto vektor, ktorý sa nazýva embedding. FAISS ukladá veľa vektorov do indexu. Pri dotaznom vektore vráti najbližšie vektory a ich vzdialenosti. Porovnáva vektory vzdialenosťou L2 (euklidovskou) alebo skalárnym súčinom. Podporuje aj kosínusovú podobnosť, čo je skalárny súčin normalizovaných vektorov.
Skupina Fundamental AI Research spoločnosti Meta vyvíja FAISS. Knižnica je napísaná v jazyku C++ a má obaly pre Python. Niektoré algoritmy bežia aj na GPU.
Typy indexov
Typ indexu určuje pomer medzi rýchlosťou a presnosťou.
- IndexFlatL2 a IndexFlatIP porovnávajú dotaz s každým vektorom, takže výsledok je presný. IndexFlatIP používa skalárny súčin. Pri normalizovaných vektoroch dáva kosínusovú podobnosť.
- IndexIVFFlat rozdelí vektory do nlist buniek. Dotaz prehľadá iba nprobe z nich. Je to rýchlejšie, ale najbližší vektor sa môže minúť, ak jeho bunka nie je prehľadaná.
- IndexHNSWFlat prehľadáva graf vektorov (hierarchický navigovateľný graf malého sveta, angl. hierarchical navigable small world graph).
- IndexIVFPQ pridáva produktovú kvantizáciu, ktorá ukladá každý vektor v komprimovanej podobe.
Väčšina indexov sa pred použitím musí natrénovať na vzorových vektoroch. IndexFlatL2 trénovanie nepotrebuje.
Rozsah
FAISS dokáže prehľadávať množiny vektorov, ktoré sa nezmestia do operačnej pamäte (RAM). V článku z roku 2017 autori zostrojili graf najbližších susedov pre 1 miliardu vektorov za menej ako 12 hodín na 4 GPU.
Často kladené otázky
- Kto vyvíja FAISS a v akom jazyku je napísaný?
- FAISS vyvíja hlavne skupina Fundamental AI Research spoločnosti Meta. Je napísaný v jazyku C++ a má obaly pre Python a numpy. Kód má licenciu MIT. Meta ho oznámila v marci 2017.
- Je FAISS vektorová databáza?
- Nie. FAISS je knižnica, ktorú volá váš vlastný program. Jej projektová stránka ju opisuje ako knižnicu na vyhľadávanie podobnosti a zhlukovanie hustých vektorov, nie ako databázu.
- Ako FAISS zisťuje kosínusovú podobnosť?
- FAISS porovnáva vektory vzdialenosťou L2 alebo skalárnym súčinom. Pre kosínusovú podobnosť najprv normalizujte vektory na jednotkovú dĺžku. Potom použite index so skalárnym súčinom, napríklad IndexFlatIP. Kosínusová podobnosť je skalárny súčin normalizovaných vektorov.
- Vracia FAISS vždy presný najbližší sused?
- Nie. Ploché indexy (IndexFlatL2 a IndexFlatIP) prehľadajú každý vektor, a preto vracajú presné výsledky. Rozdelené indexy, ako IndexIVFFlat, prehľadajú iba časť dát. Sú rýchlejšie, ale strácajú záruku, že nájdu najbližší sused.
Referencie
- 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
Toto je referenčný záznam. TarmacView poskytuje služby dronovej inšpekcie a nepredáva vybavenie ani materiály opísané v tomto slovníku.