Maison > développement back-end > Tutoriel Python > IndexIVFFlat et IndexIVFPQ

IndexIVFFlat et IndexIVFPQ

Patricia Arquette
Libérer: 2024-10-09 20:14:02
original
761 Les gens l'ont consulté

IndexIVFFlat y IndexIVFPQ

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

  1. IndexFlatL2

    • Effectue une recherche exhaustive sans compression. Idéal pour les petits ensembles de données où une précision maximale est requise.
  2. 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.
  3. 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.
  4. 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.
  5. 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

  1. IndexFlatL2

    • Effectue une recherche exhaustive sans compression. Idéal pour les petits ensembles de données où une précision maximale est requise.
  2. 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.
  3. 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.
  4. 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.
  5. 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!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal