Voici une comparaison entre les indices IndexIVFFlat et IndexIVFPQ, ainsi que quelques alternatives pour leur utilisation :
Comparaison : IndexIVFFlat et IndexIVFPQ
Caractéristique |
Characteristic |
IndexIVFFlat |
IndexIVFPQ |
Storage Type |
Stores vectors in their original form. |
Utilizes product quantization (PQ) to compress vectors. |
Precision |
High precision, as it performs exact searches within cells. |
May sacrifice some precision for compression, but still provides good results. |
Search Speed |
Slower on large datasets due to exhaustive search. |
Faster, especially on large sets, thanks to reduced search space. |
Memory Usage |
Consumes more memory as it stores all vectors without compression. |
Consumes significantly less memory due to compression (up to 97% less). |
Configuration |
Simpler, only requires defining the number of cells (nlist). |
Requires defining both the number of cells (nlist) and code size (code_size). |
Training |
Needs to be trained to create cells before adding data. |
Also requires training, but the process is more complex due to quantization. |
IndexIVFFlat |
IndexIVFPQ |
ête>
Type de stockage |
Stocke les vecteurs dans leur forme originale. |
Utilise la quantification du produit (PQ) pour compresser les vecteurs. |
Précision |
Haute précision, car il effectue des recherches exactes dans les cellules. |
Peut sacrifier une certaine précision pour la compression, mais donne quand même de bons résultats. |
Vitesse de recherche |
Plus lent sur les grands ensembles de données en raison d'une recherche exhaustive. |
Plus rapide, en particulier sur les grands ensembles, grâce à un espace de recherche réduit. |
Utilisation de la mémoire |
Consomme plus de mémoire car il stocke tous les vecteurs sans compression. |
Consomme beaucoup moins de mémoire grâce à la compression (jusqu'à 97 % de moins). |
Configuration |
Plus simple, nécessite uniquement de définir le nombre de cellules (nlist). |
Nécessite de définir à la fois le nombre de cellules (nlist) et la taille du code (code_size). |
Formation |
Doit être formé pour créer des cellules avant d'ajouter des données. |
Nécessite également une formation, mais le processus est plus complexe en raison de la quantification. |
Avantages et inconvénients
Avantages d'IndexIVFFlat
-
Précision : fournit des résultats exacts lors de la recherche dans chaque cellule.
-
Simplicité : Facile à comprendre et à configurer.
Inconvénients d’IndexIVFFlat
-
Vitesse : peut être très lente avec de gros volumes de données.
-
Utilisation de la mémoire : n'optimise pas l'utilisation de la mémoire, ce qui peut poser problème avec des ensembles de données volumineux.
Avantages d'IndexIVFPQ
-
Vitesse : Beaucoup plus rapide dans les recherches en raison de l'espace de recherche réduit.
-
Efficacité de la mémoire : réduit considérablement l'utilisation de la mémoire, permettant de gérer des ensembles de données plus volumineux.
Inconvénients d’IndexIVFPQ
-
Précision : Il peut y avoir une légère perte de précision due à la compression.
-
Complexité : La configuration et la formation sont plus complexes que dans IndexIVFFlat.
Alternatives
-
IndexFlatL2
- Effectue une recherche exhaustive sans compression. Idéal pour les petits ensembles de données où une précision maximale est requise.
-
IndexPQ
- Utilise uniquement la quantification du produit sans clustering. Utile lorsqu'un équilibre entre vitesse et précision est nécessaire, mais que le regroupement n'est pas requis.
-
IndexIVFScalarQuantizer
- Combine l'index inversé avec la quantification scalaire, offrant une approche différente pour réduire l'utilisation de la mémoire et améliorer la vitesse.
-
IndexIVFPQR
- Une variante qui combine FIV et PQ avec un reclassement basé sur du code, offrant un équilibre entre vitesse et précision améliorée.
-
Indices composites
- Utilisez index_factory pour créer des indices composites qui combinent plusieurs techniques (par exemple, OPQ IVF PQ) pour optimiser davantage les performances.
Ces alternatives permettent d'adapter la solution à différents besoins en termes de précision, de rapidité et d'utilisation de la mémoire selon le cas spécifique traité.
Citations :
[1] https://github.com/facebookresearch/faiss/wiki/Faiss-indexes/9df19586b3a75e4cb1c2fb915f2c695755a599b8
[2] https://ai.plainenglish.io/speeding-up-similarity-search-in-recommender-systems-with-faiss-advanced-concepts-part-ii-95e796a7db74?gi=ce57aff1a0c4
[3] https://www.pinecone.io/learn/series/faiss/faiss-tutorial/
[4] https://faiss.ai/cpp_api/struct/structfaiss_1_1IndexIVFFlat.html
[5] https://unfoldai.com/effortless-large-scale-image-retrieval-with-faiss-a-hands-on-tutorial/
[6] https://www.pinecone.io/learn/series/faiss/product-quantization/
[7] https://www.pinecone.io/learn/series/faiss/composite-indexes/
[8] https://github.com/facebookresearch/faiss/issues/1113
En Español, Soy Español, mais par respect pour la communauté, pongo primero la traduccion al inglés.
Vous avez ici une comparaison entre les indices IndexIVFFlat et IndexIVFPQ, avec certaines alternatives pour votre utilisation :
Comparaison: IndexIVFFlat vs. IndexIVFPQ
Caractéristiques |
Característica |
IndexIVFFlat |
IndexIVFPQ |
Tipo de Almacenamiento |
Almacena vectores en su forma original. |
Utiliza cuantización de producto (PQ) para comprimir vectores. |
Precisión |
Alta precisión, ya que realiza búsquedas exactas dentro de las celdas. |
Puede sacrificar algo de precisión por la compresión, pero aún proporciona buenos resultados. |
Velocidad de Búsqueda |
Más lento en grandes conjuntos de datos debido a la búsqueda exhaustiva. |
Más rápido, especialmente en grandes conjuntos, gracias a la reducción del espacio de búsqueda. |
Uso de Memoria |
Consume más memoria porque almacena todos los vectores sin compresión. |
Consume significativamente menos memoria debido a la compresión (hasta 97% menos). |
Configuración |
Más simple, solo requiere definir el número de celdas (nlist). |
Requiere definir tanto el número de celdas (nlist) como el tamaño del código (code_size). |
Entrenamiento |
Necesita ser entrenado para crear las celdas antes de añadir datos. |
También necesita entrenamiento, pero el proceso es más complejo debido a la cuantización. |
IndexIVFFlat |
IndexIVFPQ |
ête>
Type d'Almacenamiento |
Almacena vecteurs en sa forme originale. |
Utiliser la quantité de produit (PQ) pour comprimer les vecteurs. |
Précision |
Alta precisión, ya que realiza búsquedas exactas dentro de las celdas. |
Vous pouvez sacrifier quelque chose de précision pour la compression, mais vous obtenez de bons résultats. |
Vitesse de la recherche |
Más lento en grandes conjuntos de datas Debido a la búsqueda exhaustiva. |
Plus rapidement, surtout dans les grandes situations, grâce à la réduction de l'espace de jeu. |
Utilisation de la mémoire |
Consommer plus de mémoire pour stocker tous les vecteurs sans compression. |
Consommer significativement moins de mémoire en raison de la compression (jusqu'à 97 % de moins). |
Configuration |
Plus simple, il vous suffit de définir le numéro de celdas (nlist). |
Vous devez définir le numéro de celdas (nlist) comme la taille du code (code_size). |
Entrenamiento |
Il est nécessaire d'être engagé pour créer les zones avant d'ajouter des données. |
Il faut également un apprentissage, mais le processus est le plus complexe dû à la quantification. |
Avantages et inconvénients
Avantages d'IndexIVFFlat
-
Précision : fournit des résultats exacts lors de la recherche de chaque cellule.
-
Simplicité : Facile à comprendre et à configurer.
Inconvénients d’IndexIVFFlat
-
Vitesse : peut être très lente avec de gros volumes de données.
-
Utilisation de la mémoire : n'optimise pas l'utilisation de la mémoire, ce qui peut poser problème avec des ensembles de données volumineux.
Avantages d'IndexIVFPQ
-
Vitesse : Beaucoup plus rapide dans les recherches en raison de la réduction de l'espace de recherche.
-
Efficacité de la mémoire : réduit considérablement l'utilisation de la mémoire, permettant de gérer des ensembles de données plus volumineux.
Inconvénients d’IndexIVFPQ
-
Précision : Il peut y avoir une légère perte de précision due à la compression.
-
Complexité : La configuration et la formation sont plus complexes que dans IndexIVFFlat.
Alternatives
-
IndexFlatL2
- Effectue une recherche exhaustive sans compression. Idéal pour les petits ensembles de données où une précision maximale est requise.
-
IndexPQ
- Utilisez uniquement la quantification du produit sans regroupement. C'est utile lorsqu'un équilibre entre vitesse et précision est nécessaire, mais que le regroupement n'est pas requis.
-
IndexIVFScalarQuantizer
- Il combine un index inversé avec une quantification scalaire, offrant une approche différente pour réduire l'utilisation de la mémoire et améliorer la vitesse.
-
IndexIVFPQR
- Une variante qui combine FIV et PQ avec un reclassement basé sur le code, offrant un équilibre entre vitesse et précision améliorée.
-
Indices composites
- Utilisez index_factory pour créer des index composites qui combinent plusieurs techniques (par exemple OPQ IVF PQ) pour optimiser davantage les performances.
Ces alternatives permettent d'adapter la solution à différents besoins en termes de précision, de rapidité et d'utilisation de la mémoire en fonction du cas spécifique que vous abordez.
Citations :
[1] https://www.pinecone.io/learn/series/faiss/faiss-tutorial/
[2] https://www.pinecone.io/learn/series/faiss/product-quantization/
[3] https://www.pinecone.io/learn/series/faiss/composite-indexes/
[4] https://github.com/facebookresearch/faiss/wiki/Faiss-indexes/9df19586b3a75e4cb1c2fb915f2c695755a599b8
[5] https://faiss.ai/cpp_api/struct/structfaiss_1_1IndexIVFFlat.html
[6] https://pub.towardsai.net/unlocking-the-power-of-efficient-vector-search-in-rag-applications-c2e3a0c551d5?gi=71a82e3ea10e
[7] https://www.pingcap.com/article/mastering-faiss-vector-database-a-beginners-handbook/
[8] https://wangzwhu.github.io/home/file/acmmm-t-part3-ann.pdf
[9] https://github.com/alonsoir/ubiquitous-carnival/blob/main/contextual-data-faiss-IndexIVFPQ.py
[10] https://github.com/alonsoir/ubiquitous-carnival/blob/main/contextual-data-faiss-indexivfflat.py
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!