Cours
Les moteurs de recherche traditionnels excellent pour trouver des correspondances exactes, mais peinent souvent à identifier des éléments similaires sur la base de contenus tels que des images, des vidéos ou du texte. Cette limite freine le développement d’applications comme les systèmes de recommandation, la recherche d’images et les systèmes de détection d’anomalies.
Pour y remédier, Meta AI (ex-Facebook AI) a développé Facebook AI Similarity Search (Faiss).
Faiss est une bibliothèque spécialement conçue pour exécuter des recherches de similarité de façon efficace, particulièrement utile avec de grands jeux de données multimédias.
Dans cet article, je vous présente Faiss et vous explique comment commencer à l’utiliser pour vos applications de recherche.
Qu’est-ce que Faiss ?
Faiss, pour Facebook AI Similarity Search, est une bibliothèque open source dédiée à la recherche de similarité et au clustering de vecteurs denses. Faiss permet de construire un index et d’effectuer des recherches avec une rapidité et une efficacité mémoire remarquables. Elle améliore en outre les performances de recherche grâce à des implémentations GPU pour plusieurs méthodes d’indexation.
Fonctionnalités clés
Faiss accélère les recherches de plus proches voisins en indexant les vecteurs avec des algorithmes avancés comme le clustering k-means et la quantification par produits (product quantization). Ces méthodes aident Faiss à organiser et à récupérer les vecteurs efficacement, garantissant des recherches de similarité rapides et précises. Voici un aperçu des algorithmes d’indexation :
- Clustering k-means : cet algorithme segmente les données en clusters, ce qui réduit l’espace de recherche en se concentrant, lors des requêtes, sur les clusters les plus pertinents.
- Product quantization (PQ) : la PQ compresse les vecteurs en codes plus courts, ce qui réduit fortement l’usage mémoire et accélère la recherche sans perte majeure de précision.
- Optimized product quantization (OPQ) : version améliorée de la PQ, l’OPQ fait pivoter les données pour mieux s’adapter à la grille de quantification, améliorant l’exactitude des vecteurs compressés.
Flexibilité
Faiss est très polyvalent pour mesurer la similarité entre vecteurs, avec un large choix de mesures de distance. Les principales sont :
- Distance euclidienne : mesure la distance « en ligne droite » entre deux points, idéale lorsque la similarité géométrique des vecteurs est déterminante.
- Similarité cosinus : s’intéresse au cosinus de l’angle entre deux vecteurs, en privilégiant leur orientation plutôt que leur norme. Particulièrement utile en analyse de texte, où la direction compte plus que la longueur.
Ces options vous permettent de choisir la métrique la plus adaptée à vos données et à votre application.
Faiss fonctionne aussi bien sur CPU que sur GPU, exploitant le matériel moderne pour accélérer le processus de recherche. Conçue pour différents environnements informatiques, des ordinateurs personnels aux clusters de calcul haute performance, la bibliothèque bascule facilement entre index CPU et GPU. Son interface Python s’intègre parfaitement aux index C++, ce qui facilite le passage des tests au déploiement. Cette prise en charge multi-plateforme garantit une utilisation efficace de Faiss dans divers contextes, en optimisant performances et ressources.
Fonctionnalités majeures de Faiss
Faiss se démarque pour la recherche de similarité, avec des fonctionnalités pensées pour gérer efficacement de grands jeux de données hétérogènes. Voici un aperçu des capacités essentielles qui en font un atout puissant pour les tâches intensives en données.
Scalabilité
Faiss est conçu pour gérer des jeux de données allant de millions à des milliards de vecteurs, idéal pour des applications comme les grands systèmes de recommandation ou d’immenses bases d’images et de vidéos. Il s’appuie sur des techniques avancées comme les fichiers inversés (inverted file) et les graphes HNSW (hierarchical navigable small world) pour rester efficace à grande échelle.
Vitesse
Faiss est rapide grâce à ses algorithmes et structures de données optimisés. Il exploite le clustering k-means, la quantification par produits et des recherches exhaustives optimisées pour accélérer les traitements. Sur GPU, Faiss peut être jusqu’à 20 fois plus rapide sur les matériels de génération Pascal par rapport aux versions CPU. Cette vitesse est cruciale pour les applications en temps réel qui exigent des réponses instantanées.
Précision
Faiss offre une grande flexibilité en matière de précision, permettant d’arbitrer entre vitesse et exactitude selon vos besoins. Vous pouvez l’ajuster pour des recherches très précises ou privilégier la rapidité avec une précision moindre. Différentes méthodes d’indexation et de nombreux paramètres sont disponibles, et la performance se mesure avec des métriques comme 1-recall@1 et 10-intersection pour comparer aux approches exhaustives.
Polyvalence
Faiss gère différents types de données en les convertissant en représentations vectorielles. Vous pouvez ainsi l’utiliser pour des images, du texte, de l’audio, etc., ce qui le rend pertinent dans de nombreux secteurs. Il prend en charge plusieurs métriques de distance, dont la distance euclidienne, la similarité cosinus et le produit scalaire, ce qui vous permet d’adapter le processus de recherche à vos besoins. Faiss s’emploie aisément pour la recherche d’images similaires, la récupération de documents textuels et le fingerprinting audio.
Cas d’usage de Faiss
Polyvalent et performant, Faiss convient à de nombreux cas d’usage dans divers secteurs. Voici les domaines où il excelle.
Systèmes de recommandation
Faiss change la donne pour les systèmes de recommandation. Il retrouve rapidement des éléments similaires au sein d’énormes jeux de données, qu’il s’agisse de produits, de films ou d’articles.
Imaginez une plateforme e-commerce qui utilise Faiss pour analyser le comportement des utilisateurs et leurs interactions produit. Elle génère des vecteurs de grande dimension pour ces interactions et, via des recherches de plus proches voisins, Faiss identifie des produits proches de ceux qu’un utilisateur a consultés ou achetés. Cette personnalisation stimule l’engagement et la satisfaction, ce qui accroît les ventes et la fidélisation.
Recherche d’images et de vidéos
Faiss alimente aussi des moteurs de recherche capables de retrouver des images ou vidéos visuellement similaires en indexant des vecteurs de grande dimension issus de contenus multimédias. Pensez à une application de gestion de photos qui aide à retrouver toutes les images d’un monument précis dans une photothèque. En convertissant les images en vecteurs et en les indexant avec Faiss, l’application exécute des recherches de similarité en un instant. Cette capacité s’applique également aux plateformes vidéo, où Faiss peut indexer et rechercher des extraits similaires à partir de caractéristiques visuelles et audio, améliorant la découverte de contenus et les recommandations.
Détection d’anomalies
En détection d’anomalies, Faiss excelle pour repérer les valeurs aberrantes dans des jeux de données en identifiant les points qui s’écartent nettement de leurs plus proches voisins.
Prenons la détection de fraude : les transactions financières peuvent être converties en vecteurs intégrant des attributs comme le montant, le lieu et l’heure. Faiss réalise des recherches de similarité pour signaler les transactions atypiques, potentiellement frauduleuses.
En cybersécurité, Faiss peut détecter des schémas de trafic réseau inhabituels indiquant d’éventuelles cyberattaques.
En contrôle qualité, il identifie des produits défectueux en comparant leurs caractéristiques à celles de produits conformes.
Recherche d’information
Faiss est également un excellent outil de recherche d’information, permettant de retrouver des documents ou des passages pertinents sur la base de la similarité sémantique. C’est précieux pour les moteurs de recherche, les bibliothèques numériques ou tout système nécessitant une récupération de texte rapide et précise.
Par exemple, un moteur de recherche peut convertir documents et requêtes en vecteurs de grande dimension grâce à des techniques d’embeddings comme word2vec ou BERT. En indexant ces vecteurs avec Faiss, le moteur peut effectuer rapidement des recherches de similarité pour récupérer des documents qui correspondent au sens de la requête, et pas seulement aux mots-clés. Les résultats sont ainsi plus pertinents, pour une meilleure expérience et une recherche d’information plus efficace.
Bien démarrer avec Faiss
Dans cette section, je vous montre comment configurer Faiss et l’utiliser avec LangChain et les embeddings OpenAI.
Installation
Pour installer Faiss, utilisez pip pour obtenir la version CPU ou GPU :
# For CPU
pip install faiss-cpu
# For GPU
pip install faiss-gpu
Pour utiliser Faiss avec LangChain et les embeddings OpenAI, installez également les paquets suivants :
pip install -U langchain-community langchain-openai tiktoken
Application de base
Voici un exemple simple montrant comment indexer des vecteurs et effectuer une recherche de plus proches voisins avec Faiss, LangChain et les embeddings OpenAI :
from langchain.document_loaders import WikipediaLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter
# Load content from Wikipedia using WikipediaLoader
loader = WikipediaLoader("Machine_learning")
document = loader.load()
# Chunking
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
# Loading embeddings model
embeddings = OpenAIEmbeddings()
# Convert documents to vectors and index vectors
db = FAISS.from_documents(docs, embeddings)
print(db.index.ntotal)
# Search query
query = "What is machine learning?"
docs = db.similarity_search(query)
print(docs[0].page_content)
Pour aller plus loin et vous familiariser avec Faiss, consultez la documentation officielle et ces tutoriels.
Conclusion
Faiss s’impose comme un outil puissant pour la recherche de similarité, alliant scalabilité, vitesse, précision et polyvalence. Il gère de grands jeux de données et réalise des recherches rapides et fiables, ce qui le rend précieux pour des applications variées comme les systèmes de recommandation, la détection d’anomalies et la recherche d’information.
Avec Faiss, vous pouvez créer des systèmes plus intelligents et intuitifs, améliorer l’expérience utilisateur et gagner en efficacité opérationnelle.
Pour aller plus loin, explorez ces articles :
Ryan est un data scientist de premier plan spécialisé dans la création d'applications d'IA utilisant des LLM. Il est candidat au doctorat en traitement du langage naturel et graphes de connaissances à l'Imperial College de Londres, où il a également obtenu une maîtrise en informatique. En dehors de la science des données, il rédige une lettre d'information hebdomadaire Substack, The Limitless Playbook, dans laquelle il partage une idée exploitable provenant des plus grands penseurs du monde et écrit occasionnellement sur les concepts fondamentaux de l'IA.
