Indexer les vecteurs binaires pour la recherche vectorielle
Recherche Azure AI prend en charge un type binaire compressé de Collection(Edm.Byte)
pour réduire davantage l’empreinte mémoire et le stockage des données vectorielles. Vous pouvez utiliser ce type de données pour la sortie à partir de modèles tels que les modèles d’incorporation binaire v3 de Cohere ou tout autre modèle ou processus d’incorporation qui génère des vecteurs sous forme d’octets binaires.
La configuration d’un index pour les données vecteurs se fait au moyen de trois étapes :
- Ajouter un algorithme de recherche vectorielle qui spécifie la distance de 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 part du principe que vous savez comment créer un index dans Recherche Azure AI et ajouter des champs vectoriels. Les API REST servent à illustrer chaque étape, mais vous pouvez également ajouter un champ binaire à un index dans le Portail Azure ou dans Azure SDK.
Les types de données binaires sont généralement disponibles à partir de la version d’API 2024-07-01 et sont affectés aux champs à l’aide des API Créer un index ou Créer ou mettre à jour l’index.
Conseil
Si vous examinez la prise en charge des vecteurs binaires pour sa plus petite empreinte, 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 incorporations float32 ou float16. La sortie est stockée dans un format beaucoup plus petit. Pour plus d’informations, voir Compresser à l’aide d’une quantification binaire ou scalaire et Affecter des types de données étroits.
Prérequis
- Vecteurs binaires, avec 1 bit par dimension, emballés dans les valeurs uint8 avec 8 bits par valeur. Ils peuvent être obtenus en utilisant des modèles qui génèrent directement des vecteurs binaires emballés, ou en quantifiant les vecteurs en vecteurs binaires côté client lors de l'indexation et de la recherche.
Limites
- Pas de prise en charge du Portail Azure dans l’Assistant Importer et vectoriser des 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 dans le catalogue de modèles Azure AI Foundry.
Ajouter un algorithme de recherche vectorielle et un profil vectoriel
Les algorithmes de recherche vectorielle sont utilisés pour créer les structures de navigation des requêtes pendant l’indexation. Pour les champs de vecteurs binaires, les comparaisons de vecteurs sont effectuées à l’aide de la métrique de distance de Hamming.
Pour ajouter un champ binaire à un index, configurez une requête
Create or Update Index
à l’aide de l’API REST ou du Portail Azure.Dans le schéma d’index, ajoutez une section
vectorSearch
qui spécifie des profils et des algorithmes.Ajoutez un ou plusieurs algorithmes de recherche vectorielle qui ont une métrique de similarité de
hamming
. Il est courant d’utiliser les petits mondes navigables hiérarchiques (HNSW), mais vous pouvez également utiliser la distance de Hamming avec les K plus proche voisins exhaustifs.Ajoutez un ou plusieurs profils vectoriels qui spécifient l’algorithme.
L’exemple suivant illustre une configuration vectorSearch
de base :
"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 sont de type Collection(Edm.Byte)
et contiennent des incorporations compressées. Par exemple, si la dimension d’incorporation d’origine est de 1024
, la longueur du vecteur binaire compressé est de ceiling(1024 / 8) = 128
. Vous obtenez la forme compressée en définissant la propriété vectorEncoding
sur le champ.
- Ajoutez un champ à la collection de champs et donnez-lui un nom.
- Définissez le type de données sur
Collection(Edm.Byte)
. - Définissez
vectorEncoding
surpackedBit
pour l’encodage binaire. - Affectez la valeur
dimensions
à1024
. Spécifiez la dimension de vecteur d’origine (décompressé). - Définissez
vectorSearchProfile
sur un profil que vous avez défini à l’étape précédente. - Rendre le champ pouvant faire l’objet d’une recherche.
La définition de champ suivante est un exemple des propriétés que vous devez définir :
"fields": [
. . .
{
"name": "my-binary-vector-field",
"type": "Collection(Edm.Byte)",
"vectorEncoding": "packedBit",
"dimensions": 1024,
"vectorSearchProfile": "myHnswProfile",
"searchable": true
},
. . .
]
Voir aussi
Les exemples de code du référentiel azure-search-vector-samples illustrent des workflows de bout en bout qui incluent la définition de schéma, la vectorisation, l’indexation et les requêtes.
Le code de démonstration est disponible en Python, C# et JavaScript.