Qu'est-ce que FAISS ?
FAISS est une bibliothèque open-source qui cherche, dans un ensemble de vecteurs denses, les vecteurs les plus proches d’un vecteur de requête. Le nom signifie Facebook AI Similarity Search. Le projet écrit le nom « Faiss ».
Fonctionnement
Un vecteur dense est une liste de nombres de longueur fixe. Un réseau de neurones peut transformer une image ou un texte en un tel vecteur, appelé plongement (embedding). FAISS stocke de nombreux vecteurs dans un index. Pour un vecteur de requête, il renvoie les vecteurs les plus proches et leurs distances. Il compare les vecteurs par distance L2 (euclidienne) ou par produit scalaire. Il prend aussi en charge la similarité cosinus, qui est le produit scalaire des vecteurs normalisés.
Le groupe Fundamental AI Research de Meta développe FAISS. La bibliothèque est écrite en C++ et possède des interfaces pour Python. Certains algorithmes s’exécutent aussi sur un GPU.
Types d’index
Le type d’index fixe l’équilibre entre vitesse et exactitude.
- IndexFlatL2 et IndexFlatIP comparent la requête à chaque vecteur, le résultat est donc exact. IndexFlatIP utilise le produit scalaire. Avec des vecteurs normalisés, il donne la similarité cosinus.
- IndexIVFFlat répartit les vecteurs en nlist cellules. Une requête ne parcourt que nprobe d’entre elles. C’est plus rapide, mais le plus proche voisin peut être manqué si sa cellule n’est pas parcourue.
- IndexHNSWFlat parcourt un graphe des vecteurs (un graphe hiérarchique navigable à petit monde).
- IndexIVFPQ ajoute la quantification produit, qui stocke chaque vecteur sous une forme compressée.
La plupart des index doivent être entraînés sur des vecteurs d’exemple avant leur utilisation. IndexFlatL2 n’a pas besoin d’entraînement.
Échelle
FAISS peut parcourir des ensembles de vecteurs qui ne tiennent pas dans la RAM. Dans l’article de 2017, les auteurs ont construit un graphe de plus proches voisins de 1 milliard de vecteurs en moins de 12 heures sur 4 GPU.
Foire aux questions
- Qui développe FAISS et dans quel langage est-il écrit ?
- FAISS est développé principalement par le groupe Fundamental AI Research de Meta. Il est écrit en C++ et possède des interfaces pour Python et numpy. Le code est sous licence MIT. Meta l'a annoncé en mars 2017.
- FAISS est-il une base de données vectorielle ?
- Non. FAISS est une bibliothèque que vous appelez depuis votre propre programme. Sa page de projet la décrit comme une bibliothèque de recherche de similarité et de clustering de vecteurs denses, et non comme une base de données.
- Comment FAISS calcule-t-il la similarité cosinus ?
- FAISS compare les vecteurs par distance L2 ou par produit scalaire. Pour la similarité cosinus, normalisez d'abord les vecteurs à une longueur unitaire. Utilisez ensuite un index de produit scalaire, comme IndexFlatIP. La similarité cosinus est le produit scalaire des vecteurs normalisés.
- FAISS renvoie-t-il toujours le plus proche voisin exact ?
- Non. Les index plats (IndexFlatL2 et IndexFlatIP) comparent la requête à chaque vecteur, et renvoient donc des résultats exacts. Les index partitionnés, comme IndexIVFFlat, ne parcourent qu'une partie des données. Ils sont plus rapides, mais ils perdent la garantie de trouver le plus proche voisin.
Références
- 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
Ceci est une entrée de référence. TarmacView fournit des services d'inspection par drone et ne vend pas l'équipement ou les matériaux décrits dans ce glossaire.