Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Recherche vectorielle pour Amazon DocumentDB
La recherche vectorielle est une méthode utilisée dans l'apprentissage automatique pour trouver des points de données similaires à un point de données donné en comparant leurs représentations vectorielles à l'aide de métriques de distance ou de similitude. Plus les deux vecteurs sont proches de l'espace vectoriel, plus les éléments sous-jacents sont considérés comme similaires. Cette technique permet de saisir la signification sémantique des données. Cette approche est utile dans diverses applications, telles que les systèmes de recommandation, le traitement du langage naturel et la reconnaissance d'images.
La recherche vectorielle pour Amazon DocumentDB associe la flexibilité et la richesse des fonctionnalités d'interrogation d'une base de données de JSON-based documents à la puissance de la recherche vectorielle. Si vous souhaitez utiliser vos données Amazon DocumentDB existantes ou une structure de données documentaire flexible pour créer des cas d'utilisation de l'apprentissage automatique et de l'IA générative, tels que l'expérience de recherche sémantique, la recommandation de produits, la personnalisation, les chatbots, la détection des fraudes et la détection des anomalies, la recherche vectorielle pour Amazon DocumentDB est le choix idéal pour vous. La recherche vectorielle est disponible sur les clusters basés sur des instances Amazon DocumentDB 5.0.
Rubriques
Insertion de vecteurs
Pour insérer des vecteurs dans votre base de données Amazon DocumentDB, vous pouvez utiliser les méthodes d'insertion existantes :
Exemple
Dans l'exemple suivant, une collection de cinq documents au sein d'une base de données de test est créée. Chaque document comprend deux champs : le nom du produit et son intégration vectorielle correspondante.
db.collection.insertMany([ {"product_name": "Product A", "vectorEmbedding": [0.2, 0.5, 0.8]}, {"product_name": "Product B", "vectorEmbedding": [0.7, 0.3, 0.9]}, {"product_name": "Product C", "vectorEmbedding": [0.1, 0.2, 0.5]}, {"product_name": "Product D", "vectorEmbedding": [0.9, 0.6, 0.4]}, {"product_name": "Product E", "vectorEmbedding": [0.4, 0.7, 0.2]} ]);
Création d'un index vectoriel
Amazon DocumentDB prend en charge les méthodes d'indexation HNSW (Hierarchical Navigable Small World) et IVFFlat (Inverted File with Flat Compression). Un index IVFFlat sépare les vecteurs en listes et recherche ensuite un sous-ensemble sélectionné de ces listes le plus proche du vecteur de requête. D'autre part, un indice HNSW organise les données vectorielles dans un graphique multicouche. Bien que HNSW ait des temps de construction plus lents que IVFFlat, il offre de meilleures performances de requête et de meilleur rappel. Contrairement à IVFFlat, HNSW ne comporte aucune étape d'apprentissage, ce qui permet de générer l'index sans aucun chargement de données initial. Dans la plupart des cas d'utilisation, utilisez le type d'index HNSW pour la recherche vectorielle.
Si vous ne créez pas d'index vectoriel, Amazon DocumentDB effectue une recherche avec précision du voisin le plus proche, garantissant ainsi un rappel parfait. Cependant, dans les scénarios de production, la rapidité est cruciale. Utilisez des index vectoriels, qui peuvent échanger un peu de rappel contre une vitesse accrue. Il est important de noter que l'ajout d'un index vectoriel peut entraîner des résultats de requête différents.
Modèles
Vous pouvez utiliser les runCommand modèles createIndex ou les modèles suivants pour créer un index vectoriel sur un champ vectoriel :
| Paramètre | Exigence | Type de données | Description | Valeur (s) |
|---|---|---|---|---|
|
|
facultatif |
chaîne |
Spécifie le nom de l'index. |
Alphanumérique |
|
|
facultatif |
Spécifie le type d'index. |
Pris en charge : hnsw ou ifflat Par défaut : HNSW (correctif moteur 3.0.4574 et versions ultérieures) |
|
|
|
obligatoire |
entier |
Spécifie le nombre de dimensions dans les données vectorielles. |
Maximum de 2 000 dimensions. |
|
|
obligatoire |
chaîne |
Spécifie la métrique de distance utilisée pour le calcul de similarité. |
|
|
|
requis pour IVFFlat |
entier |
Spécifie le nombre de clusters que l'index IVFFlat utilise pour regrouper les données vectorielles. Le paramètre recommandé est le nombre de documents/1000 pour un maximum de 1 million de documents et |
Minimum : 1 Maximum : reportez-vous au tableau des listes par type d'instance Caractéristiques et limites ci-dessous. |
|
|
facultatif |
entier |
Spécifie le nombre maximum de connexions pour un index HNSW |
Par défaut: 16 Portée [2, 100] |
|
|
facultatif |
entier |
Spécifie la taille de la liste dynamique de candidats pour la construction du graphique pour l'indice HNSW.
|
Par défaut: 64 Portée [4, 1000] |
Il est important que vous définissiez correctement la valeur des sous-paramètres tels que lists pour IVFFlat et m et efConstruction pour HNSW accuracy/recall, car cela affectera le temps de génération et les performances de votre recherche. Une valeur de liste plus élevée augmente la vitesse de la requête car elle réduit le nombre de vecteurs dans chaque liste, ce qui réduit la taille des régions. Cependant, une région plus petite peut entraîner un plus grand nombre d'erreurs de rappel, ce qui se traduit par une précision moindre. Pour HNSW, l'augmentation de la valeur m et efConstruction de la précision, mais aussi le temps et la taille de l'indice augmentent. Voir les exemples suivants :
Exemples
Obtenir une définition d'index
Vous pouvez consulter les détails de vos index, y compris les index vectoriels, à l'aide de la getIndexes commande :
Exemple
db.collection.getIndexes()
Exemple de sortie
[
{
"v" : 4,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "test.collection"
},
{
"v" : 4,
"key" : {
"vectorEmbedding" : "vector"
},
"name" : "myIndex",
"vectorOptions" : {
"type" : "ivfflat",
"dimensions" : 3,
"similarity" : "euclidean",
"lists" : 1
},
"ns" : "test.collection"
}
]
Interrogation des vecteurs
Amazon DocumentDB prend en charge deux opérateurs de recherche vectorielle pour interroger des vecteurs :
Opérateur de recherche vectorielle classique
Utilisez le modèle suivant pour interroger un vecteur :
db.collection.aggregate([ { $search: { "vectorSearch": { "vector": <query vector>, "path": "<vectorField>", "similarity": "<distance metric>", "k": <number of results>, "probes":<number of probes> [applicable for IVFFlat], "efSearch":<size of the dynamic list during search> [applicable for HNSW] } } } ]);
| Paramètre | Exigence | Type | Description | Valeur (s) |
|---|---|---|---|---|
|
|
obligatoire |
opérateur |
Utilisé dans la commande $search pour interroger les vecteurs. |
|
|
|
obligatoire |
array |
Indique le vecteur de requête qui sera utilisé pour rechercher des vecteurs similaires. |
|
|
|
obligatoire |
chaîne |
Définit le nom du champ vectoriel. |
|
|
|
obligatoire |
entier |
Spécifie le nombre de résultats renvoyés par la recherche. |
|
|
|
obligatoire |
chaîne |
Spécifie la métrique de distance utilisée pour le calcul de similarité. |
|
|
|
facultatif |
entier |
Le nombre de clusters que la recherche vectorielle doit inspecter. Une valeur plus élevée permet un meilleur rappel au détriment de la rapidité. Il peut être réglé sur le nombre de listes pour la recherche exacte du voisin le plus proche (auquel cas le planificateur n'utilisera pas l'index). Le réglage recommandé pour commencer à affiner le réglage est |
Valeur par défaut : 1 |
|
|
facultatif |
entier |
Spécifie la taille de la liste dynamique de candidats utilisée par l'index HNSW lors de la recherche. Une valeur plus élevée de |
Valeur par défaut : 40 Plage [1, 1000] |
Il est important d'affiner la valeur de efSearch (HNSW) ou probes (IVFFlat) pour obtenir les performances et la précision souhaitées. Consultez les exemples d'opérations suivants :
Exemple de sortie
Le résultat de cette opération ressemble à ce qui suit :
{ "_id" : ObjectId("653d835ff96bee02cad7323c"), "product_name" : "Product A", "vectorEmbedding" : [ 0.2, 0.5, 0.8 ] }
{ "_id" : ObjectId("653d835ff96bee02cad7323e"), "product_name" : "Product C", "vectorEmbedding" : [ 0.1, 0.2, 0.5 ] }
Opérateur $VectorSearch (disponible dans Amazon DocumentDB 8.0 et versions ultérieures)
Utilisez le modèle suivant pour interroger un vecteur :
db.collection.aggregate([ { "$vectorSearch": { "exact": true | false, "index": "<index-name>" [supports only HNSW index], "limit": <number-of-results> [same as k], "path": "<vector field-to-search>", "queryVector": <array-of-numbers>, "numCandidates": <number-of-candidates> [same as efSearch], } }])
Caractéristiques et limites
Compatibilité des versions
La recherche vectorielle pour Amazon DocumentDB est uniquement disponible sur les clusters basés sur des instances Amazon DocumentDB 5.0+.
Vecteurs
Amazon DocumentDB peut indexer des vecteurs comportant jusqu'à 2 000 dimensions. Cependant, jusqu'à 16 000 dimensions peuvent être stockées sans index.
Index
-
Pour la création d'un index IVFFlat, le paramètre recommandé pour le paramètre des listes est le nombre de documents/1000 documents pouvant atteindre 1 million et plus d'un million
sqrt(# of documents)de documents. En raison d'une limite de mémoire de travail, Amazon DocumentDB prend en charge une certaine valeur maximale du paramètre de listes en fonction du nombre de dimensions. À titre de référence, le tableau suivant fournit les valeurs maximales du paramètre de listes pour les vecteurs de 500, 1 000 et 2 000 dimensions :Type d’instance Listes de 500 dimensions Listes de 1 000 dimensions Listes avec 2000 dimensions t3.med
372
257
150
R5 l.
915
741
511
r5.xl
1 393
1 196
901
r5,2 XL
5 460
5 230
4 788
r5,4XL
7 842
7 599
7 138
R 5,8 XL
11 220
10 974
10 498
r5,12 XL
13 774
13 526
13 044
r5,16 XL
15 943
15 694
15 208
r5,24 XL
19 585
19 335
18 845
Aucune autre option d'index telle que
compoundsparseou n'est prise en charge avecpartialles index vectoriels.La création d'index parallèle n'est pas prise en charge pour l'index HNSW dans Amazon DocumentDB 5.0.
Requête vectorielle
Pour les requêtes de recherche vectorielle, il est important d'affiner les paramètres tels que
probesouefSearchpour des résultats optimaux. Plus la valeurprobesou leefSearchparamètre est élevé, plus le rappel est élevé et plus la vitesse est faible. Le réglage recommandé pour commencer à affiner le paramètre des sondes estsqrt(# of lists).
Bonnes pratiques
Découvrez les meilleures pratiques pour utiliser la recherche vectorielle dans Amazon DocumentDB. Cette section est mise à jour en continu à mesure que de nouvelles bonnes pratiques sont identifiées.
-
La création d'un index IVFFlat (Inverted File with Flat Compression) implique le clustering et l'organisation des points de données en fonction des similitudes. Pour qu'un index soit plus efficace, chargez certaines données avant de le créer.
-
Pour les requêtes de recherche vectorielle, il est important d'affiner les paramètres, par exemple
efSearchpourprobesdes résultats optimaux. Plus la valeur duefSearchparamètreprobesou est élevée, plus le rappel est élevé et plus la vitesse est faible. Le réglage recommandé pour commencer à affiner leprobesparamètre estsqrt(lists).
Ressources