Co je FAISS?
FAISS je open-source knihovna, která v množině hustých vektorů vyhledává vektory nejblíže dotazovacímu vektoru. Název znamená Facebook AI Similarity Search. Projekt jej píše jako „Faiss“.
Co dělá
Hustý vektor je pevně dlouhý seznam čísel. Neuronová síť může obrázek nebo text převést na takový vektor, kterému se říká embedding. FAISS ukládá mnoho vektorů do indexu. Pro zadaný dotazovací vektor vrací nejbližší vektory a jejich vzdálenosti. Porovnává vektory pomocí L2 (eukleidovské) vzdálenosti nebo skalárního součinu. Podporuje také kosinovou podobnost, což je skalární součin normalizovaných vektorů.
FAISS vyvíjí skupina Fundamental AI Research společnosti Meta. Knihovna je napsaná v C++ a má obaly pro Python. Některé algoritmy běží také na GPU.
Typy indexů
Typ indexu určuje poměr mezi rychlostí a přesností.
- IndexFlatL2 a IndexFlatIP porovnají dotaz s každým vektorem, takže výsledek je přesný. IndexFlatIP používá skalární součin. U normalizovaných vektorů dává kosinovou podobnost.
- IndexIVFFlat rozdělí vektory do nlist buněk. Dotaz prohledá jen nprobe z nich. To je rychlejší, ale nejbližší soused může být přehlédnut, pokud jeho buňka není prohledána.
- IndexHNSWFlat prohledává graf vektorů (hierarchický navigovatelný graf malého světa).
- IndexIVFPQ přidává produktovou kvantizaci, která ukládá každý vektor ve zkomprimované podobě.
Většina indexů se musí před použitím natrénovat na vzorových vektorech. IndexFlatL2 trénink nevyžaduje.
Měřítko
FAISS dokáže prohledávat množiny vektorů, které se nevejdou do RAM. V článku z roku 2017 autoři sestavili graf nejbližších sousedů pro 1 miliardu vektorů za méně než 12 hodin na 4 GPU.
Často kladené otázky
- Kdo vyvíjí FAISS a v jakém jazyce je napsán?
- FAISS vyvíjí hlavně skupina Fundamental AI Research společnosti Meta. Je napsán v C++ a má obaly pro Python a numpy. Kód má licenci MIT. Knihovnu Meta oznámila v březnu 2017.
- Je FAISS vektorová databáze?
- Ne. FAISS je knihovna, kterou voláte z vlastního programu. Na stránce projektu je popsána jako knihovna pro vyhledávání podobnosti a shlukování hustých vektorů, ne jako databáze.
- Jak FAISS hledá kosinovou podobnost?
- FAISS porovnává vektory vzdáleností L2 nebo skalárním součinem. Pro kosinovou podobnost nejprve vektory normalizujte na jednotkovou délku. Pak použijte index se skalárním součinem, například IndexFlatIP. Kosinová podobnost je skalární součin normalizovaných vektorů.
- Vrací FAISS vždy přesného nejbližšího souseda?
- Ne. Ploché indexy (IndexFlatL2 a IndexFlatIP) prohledají každý vektor, a proto vracejí přesné výsledky. Rozdělené indexy, jako IndexIVFFlat, prohledají jen část dat. Jsou rychlejší, ale ztrácejí záruku, že najdou nejbližšího souseda.
Reference
- 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í položka. TarmacView poskytuje služby inspekce drony a neprodává zařízení ani materiály popsané v tomto slovníku.