Mi a FAISS?
A FAISS nyílt forráskódú könyvtár, amely sűrű vektorok halmazában megkeresi a lekérdezési vektorhoz legközelebb álló vektorokat. A név a Facebook AI Similarity Search rövidítése. A projekt „Faiss” alakban írja.
Mit csinál?
A sűrű vektor rögzített hosszúságú számlista. Egy neurális hálózat képből vagy szövegből állíthat elő ilyen vektort, amelyet beágyazásnak (embedding) nevezünk. A FAISS sok vektort tárol egy indexben. Egy lekérdezési vektor alapján visszaadja a legközelebbi vektorokat és azok távolságát. L2 (euklideszi) távolsággal vagy skaláris szorzattal hasonlítja össze a vektorokat. Támogatja a koszinusz-hasonlóságot is, amely a normalizált vektorok skaláris szorzata.
A Meta Fundamental AI Research csoportja fejleszti a FAISS-t. A könyvtár C++ nyelven íródott, és Python-csomagolói vannak. Egyes algoritmusok GPU-n is futnak.
Indextípusok
Az indextípus határozza meg a sebesség és a pontosság egyensúlyát.
- IndexFlatL2 és IndexFlatIP a lekérdezést minden vektorral összehasonlítja, ezért az eredmény pontos. Az IndexFlatIP a belső szorzatot használja. Normalizált vektorok esetén koszinusz-hasonlóságot ad.
- IndexIVFFlat a vektorokat nlist cellára osztja. Egy lekérdezés csak nprobe cellát keres át. Ez gyorsabb, de a legközelebbi szomszéd kimaradhat, ha a cellája nincs átkeresve.
- IndexHNSWFlat a vektorok gráfján keres (hierarchikus, navigálható kis világ gráf).
- IndexIVFPQ termékkvantálást (product quantization) ad hozzá, amely minden vektort tömörített formában tárol.
A legtöbb indexet használat előtt példavektorokon kell betanítani. Az IndexFlatL2-höz nincs szükség betanításra.
Méretezés
A FAISS olyan vektorhalmazokban is tud keresni, amelyek nem férnek el a RAM-ban. A 2017-es cikkben a szerzők 1 milliárd vektor legközelebbi szomszéd gráfját építették fel 12 órán belül 4 GPU-n.
Gyakran Ismételt Kérdések
- Ki fejleszti a FAISS-t, és milyen nyelven íródott?
- A FAISS fejlesztését elsősorban a Meta Fundamental AI Research csoportja végzi. C++ nyelven íródott, és Python- és numpy-csomagolói vannak. A kód MIT-licencű. A Meta 2017 márciusában jelentette be.
- A FAISS vektoradatbázis?
- Nem. A FAISS olyan könyvtár, amelyet a saját programból hív meg. A projekt honlapja hasonlósági keresésre és sűrű vektorok klaszterezésére szolgáló könyvtárként írja le, nem adatbázisként.
- Hogyan számítja ki a FAISS a koszinusz-hasonlóságot?
- A FAISS L2 távolsággal vagy skaláris szorzattal hasonlítja össze a vektorokat. Koszinusz-hasonlósághoz először normalizálja a vektorokat egységnyi hosszra. Ezután olyan belső szorzat indexet használjon, mint az IndexFlatIP. A koszinusz-hasonlóság a normalizált vektorok skaláris szorzata.
- A FAISS mindig a pontos legközelebbi szomszédot adja vissza?
- Nem. A lapos indexek (IndexFlatL2 és IndexFlatIP) minden vektort átvizsgálnak, ezért pontos eredményt adnak. A particionált indexek, mint az IndexIVFFlat, az adatoknak csak egy részét keresik át. Gyorsabbak, de elveszítik azt a garanciát, hogy megtalálják a legközelebbi szomszédot.
Hivatkozások
- 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
Ez egy referenciabejegyzés. A TarmacView drónos ellenőrzési szolgáltatásokat nyújt, és nem árulja az ebben a szószedetben leírt felszereléseket vagy anyagokat.