Partager via


indexation vectorielle Half-Precision dans Azure DocumentDB

Qu’est-ce que l’indexation vectorielle Half-Precision ?

L’indexation de vecteurs de demi-précision vous permet de stocker et d’indexer des incorporations de vecteurs à l’aide de nombres à virgule flottante 16 bits au lieu des floats 32 bits standard. Cette optimisation entraîne des réductions substantielles de l’utilisation de la mémoire et des coûts de stockage, ce qui rend plus possible l’utilisation de jeux de données plus volumineux et de vecteurs à dimension supérieure. En outre, en optimisant la densité des données, elle peut contribuer à améliorer les performances des requêtes dans de nombreux scénarios de recherche vectorielle.

Principaux avantages

  • Prise en charge accrue de la dimensionnalité : Avec une demi-précision, vous pouvez désormais indexer des vecteurs avec jusqu’à 4 000 dimensions (augmentation de la limite précédente de 2 000).
  • Empreinte de stockage réduite : Le stockage de vecteurs dans un format 16 bits diminue considérablement la quantité de stockage requise par rapport aux vecteurs de précision complète. Cela peut entraîner des économies considérables, en particulier pour les bases de données vectorielles à grande échelle.
  • Performances configurables et précision : Pour affiner vos résultats de recherche, nous fournissons un paramètre de suréchantillonnage pendant l’exécution de la requête. Cela vous permet de contrôler le compromis entre la vitesse de récupération et l’impact potentiel de la précision réduite.

Création d’un index vectoriel Half-Precision

Lorsque vous définissez un index vectoriel pour votre collection, vous pouvez activer la compression demi-précision en spécifiant l’option "compression": "half" dans le cosmosSearchOptions.

db.runCommand({
  "createIndexes": "<vector_collection_name>",
  "indexes": [
    {
      "key": { "<vector_field_name>": "cosmosSearch" },
      "name": "<index_name>",
      "cosmosSearchOptions": {
        "kind": "vector-hnsw", // or vector-ivf
        "similarity": "cos",
        "dimensions": integer_value, // max 4000
        "compression": "half"
      }
    }
  ]
});

Amélioration de la recherche par suréchantillonnage

Lors de l’interrogation d’un index vectoriel qui utilise la compression semi-précision, vous pouvez utiliser le oversampling paramètre à l’intérieur de l’étape d’agrégation $search . Ce paramètre permet d’atténuer toute perte potentielle de précision introduite par la représentation 16 bits.

Le oversampling facteur vous permet de récupérer plus de voisins les plus proches potentiels à partir de l’index de demi-précision que le nombre final de résultats souhaités (k). Ces candidats sont ensuite comparés à l’aide des vecteurs de précision complète d’origine pour garantir une précision plus élevée dans les résultats classés finals.

Par exemple, pour obtenir les 10 premiers (k=10) les vecteurs les plus similaires, une bonne pratique peut être de définir oversampling une valeur telle que 1,5 ou 2.0. Avec "oversampling": 1.5, le système obtiendrait d’abord 15 candidats à partir de l’index de demi-précision, puis affiner les 10 premiers à l’aide des données de précision complète.

db.collection.aggregate([
  {
    "$search": {
      "cosmosSearch": {
        "vector": query_vector,
        "path": path_to_property,
        "k":  num_results_to_return,
        "oversampling": double_value
      }
    }
  },
  {
    "$project": {
      "similarityScore": { "$meta": "searchScore" },
      "_id": 0
    }
  }
]);

Note

Le oversampling facteur doit être un double avec une valeur minimale de 1.0. Ce facteur n’est pertinent que pour les index vectoriels créés avec "compression": "half".

Half-Precision versus Quantification de produit

Les deux Half-Precision et PQ (Product Quantization) compressent les index vectoriels dans Azure DocumentDB, mais ils diffèrent de la façon dont ils obtiennent la compression et affectent la recherche :

Caractéristique Demi-précision Quantisation du produit (PQ)
Méthode de compression Réduit chaque dimension de vecteur à 16 bits. Divise l’espace vectoriel en sous-espaces et quantifie chacun d’eux.
Dimensions maximales Jusqu’à 4 000 Jusqu’à 16 000
Changement de précision Légère perte due à une faible profondeur de bits. Perte potentiellement plus grande, configurable via pqCompressedDims.
Vitesse de recherche Augmentation modérée de la vitesse due à un index plus petit. Augmentation significative de la vitesse due à des vecteurs fortement compressés.
Heure de génération de l’index Relativement rapide. Peut être plus long en raison de la formation du centroïde (pqSampleSize).
Prise en charge des index HNSW, IVF. DiskANN.
Configuration Simple, activez compression: "half". Autres paramètres : pqCompressedDims, pqSampleSize.
Utilisation du suréchantillonnage Aide avec une perte de précision mineure. Essentiel pour récupérer la précision à partir d’une compression plus grande.
Cas d’usage idéaux Réduction modérée de la mémoire, dimensions accrues, compromis de précision acceptable. Jeux de données volumineux, dimensions élevées, recherche rapide hiérarchisée, précision gérée avec surachantillonnage.

Étape suivante