Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Azure Cosmos DB for NoSQL propose désormais une indexation et une recherche vectorielle efficaces. Cette fonctionnalité est conçue pour gérer des vecteurs multimodaux et haute dimensionnels, ce qui permet une recherche de vecteur efficace et précise à n’importe quelle échelle. Vous pouvez désormais stocker des vecteurs directement dans les documents en même temps que vos données. Chaque document de votre base de données peut contenir non seulement des données sans schéma traditionnelles, mais également des vecteurs multimodaux à haute dimension comme autres propriétés des documents. Cette colocalisation des données et des vecteurs permet une indexation et une recherche efficaces, car les vecteurs sont stockés dans la même unité logique que les données qu’ils représentent. Le fait de conserver les vecteurs et les données ensemble simplifie la gestion des données, les architectures d’applications IA et l’efficacité des opérations basées sur des vecteurs.
Azure Cosmos DB pour NoSQL offre une flexibilité en vous permettant de choisir la méthode d’indexation vectorielle :
- Une recherche exacte des plus proches voisins K (kNN, parfois appelée « force brute ») ou plate peut fournir un rappel de récupération de 100 % pour les recherches vectorielles plus petites et ciblées. en particulier lorsqu’elle est combinée avec des filtres de requête et des clés de partition.
- Index plat quantifié qui compresse les vecteurs à l’aide de méthodes de quantification basées sur DiskANN pour une meilleure efficacité dans la recherche kNN.
- DiskANN, une suite d’algorithmes d’indexation vectorielle de pointe développés par Microsoft Research pour alimenter une recherche vectorielle multimodale efficace et haute précision à n’importe quelle échelle.
Pour en savoir plus sur l’indexation de vecteurs, consultez Index de vecteurs.
La recherche vectorielle dans Azure Cosmos DB peut être combinée, à l’aide de clauses WHERE, avec tous les autres filtres et index de requête NoSQL Azure Cosmos DB pris en charge. Cela permet à vos recherches vectorielles de fournir les données les plus pertinentes pour vos applications.
Cette fonctionnalité améliore les fonctionnalités principales d’Azure Cosmos DB, ce qui le rend plus polyvalent pour gérer les données vectorielles et les exigences de recherche dans les applications IA.
Note
Vous êtes intéressé par les fonctionnalités de recherche vectorielle à débit ultra-élevé ? Azure Cosmos DB développe des fonctionnalités de recherche vectorielle améliorées conçues pour les jeux de données vectoriels volumineux jumelés avec des insertions et des recherches à débit ultra-élevé. Il peut prendre en charge des millions de requêtes par seconde (QPS) avec une faible latence prévisible et une rentabilité inégalée. Inscrivez-vous pour en savoir plus sur les opportunités d’accès précoce et recevez une notification lorsque ces fonctionnalités deviennent disponibles.
Qu’est-ce qu’un magasin vectoriel ?
Un stockage vectoriel ou une base de données vectorielle est une base de données conçue pour stocker et gérer des incorporations vectorielles, qui sont des représentations mathématiques de données dans un espace de grande dimension. Dans cet espace, chaque dimension correspond à une caractéristique des données, et des dizaines de milliers de dimensions peuvent être utilisées pour représenter des données sophistiquées. La position d’un vecteur dans cet espace représente ses caractéristiques. Les mots, expressions ou documents entiers, ainsi que les images, l’audio et d’autres types de données peuvent tous être vectorisés.
Comment fonctionne un magasin de vecteurs ?
Dans un magasin de vecteurs, des algorithmes de recherche vectorielle sont utilisés pour indexer et interroger les incorporations. Certains algorithmes de recherche vectorielle bien connus incluent l’HNSW (Hierarchical Navigable Small World), le fichier inversé (IVF) et DiskANN. La recherche vectorielle est une méthode qui vous aide à trouver des éléments similaires en fonction de leurs caractéristiques de données, plutôt que des correspondances exactes sur un champ de propriété.
Cette technique est utile dans des applications comme la recherche de texte similaire, la recherche d’images associées, la création de recommandations ou même la détection d’anomalies. Elle est utilisée pour interroger les incorporations vectorielles des données que vous avez créées en utilisant un modèle de Machine Learning à l’aide d’une API d’incorporation. Des exemples d’API d’incorporation sont Incorporations Azure OpenAI et Hugging Face sur Azure.
La recherche vectorielle mesure la distance entre les vecteurs de données et votre vecteur de requête. Les vecteurs de données les plus proches de votre vecteur de requête sont ceux qui se révèlent les plus similaires sémantiquement.
Dans la base de données vectorielle intégrée dans Azure Cosmos DB pour NoSQL, les incorporations peuvent être stockées, indexées et interrogées en même temps que les données d’origine. Cette approche élimine le coût supplémentaire dû à la réplication des données dans une base de données vectorielle pure distincte. De plus, cette architecture conserve les incorporations vectorielles et les données d’origine ensemble, ce qui facilite les opérations de données multimodales et permet d’accroître la cohérence, la mise à l’échelle et le niveau de performance des données.
Activer la fonctionnalité d’indexation et de recherche vectorielle
Pour activer cette fonctionnalité pour Azure Cosmos DB pour NoSQL, procédez comme suit :
- Accédez à votre page de ressources Azure Cosmos DB pour NoSQL.
- Dans le volet gauche, sous Paramètres, sélectionnez Fonctionnalités.
- Sélectionnez Recherche vectorielle pour l’API NoSQL.
- Lisez la description de la fonctionnalité pour confirmer que vous souhaitez l’activer.
- Sélectionnez Activer pour activer la recherche vectorielle dans Azure Cosmos DB pour NoSQL.
Conseil / Astuce
Vous pouvez également utiliser Azure CLI pour mettre à jour les fonctionnalités de votre compte pour prendre en charge la recherche vectorielle NoSQL.
az cosmosdb update \
--resource-group <resource-group-name> \
--name <account-name> \
--capabilities EnableNoSQLVectorSearch
La demande d’inscription est approuvée automatiquement, mais il peut prendre 15 minutes.
Stratégies de vecteurs de conteneurs
L’exécution d’une recherche vectorielle avec Azure Cosmos DB pour NoSQL vous oblige à définir une stratégie vectorielle pour le conteneur. Cela fournit des informations essentielles pour que le moteur de base de données effectue une recherche efficace de vecteurs trouvés dans les documents du conteneur. Cela donne également à la stratégie d’indexation de vecteurs les informations nécessaires, si vous choisissez d’en spécifier une. Les informations suivantes sont incluses dans la stratégie de vecteur contenu :
-
path: Le chemin de la propriété qui contient des vecteurs (obligatoire). -
datatype: Type de données de la propriété de vecteur. Les types pris en charge sontfloat32, ,float16int8etuint8. -
dimensions: dimensionnalité ou longueur de chaque vecteur dans le chemin. Tous les vecteurs d’un chemin doivent avoir le même nombre de dimensions. La valeur par défaut est1536. -
distanceFunction: Métrique utilisée pour calculer la distance/la similarité. Métriques prises en charge :- cosinus (valeur par défaut), qui a des valeurs de -1 (moins similaires) à +1 (le plus similaire).
- produit scalaire, qui a des valeurs allant de -inf (le moins similaire) à +inf (le plus similaire).
- euclide, qui a des valeurs comprises entre 0 (le plus similaire) et +inf (moins similaire).
Note
Chaque chemin unique peut disposer au maximum d’une stratégie. Toutefois, plusieurs stratégies peuvent être spécifiées s’ils ciblent tous un chemin différent.
Note
De nombreux modèles incorporés représentent des éléments d’un vecteur à l’aide de float32. L’utilisation float16 peut à la place réduire l’empreinte de stockage des vecteurs de 50%, mais une certaine réduction de la précision peut aboutir.
La stratégie de vecteur de conteneur peut être décrite sous forme d'objets JSON. Voici deux exemples de stratégies de vecteur de conteneur valides :
Une stratégie avec un tracé vectoriel unique
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
}
]
}
Une stratégie avec deux tracés vectoriels
{
"vectorEmbeddings": [
{
"path":"/vector1",
"dataType":"float32",
"distanceFunction":"cosine",
"dimensions":1536
},
{
"path":"/vector2",
"dataType":"float16",
"distanceFunction":"dotproduct",
"dimensions":100
}
]
}
Stratégies d’indexation de vecteurs
Les index vectoriels augmentent l’efficacité lors de l’exécution de recherches vectorielles à l’aide de la VectorDistance fonction système. Les recherches vectorielles ont une latence plus faible, un débit plus élevé et moins de consommation de RU lors de l’utilisation d’un index vectoriel. Vous pouvez spécifier les types de stratégies d’index vectoriel suivants :
| Type | Descriptif | Dimensions maximales |
|---|---|---|
flat |
Stocke les vecteurs sur le même index que d’autres propriétés indexées. | 505 |
quantizedFlat |
Quantifie (compresse) les vecteurs avant le stockage sur l’index. Cela peut améliorer la latence et le débit au prix d’une précision légèrement moins grande. | 4096 |
diskANN |
Crée un index basé sur DiskANN pour une recherche approximative rapide et efficace. | 4096 |
Note
Les index quantizedFlat et diskANN nécessitent qu’au moins 1 000 vecteurs soient ajoutés. Cela permet de garantir la précision du processus de quantification. S’il y a moins de 1 000 vecteurs, une analyse complète est exécutée à la place, ce qui entraîne des frais de RU plus élevés pour une requête de recherche vectorielle.
Voici quelques points à prendre en compte :
Les types d'index
flatetquantizedFlatutilisent l’index d’Azure Cosmos DB pour stocker et lire chaque vecteur lors de l’exécution d’une recherche vectorielle. Les recherches vectorielles avec un indexflatsont des recherches par force brute et produisent une exactitude ou un rappel de 100 %. Autrement dit, vous êtes sûr de trouver les vecteurs les plus similaires dans le jeu de données. Toutefois, il existe une limitation de dimensions505pour les vecteurs sur un index plat.L’index
quantizedFlatstocke les vecteurs quantifiés (compressés) sur l’index. Les recherches vectorielles avec un indexquantizedFlatsont également des recherches par force brute, mais leur exactitude peut être légèrement inférieure à 100 %, car les vecteurs sont quantifiés avant l’ajout à l’index. Toutefois, les recherches vectorielles avecquantized flatdoivent avoir une latence plus faible, un débit plus élevé et un coût de RU moins élevé que les recherches vectorielles sur un indexflat. Il s’agit d’une bonne option pour les scénarios plus petits ou ceux où vous utilisez des filtres de requête pour limiter la recherche vectorielle à un ensemble relativement petit de vecteurs.quantizedFlatest recommandé quand le nombre de vecteurs à indexer est aux alentours de 50 000 ou moins par partition physique. Cependant, il ne s’agit que d’une recommandation générale et vous devez tester les performances réelles, car chaque scénario peut être différent.L’index
diskANNest un index distinct défini spécifiquement pour les vecteurs utilisant DiskANN, la suite d’algorithmes d’indexation de vecteurs hautes performances développée par Microsoft Research. Les index DiskANN peuvent offrir une des latences les plus faibles, un débit parmi les plus élevés et des requêtes au coût de RU le plus bas, tout en conservant une grande exactitude. En général, DiskANN est le type d’index le plus performant de tous s’il existe plus de 50 000 vecteurs par partition physique.
Voici des exemples de stratégies d’index vectoriel valides :
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
},
{
"path": "/vector1/*"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "diskANN"
}
]
}
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
}
],
"vectorIndexes": [
{
"path": "/vector1",
"type": "quantizedFlat"
},
{
"path": "/vector2",
"type": "diskANN"
}
]
}
Important
Les caractères génériques (*, []) et les chemins vectoriels imbriqués dans les tableaux ne sont actuellement pas pris en charge dans la politique vectorielle ou l’indice vectoriel.
Effectuer une recherche vectorielle avec des requêtes à l’aide de VectorDistance
Une fois que vous avez créé un conteneur avec la stratégie vectorielle souhaitée et inséré des données vectorielles dans le conteneur, vous pouvez effectuer une recherche vectorielle à l’aide de la fonction système VectorDistance dans une requête. L’exemple suivant montre une requête NoSQL qui projette le score de similarité en tant qu’alias SimilarityScoreet trie dans l’ordre le plus similaire au moins similaire :
SELECT TOP 10 c.title, VectorDistance(c.contentVector, [1,2,3]) AS SimilarityScore
FROM c
ORDER BY VectorDistance(c.contentVector, [1,2,3])
Important
Utilisez toujours une clause TOP N dans l’instruction SELECT d’une requête. Sinon, la recherche vectorielle tente de retourner beaucoup plus de résultats et la requête coûte plus de RU et a une latence plus élevée que nécessaire.
Limitations actuelles
L’indexation et la recherche vectorielle dans Azure Cosmos DB for NoSQL a des limites.
- Les index
quantizedFlatetdiskANNnécessitent l’indexation d’au moins 1 000 vecteurs pour veiller à ce que la quantification soit exacte. Si moins de 1 000 vecteurs sont indexés, une analyse complète est utilisée à la place et les frais de RU peuvent être plus élevés. - Les vecteurs indexés avec le type d’index
flatpeuvent être au maximum de 505 dimensions. Les vecteurs indexés avec le type d’indexquantizedFlatouDiskANNpeuvent être au maximum de 4 096 dimensions. - Le taux d’insertions vectorielles doit être limité. Une ingestion très importante (supérieure à 5 M de vecteurs) sur une courte période peut nécessiter un temps de création d'index plus long.
- La fonctionnalité de recherche vectorielle n’est actuellement pas prise en charge sur les conteneurs existants. Pour l'utiliser, un nouveau conteneur doit être créé et la politique d'intégration vectorielle au niveau du conteneur doit être spécifiée.
- Les bases de données à débit partagé ne sont pas prises en charge.
- À ce stade, l’indexation et la recherche vectorielles ne sont pas prises en charge sur les comptes avec un débit partagé.
- Une fois l’indexation vectorielle et la recherche activées sur un conteneur, elle ne peut pas être désactivée.
Contenu connexe
- DiskANN + Azure Cosmos DB – Microsoft Mechanics Video
- .NET - Guide pratique pour indexer et interroger des données vectorielles
- Python - Guide pratique pour indexer et interroger des données vectorielles
- Java - Guide pratique pour indexer et interroger des données vectorielles
- Fonction système VectorDistance
- Vue d’ensemble de l’index vectoriel
- Stratégies d’index vectoriel
- Exemples de stratégie d’indexation de vecteurs
- Intégrations :