Annoy vs ScaNN : choisir le bon outil de recherche vectorielle pour votre application
Introduction
Aujourd’hui, la recherche vectorielle est devenue un élément fondamental qui alimente diverses applications d’IA modernes, telles que les moteurs de recommandation, les systèmes de recherche d’images et les tâches de traitement automatique du langage naturel (NLP). Contrairement aux moteurs de recherche traditionnels, qui reposent sur la correspondance de mots-clés, la recherche vectorielle nous permet de récupérer des informations sur la base de la similarité vectorielle, révélant des insights plus profonds à partir de données non structurées comme les embeddings d’images, d’audio et de texte.
Parmi les outils disponibles pour la recherche vectorielle, Annoy et ScaNN se distinguent comme des options populaires. Chacun possède ses forces propres et est optimisé pour différents cas d’utilisation. Dans ce blog, nous explorerons les principales fonctionnalités d’Annoy et de ScaNN, leurs différences, ainsi que les scénarios dans lesquels l’un pourrait être plus adapté que l’autre. À la fin, vous comprendrez clairement quel outil correspond le mieux à vos besoins.
Qu’est-ce que la recherche vectorielle ?
Avant d’entrer dans les spécificités d’Annoy et de ScaNN, il est essentiel de comprendre la recherche vectorielle. En termes simples, la recherche vectorielle, ou recherche de similarité vectorielle, trouve les vecteurs (points de données) les plus proches d’un vecteur de requête donné dans un espace à haute dimension. Ces vecteurs sont souvent générés par des modèles de machine learning afin de capturer l’essence des données non structurées (par exemple, le sens d’une phrase ou les caractéristiques d’une image).
Contrairement aux bases de données traditionnelles, où les recherches sont basées sur des correspondances exactes ou du filtrage, la recherche vectorielle se concentre sur la similarité. L’objectif est de trouver des vecteurs qui sont « proches » les uns des autres selon une métrique de distance (comme la distance euclidienne ou la similarité cosinus). Par exemple, les vecteurs peuvent représenter des mots ou des phrases dans le traitement automatique du langage naturel (NLP), et la recherche vectorielle aide à trouver les mots ou textes les plus similaires sur le plan sémantique. Dans les systèmes de recommandation, la recherche vectorielle identifie les éléments les plus proches des préférences d’un utilisateur. Les recherches vectorielles jouent également un rôle crucial dans la génération augmentée par récupération (RAG), une technique qui enrichit la sortie des grands modèles de langage (LLMs) en leur fournissant des informations contextuelles supplémentaires.
Il existe de nombreuses solutions disponibles sur le marché pour effectuer des recherches vectorielles, notamment :
- Bibliothèques de recherche vectorielle telles qu’Annoy et ScaNN.
- Bases de données vectorielles spécialement conçues telles que Milvus, Zilliz Cloud (Milvus entièrement géré)
- Bases de données vectorielles légères telles que Chroma et Milvus Lite.
- Bases de données traditionnelles avec des extensions de recherche vectorielle
Qu’est-ce qu’Annoy ? Un aperçu
Annoy (Approximate Nearest Neighbors Oh Yeah) est une bibliothèque open source légère développée par Spotify. Elle est spécifiquement conçue pour gérer des recherches vectorielles à grande échelle et majoritairement en lecture. Son principal avantage réside dans sa consommation mémoire minimale et sa simplicité, ce qui la rend idéale pour les jeux de données statiques qui ne changent pas fréquemment.
L’algorithme de recherche d’Annoy repose sur la construction de plusieurs arbres de projection aléatoire qui divisent l’espace vectoriel en régions plus petites. Cette approche permet des recherches rapides au prix de l’exactitude, puisque les résultats sont approximatifs, et non exacts. Ce compromis est acceptable pour de nombreuses applications, car les gains de vitesse l’emportent sur la légère baisse de précision.
Annoy est idéal dans les situations où l’efficacité mémoire est une priorité. Il vous permet de stocker d’immenses jeux de données sur disque, ce qui rend possible les recherches sans charger l’ensemble du jeu de données en mémoire. Cependant, cela signifie également que l’ajout ou la suppression de vecteurs nécessite de reconstruire l’intégralité de l’index, ce qui peut être contraignant si vos données changent fréquemment. Annoy s’intègre aussi facilement à plusieurs langages de programmation comme Python, C++ et Go, ce qui le rend accessible à un large éventail de développeurs.
En résumé, Annoy convient parfaitement aux grands jeux de données statiques et aux recherches rapides et efficaces en mémoire. Cependant, ce n’est peut-être pas la meilleure option si vos données doivent être mises à jour fréquemment ou exigent une précision élevée.
Qu’est-ce que ScaNN ? Un aperçu
ScaNN (Scalable Nearest Neighbors) est une bibliothèque open source développée par Google pour effectuer des recherches rapides de voisins les plus proches approximatifs (ANN), principalement pour des données vectorielles de grande dimension. Elle est optimisée pour les applications d’apprentissage automatique à grande échelle, où la récupération des vecteurs les plus proches dans un jeu de données est cruciale.
ScaNN utilise des techniques avancées comme le partitionnement, la quantification et le hachage asymétrique pour compresser les données et accélérer les processus de recherche, ce qui le rend particulièrement adapté aux applications nécessitant un équilibre entre vitesse et exactitude. Il permet des compromis personnalisables en fonction des exigences de la tâche à accomplir. L’un de ses principaux atouts est sa capacité à s’intégrer à TensorFlow, ce qui le rend très efficace pour les flux de travail d’IA où les recherches vectorielles doivent être rapides et évolutives.
ScaNN est en concurrence avec des bibliothèques comme Faiss (par Facebook), Annoy (par Spotify) et HNSWlib (Hierarchical Navigable Small World), qui sont également des algorithmes de recherche ANN populaires. La force de ScaNN réside dans sa capacité à s’intégrer à TensorFlow et à fournir une recherche à grande vitesse tout en maintenant une bonne précision.
Principales différences entre Annoy et ScaNN
Annoy et ScaNN sont conçus pour résoudre le problème de la recherche de voisins les plus proches, mais utilisent des approches différentes. Explorons leurs principales différences plus en détail.
Méthodologie de recherche
Annoy et ScaNN s’appuient sur différents algorithmes sous-jacents pour effectuer des recherches vectorielles, chacun avec des compromis distincts.
Annoy construit une forêt d’arbres de projection aléatoire pour partitionner l’espace vectoriel. Lorsqu’une requête est effectuée, il recherche dans plusieurs arbres afin de trouver des voisins les plus proches approximatifs. Cette méthode est rapide, mais sacrifie une partie de l’exactitude au profit de la vitesse, ce qui la rend adaptée aux cas d’utilisation où des résultats « assez proches » sont acceptables.
ScaNN, en revanche, combine le partitionnement, la quantification et le hachage asymétrique pour obtenir des recherches rapides et précises. Cela lui permet de réduire efficacement l’espace de recherche et de fournir des résultats plus précis qu’Annoy. La méthodologie de ScaNN est particulièrement utile lorsque la précision est cruciale, comme dans certaines tâches d’apprentissage automatique.
Gestion des données
Annoy et ScaNN gèrent également les données différemment. Annoy est basé sur le disque, ce qui signifie qu’il peut fonctionner sur des jeux de données qui dépassent la mémoire disponible. Cela le rend très évolutif en termes de stockage, même si ses performances peuvent se dégrader à mesure que le jeu de données augmente. Annoy est le plus efficace lorsque les données restent relativement statiques après la configuration initiale.
ScaNN est optimisé pour les performances en mémoire et se concentre sur la gestion de jeux de données dynamiques. Il prend en charge la compression vectorielle, ce qui permet une meilleure efficacité mémoire sans trop compromettre l’exactitude. Cela rend ScaNN plus flexible pour les applications qui traitent des données en constante évolution ou dans lesquelles les mises à jour du jeu de données sont fréquentes.
Évolutivité et performances
En termes de performances, Annoy passe bien à l’échelle lorsqu’il traite de grands ensembles de données statiques grâce à son architecture basée sur le disque. Cependant, comme Annoy est conçu autour de la recherche approximative, il peut ne pas toujours renvoyer les résultats les plus précis, en particulier à mesure que la taille de l’ensemble de données augmente. Ce compromis peut ne pas poser problème pour les applications où des correspondances approximatives sont acceptables.
ScaNN, en revanche, est conçu pour traiter des ensembles de données massifs avec à la fois rapidité et précision. La capacité de ScaNN à partitionner et à quantifier les données signifie qu’il peut effectuer des recherches dans de grands ensembles de données tout en maintenant une grande précision. Cependant, il nécessite généralement plus de ressources informatiques qu’Annoy, donc pour des applications à très grande échelle, vous devrez peut-être investir dans une infrastructure plus puissante.
Flexibilité et personnalisation
Les options de personnalisation d’Annoy se limitent à l’ajustement du nombre d’arbres et de la profondeur de recherche. Bien que cela puisse offrir un certain contrôle sur l’équilibre entre précision et vitesse, Annoy n’offre pas la personnalisation fine que propose ScaNN.
ScaNN permet aux utilisateurs d’ajuster divers paramètres liés à la vitesse et à la précision, offrant ainsi plus de flexibilité pour optimiser les recherches selon des cas d’utilisation spécifiques. Cela le rend particulièrement utile lorsque les données ou les modèles de requêtes varient fréquemment, et que les performances doivent être affinées en fonction de l’utilisation réelle.
Intégration et écosystème
Annoy est un outil simple et léger qui s’intègre à plusieurs langages de programmation. Il est couramment utilisé dans les systèmes de recommandation et les moteurs de recherche, et grâce à sa simplicité, il est facile à intégrer dans diverses applications sans surcharge importante.
L’intégration de ScaNN avec TensorFlow lui confère un avantage puissant dans les flux de travail d’apprentissage automatique. Si vous utilisez déjà TensorFlow pour générer des embeddings ou d’autres représentations vectorielles, ScaNN peut s’intégrer naturellement, permettant une intégration fluide sans modifier beaucoup votre pipeline existant.
Facilité d’utilisation
Annoy est largement reconnu pour sa simplicité. Son API légère permet de démarrer facilement, même si vous débutez dans la recherche vectorielle. La courbe d’apprentissage est minimale, et vous pouvez rapidement mettre en place un système de recherche sans ajuster trop de paramètres.
ScaNN, bien que plus puissant, présente une courbe d’apprentissage plus abrupte. Vous devrez consacrer un peu de temps à comprendre ses différentes options d’optimisation, et son intégration dans votre système peut demander plus d’efforts si vous ne travaillez pas déjà avec des frameworks d’apprentissage automatique comme TensorFlow. Cependant, pour des applications plus complexes où la précision et les performances sont essentielles, cet effort supplémentaire en vaut largement la peine.
Considérations de coût
Annoy est une solution rentable, surtout si vous travaillez avec des ressources informatiques limitées. Sa capacité à stocker les données sur disque signifie que vous n’aurez pas besoin de serveurs à grande mémoire, et les résultats de recherche approximatifs sont souvent suffisants pour de nombreuses applications. Cela le rend idéal pour les projets où les contraintes budgétaires sont un facteur à prendre en compte.
Les performances supérieures de ScaNN ont un coût. Il nécessite davantage de puissance de calcul et de mémoire, en particulier pour les très grands ensembles de données. Si vous travaillez sur des applications gourmandes en ressources qui exigent à la fois vitesse et précision, l’investissement dans l’infrastructure sera plus élevé.
Fonctionnalités de sécurité
Ni Annoy ni ScaNN ne disposent de fonctionnalités de sécurité intégrées comme le chiffrement ou le contrôle d’accès. Si la sécurité est une préoccupation dans votre application, vous devrez mettre en œuvre des mesures supplémentaires pour protéger vos données, telles que le chiffrement pendant le stockage et le transport, ainsi que des mécanismes d’authentification robustes.
Quand choisir Annoy
Annoy est préférable lorsque votre application nécessite une recherche approximative rapide et que votre ensemble de données est trop volumineux pour tenir en mémoire. Il est idéal pour les cas d’utilisation où les données sont relativement statiques et où la vitesse est plus importante que la précision. Par exemple, si vous construisez un moteur de recommandation ou un système de filtrage basé sur le contenu, la vitesse et la simplicité d’Annoy vous permettront de passer rapidement à l’échelle tout en maintenant les coûts bas.
Annoy excelle également dans les scénarios où les performances n’ont pas besoin d’être constamment ajustées. Si votre jeu de données reste cohérent au fil du temps et que vous pouvez tolérer des résultats approximatifs, Annoy est probablement l’option la plus appropriée.
Quand choisir ScaNN
ScaNN est l’outil de prédilection pour les applications où la précision et les performances sont primordiales. Il est particulièrement bien adapté aux applications d’apprentissage automatique qui impliquent des embeddings, comme la recherche d’images, la recherche de documents ou le traitement du langage naturel. Si votre jeu de données est volumineux et dynamique, et que vous avez besoin de recherches à grande vitesse sans sacrifier la précision, ScaNN offre une solution plus fiable.
Son intégration avec TensorFlow en fait également un concurrent solide pour les applications d’IA. La capacité de ScaNN à s’intégrer de manière transparente vous fera gagner du temps et des efforts de développement si vous travaillez déjà avec un framework d’apprentissage automatique.
Comparaison des bibliothèques de recherche vectorielle et des bases de données vectorielles spécialement conçues
Les bibliothèques de recherche vectorielle comme Annoy et ScaNN, ainsi que les bases de données vectorielles spécialement conçues comme Milvus, visent toutes deux à résoudre le problème de la recherche de similarité pour les données vectorielles de grande dimension, mais elles remplissent des rôles différents.
Les bibliothèques de recherche vectorielle, comme Annoy, ScaNN, HNSWlib et Faiss, se concentrent uniquement sur la tâche de recherche efficace des plus proches voisins. Elles offrent des solutions légères et rapides pour trouver des vecteurs similaires à un vecteur de requête. Elles sont souvent utilisées dans des environnements plus petits, à nœud unique, ou pour des applications avec des jeux de données statiques ou de taille modérée. Cependant, elles manquent généralement de fonctionnalités pour gérer les données dynamiques, fournir de la persistance ou évoluer sur des systèmes distribués. Les développeurs qui utilisent ces bibliothèques doivent généralement gérer manuellement la gestion des données, les mises à jour et la mise à l’échelle.
D’un autre côté, les bases de données vectorielles spécialement conçues comme Milvus et Zilliz Cloud (le Milvus géré) sont des systèmes complets conçus pour la gestion de données vectorielles à grande échelle. Ces bases de données vont au-delà de la simple recherche vectorielle, en offrant des fonctionnalités comme le stockage persistant, les mises à jour en temps réel, une architecture distribuée et des capacités de requête avancées. Elles prennent en charge les jeux de données dynamiques et peuvent facilement gérer des applications en temps réel où les données sont fréquemment mises à jour. De plus, les bases de données vectorielles incluent souvent une prise en charge intégrée pour combiner les recherches vectorielles avec le filtrage traditionnel et les requêtes sur les métadonnées, ce qui les rend idéales pour les environnements de production nécessitant évolutivité, haute disponibilité et fonctionnalités de recherche plus complexes.
- Découvrez les dernières nouvelles fonctionnalités et améliorations de Zilliz Cloud : Zilliz Cloud Update: Migration Services, Fivetran Connectors, Multi-replicas, and More
Quand choisir chaque solution de recherche vectorielle
Choisissez les bibliothèques de recherche vectorielle si :
- Vous disposez d’un jeu de données de petite à moyenne taille, relativement statique.
- Vous préférez un contrôle total sur les algorithmes d’indexation et de recherche.
- Vous intégrez la recherche dans un système existant et pouvez gérer l’infrastructure.
Choisissez les bases de données vectorielles spécialement conçues si :
- Vous devez évoluer jusqu’à des milliards de vecteurs sur des systèmes distribués.
- Votre jeu de données change fréquemment, nécessitant des mises à jour en temps réel.
- Vous préférez des solutions gérées qui prennent en charge le stockage, la mise à l’échelle et les optimisations de requêtes pour vous.
En résumé, les bibliothèques de recherche vectorielle conviennent le mieux aux cas d’utilisation plus simples et à plus petite échelle, où la vitesse et l’efficacité mémoire sont prioritaires, mais où la complexité opérationnelle est minimale. Les bases de données vectorielles spécialement conçues, en revanche, sont conçues pour des systèmes à grande échelle et de niveau production qui exigent une gestion dynamique des données, l’évolutivité et la facilité d’utilisation, offrant souvent des avantages opérationnels significatifs aux développeurs qui gèrent des applications complexes.
Évaluer et comparer différentes solutions de recherche vectorielle
OK, maintenant nous avons appris la différence entre les différentes solutions de recherche vectorielle. Les questions suivantes sont : comment vous assurer que votre algorithme de recherche renvoie des résultats précis et le fait à la vitesse de l’éclair ? Comment évaluer l’efficacité des différents algorithmes ANN, en particulier à grande échelle ?
Pour répondre à ces questions, nous avons besoin d’un outil de benchmarking. De nombreux outils de ce type sont disponibles, et deux se distinguent comme les plus efficaces : ANN benchmarks et VectorDBBench.
Benchmarks ANN
ANN Benchmarks (benchmarks de voisins les plus proches approximatifs) est un projet open source conçu pour évaluer et comparer les performances de divers algorithmes de voisins les plus proches approximatifs (ANN). Il fournit un cadre standardisé pour benchmarker différents algorithmes sur des tâches telles que la recherche vectorielle en haute dimension, permettant aux développeurs et aux chercheurs de mesurer des métriques comme la vitesse de recherche, la précision et l’utilisation de la mémoire sur divers jeux de données. En utilisant ANN-Benchmarks, vous pouvez évaluer les compromis entre vitesse et précision pour des algorithmes comme ceux que l’on trouve dans des bibliothèques telles que Faiss, Annoy, HNSWlib, et d’autres, ce qui en fait un outil précieux pour comprendre quels algorithmes fonctionnent le mieux pour des applications spécifiques.
Dépôt GitHub d’ANN Benchmarks : https://github.com/erikbern/ann-benchmarks
Site Web d’ANN Benchmarks : https://ann-benchmarks.com/
VectorDBBench
VectorDBBench est un outil de benchmarking open source conçu pour les utilisateurs qui ont besoin de systèmes de stockage et de récupération de données haute performance, en particulier de bases de données vectorielles. Cet outil permet aux utilisateurs de tester et de comparer les performances de différents systèmes de bases de données vectorielles tels que Milvus et Zilliz Cloud (le Milvus géré) en utilisant leurs propres jeux de données, et de déterminer celui qui convient le mieux à leurs cas d’utilisation. VectorDBBench est écrit en Python et sous licence open source MIT, ce qui signifie que chacun peut l’utiliser, le modifier et le distribuer librement.
Dépôt GitHub de VectorDBBench : https://github.com/zilliztech/VectorDBBench
Jetez un rapide coup d’œil aux performances des bases de données vectorielles grand public dans le classement VectorDBBench.
Techniques et insights sur l’évaluation de VectorDB :
Ressources complémentaires sur VectorDB, GenAI et ML
Continuer à lire

Vector Lakebase: End the AI Data Silo
Learn how Vector Lakebase unifies vector search, data lakes, and AI data operations so teams can serve RAG and agents without copy-and-sync pipelines.

Why Not All VectorDBs Are Agent-Ready
Explore why choosing the right vector database is critical for scaling AI agents, and why traditional solutions fall short in production.

Vector Databases vs. Document Databases
Use a vector database for similarity search and AI-powered applications; use a document database for flexible schema and JSON-like data storage.
The Definitive Guide to Choosing a Vector Database
Overwhelmed by all the options? Learn key features to look for & how to evaluate with your own data. Choose with confidence.


