Indexer des vecteurs binaires pour la recherche de vecteurs

Recherche Azure AI prend en charge le type binaire compressé Collection(Edm.Byte) pour réduire davantage l’empreinte de stockage et mémoire des données vectorielles. Vous pouvez utiliser ce type de données pour la sortie des modèles, tels que les modèles d’incorporation binaires Embed v3 de Cohere ou tout autre modèle d’incorporation ou processus qui génère des vecteurs sous forme d’octets binaires.

Il existe trois étapes pour configurer un index pour les vecteurs binaires :

  • Ajouter un algorithme de recherche vectorielle qui spécifie la distance hamming pour la comparaison de vecteurs binaires
  • Ajouter un profil vectoriel qui pointe vers l’algorithme
  • Ajouter un champ vectoriel de type Collection(Edm.Byte) et affecter la distance Hamming

Cet article utilise les API REST pour l’illustration, mais vous pouvez également utiliser un Kit de développement logiciel (SDK) Azure ou le portail Azure pour ajouter un champ binaire à un index. Vous affectez le type de données binaire aux champs à l’aide des index - Créerou index - Créer ou mettre à jour des API REST.

Conseil

Si vous examinez la prise en charge des vecteurs binaires pour son encombrement plus petit, vous pouvez également prendre en compte les fonctionnalités de quantisation de vecteur et de réduction du stockage dans Recherche Azure AI. Les entrées sont des embeddings float32 ou float16. La sortie est stockée dans un format beaucoup plus petit. Pour plus d’informations, consultez Compresser à l’aide d’une quantisation binaire ou scalaire et affecter des types de données étroits.

Conditions préalables

  • Connaissance de la création d’un index et de l’ajout de champs vectoriels.

  • Vecteurs binaires, avec un bit par dimension, empaquetés dans les valeurs uint8 avec huit bits par valeur. Vous pouvez obtenir ces vecteurs à l’aide de modèles qui génèrent directement des vecteurs binaires empaquetés ou en quantifient des vecteurs en vecteurs binaires dans votre application cliente pendant l’indexation et la récupération.

Limitations

  • Aucune prise en charge du portail Azure dans l'Assistant d'importation de données.

  • Aucune prise en charge des champs binaires dans la compétence AML utilisée pour la vectorisation intégrée des modèles à partir du catalogue de modèles Microsoft Foundry.

Ajouter un algorithme de recherche vectorielle et un profil vectoriel

Les algorithmes de recherche vectorielle créent les structures de navigation de requête pendant l’indexation. Pour les champs de vecteur binaire, le système utilise la métrique de distance Hamming pour effectuer des comparaisons de vecteurs.

Pour configurer la recherche de vecteurs binaires :

  1. Configurez une requête Index - Créer ou mettre à jour (API REST).

  2. Dans le schéma d’index, ajoutez une vectorSearch section qui spécifie des profils et des algorithmes.

  3. Ajoutez un ou plusieurs algorithmes de recherche vectorielle qui utilisent une métrique de similarité de hamming. L’algorithme HNSW (Hierarchical Navigable Small Worlds) est courant, mais vous pouvez également utiliser la distance de Hamming avec des K plus proches voisins exhaustifs (KNN).

  4. Ajoutez un ou plusieurs profils vectoriels qui spécifient l’algorithme.

L’exemple suivant montre une configuration de base vectorSearch .

  "vectorSearch": { 
    "profiles": [ 
      { 
        "name": "myHnswProfile", 
        "algorithm": "myHnsw", 
        "compression": null, 
        "vectorizer": null 
      } 
    ], 
    "algorithms": [ 
      { 
        "name": "myHnsw", 
        "kind": "hnsw", 
        "hnswParameters": { 
          "metric": "hamming" 
        } 
      }, 
      { 
        "name": "myExhaustiveKnn", 
        "kind": "exhaustiveKnn", 
        "exhaustiveKnnParameters": { 
          "metric": "hamming" 
        } 
      } 
    ] 
  }

Ajouter un champ binaire à un index

La collection de champs d’un index doit inclure un champ pour la clé de document, les champs vectoriels et tous les autres champs dont vous avez besoin pour les scénarios de recherche hybride.

Les champs binaires utilisent le type Collection(Edm.Byte) et contiennent des embeddings sous forme compacte. Par exemple, si la dimension d’incorporation d’origine est 1024, la longueur du vecteur binaire packé est ceiling(1024 / 8) = 128. Vous obtenez le formulaire packé en définissant la vectorEncoding propriété sur le champ.

Pour ajouter un champ de vecteur binaire à un index :

  1. Ajoutez un champ à la collection de champs et donnez-lui un nom.

  2. Définissez le type de données sur Collection(Edm.Byte).

  3. Définissez vectorEncoding sur packedBit pour l’encodage binaire.

  4. Définissez dimensions sur 1024. Spécifiez la dimension de vecteur d’origine (décompressée).

  5. Définissez vectorSearchProfile sur un profil que vous avez défini à l’étape précédente.

  6. Définissez searchable sur true.

La définition de champ suivante est un exemple de champ vectoriel binaire dans un schéma d’index.

  "fields": [ 
    . . . 
    { 
      "name": "my-binary-vector-field", 
      "type": "Collection(Edm.Byte)", 
      "vectorEncoding": "packedBit", 
      "dimensions": 1024, 
      "vectorSearchProfile": "myHnswProfile",
      "searchable": true
    },
   . . . 
  ]
  • Passez en revue le référentiel azure-search-vector-samples pour les flux de travail de bout en bout qui incluent la définition de schéma, la vectorisation, l’indexation et les requêtes.

  • Passez en revue le code de démonstration de recherche vectorielle pour C#, Python et JavaScript.