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 en 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 similarité. 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 le sens 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 riche capacité d'interrogation d'une base de données de documents basée sur JSON à 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 de fraudes et la détection d'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 dans une base de données de test est créée. Chaque document comprend deux champs : le nom du produit et son incorporation 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 à la fois l'indexation Hierarchical Navigable Small World (HNSW) et les méthodes d'indexation Inverted File with Flat Compression (). IVFFlat Un IVFFlat index sépare les vecteurs en listes et recherche ensuite un sous-ensemble sélectionné de ces listes les plus proches du vecteur de requête. D'autre part, un indice HNSW organise les données vectorielles dans un graphique multicouche. Bien que les temps de construction de HNSW soient plus lents que ceux de HNSW IVFFlat, il offre de meilleures performances de requête et un meilleur rappel. Contrairement à HNSW IVFFlat, aucune étape d'apprentissage n'est impliquée, ce qui permet de générer l'index sans aucun chargement de données initial. Dans la majorité des cas d'utilisation, nous recommandons d'utiliser le type d'index HNSW pour la recherche vectorielle.
Si vous ne créez pas d'index vectoriel, Amazon DocumentDB effectue une recherche avec le voisin le plus proche, garantissant ainsi un rappel parfait. Cependant, dans les scénarios de production, la rapidité est cruciale. Nous vous recommandons d'utiliser des index vectoriels, qui peuvent échanger un certain rappel contre une amélioration de la vitesse. 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 suivants createIndex
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. |
Supporté : hnsw ou ivfflat Par défaut : HNSW (patch moteur 3.0.4574 et versions ultérieures) |
|
|
obligatoire |
entier |
Spécifie le nombre de dimensions des 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 utilisés par l' IVFFlat index 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 Gamme [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 Gamme [4, 1000] |
Il est important que vous définissiez correctement la valeur des sous-paramètres tels que lists
for IVFFlat m
et efConstruction
pour HNSW, car cela affectera la précision/le rappel, le temps de création 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 taille de région plus petite peut entraîner un plus grand nombre d'erreurs de rappel, ce qui se traduit par une baisse de la précision. Pour HNSW, l'augmentation de la valeur m
et de la précision de l'index efConstruction
augmente, tout en augmentant le temps et la taille de l'index. 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 suivante :
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"
}
]
Vecteurs d'interrogation
Modèle de requête vectorielle
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ée dans la commande $search pour interroger les vecteurs. |
|
|
obligatoire |
array |
Indique le vecteur de requête qui sera utilisé pour trouver 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 défini sur le nombre de listes pour la recherche du voisin le plus proche exact (auquel cas le planificateur n'utilisera pas l'index). Le paramètre recommandé pour commencer le réglage fin 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 Gamme [1, 1000] |
Il est important de régler avec précision 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 ] }
Caractéristiques et limites
Compatibilité des versions
La recherche vectorielle pour Amazon DocumentDB n'est disponible que sur les clusters basés sur des instances Amazon DocumentDB 5.0.
Vecteurs
Amazon DocumentDB peut indexer des vecteurs de 2 000 dimensions maximum. Cependant, il est possible de stocker jusqu'à 16 000 dimensions sans index.
Index
-
Pour la création d' IVFFlat index, le paramètre recommandé pour le paramètre des listes est le nombre de documents/1000 pour un maximum de 1 million de documents et
sqrt(# of documents)
pour plus d'un million de documents. En raison d'une limite de mémoire de travail, Amazon DocumentDB prend en charge une certaine valeur maximale du paramètre des listes en fonction du nombre de dimensions. À titre de référence, le tableau suivant fournit les valeurs maximales du paramètre des listes pour les vecteurs de 500, 1 000 et 2 000 dimensions :Type d’instance Listes de 500 dimensions Listes de 1000 dimensions Listes de 2000 dimensions t3.med
372
257
150
r5.l
915
741
511
r5.xl
1 393
1 196
901
r5.2xl
5 460
5 230
4 788
r5,4xl
7 842
7 599
7 138
r5,8xl
11 220
10 974
10 498
r5,12xl
13 774
13 526
13 044
r5,16xl
15 943
15 694
15 208
r5,24xl
19 585
19 335
18 845
Aucune autre option d'index telle que
compound
,sparse
ou n'est prisepartial
en charge par les index vectoriels.La création d'index parallèle n'est pas prise en charge pour l'indice HNSW. Il n'est pris en charge que pour IVFFlat l'index.
Requête vectorielle
Pour les requêtes de recherche vectorielle, il est important d'affiner les paramètres tels que
probes
ouefSearch
pour obtenir des résultats optimaux. Plus la valeurprobes
ou leefSearch
paramètre est élevée, 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 relatives à l'utilisation de 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 de fichier inversé avec compression plate (IVFFlat) implique le regroupement et l'organisation des points de données en fonction des similitudes. Par conséquent, pour qu'un index soit plus efficace, nous vous recommandons de charger au moins certaines données avant de créer l'index.
-
Pour les requêtes de recherche vectorielle, il est important d'affiner les paramètres, par exemple
probes
ouefSearch
pour obtenir des résultats optimaux. Plus la valeur duefSearch
paramètreprobes
or est élevée, plus le rappel est élevé et plus la vitesse est faible. Le réglage recommandé pour commencer à affiner leprobes
paramètre estsqrt(lists)
.
Ressources