Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Ricerca vettoriale per Amazon DocumentDB
La ricerca vettoriale è un metodo utilizzato nell'apprendimento automatico per trovare punti dati simili a un determinato punto dati confrontando le relative rappresentazioni vettoriali utilizzando metriche di distanza o somiglianza. Più i due vettori sono vicini nello spazio vettoriale, più simili sono considerati gli elementi sottostanti. Questa tecnica aiuta a catturare il significato semantico dei dati. Questo approccio è utile in varie applicazioni, come i sistemi di raccomandazione, l'elaborazione del linguaggio naturale e il riconoscimento delle immagini.
La ricerca vettoriale per Amazon DocumentDB combina la flessibilità e la ricca capacità di interrogazione di un database di JSON-based documenti con la potenza della ricerca vettoriale. Se desideri utilizzare i tuoi dati Amazon DocumentDB esistenti o una struttura flessibile dei dati dei documenti per creare casi d'uso di machine learning e intelligenza artificiale generativa, come esperienza di ricerca semantica, consigli sui prodotti, personalizzazione, chatbot, rilevamento di frodi e rilevamento di anomalie, la ricerca vettoriale per Amazon DocumentDB è la scelta ideale per te. La ricerca vettoriale è disponibile nei cluster basati su istanze Amazon DocumentDB 5.0.
Argomenti
Inserimento di vettori
Per inserire vettori nel tuo database Amazon DocumentDB, puoi utilizzare i metodi di inserimento esistenti:
Esempio
Nell'esempio seguente, viene creata una raccolta di cinque documenti all'interno di un database di test. Ogni documento include due campi: il nome del prodotto e il corrispondente incorporamento vettoriale.
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]} ]);
Creazione di un indice vettoriale
Amazon DocumentDB supporta i metodi di indicizzazione Hierarchical Navigable Small World (HNSW) e Inverted File with Flat Compression (IVFFlat). Un indice IVFFlat separa i vettori in elenchi e successivamente cerca un sottoinsieme selezionato di quegli elenchi più vicini al vettore di query. D'altra parte, un indice HNSW organizza i dati vettoriali in un grafico a più livelli. Sebbene HNSW abbia tempi di compilazione più lenti rispetto a IVFFlat, offre migliori prestazioni di interrogazione e richiamo. A differenza di IVFFlat, HNSW non prevede alcuna fase di addestramento e consente di generare l'indice senza alcun caricamento iniziale dei dati. Per la maggior parte dei casi d'uso, utilizzate il tipo di indice HNSW per la ricerca vettoriale.
Se non crei un indice vettoriale, Amazon DocumentDB esegue una ricerca esatta del vicino più prossimo, garantendo un richiamo perfetto. Tuttavia, negli scenari di produzione, la velocità è fondamentale. Utilizzate indici vettoriali, che potrebbero sostituire alcuni richiami con una maggiore velocità. È importante notare che l'aggiunta di un indice vettoriale può portare a risultati di ricerca diversi.
Modelli
Puoi utilizzare quanto segue createIndex o i runCommand modelli per creare un indice vettoriale su un campo vettoriale:
| Parametro | Requisito | Tipo di dati | Description | Valore/i |
|---|---|---|---|---|
|
|
facoltativo |
stringa |
Specifica il nome dell'indice. |
Carattere alfanumerico |
|
|
facoltativo |
Specifica il tipo di indice. |
Supportato: hnsw o ifflat Predefinito: HNSW (patch del motore 3.0.4574 in poi) |
|
|
|
obbligatorio |
intero |
Specifica il numero di dimensioni nei dati vettoriali. |
Massimo 2.000 dimensioni. |
|
|
obbligatorio |
stringa |
Specifica la metrica della distanza utilizzata per il calcolo della somiglianza. |
|
|
|
obbligatorio per IVFFlat |
intero |
Specifica il numero di cluster utilizzati dall'indice IVFFlat per raggruppare i dati vettoriali. L'impostazione consigliata è il numero di documents/1000 per un massimo di 1 milione di documenti e per oltre 1 milione di documenti. |
Minimo: 1 Numero massimo: consulta la tabella degli elenchi per tipo di istanza riportata di seguito. Caratteristiche e limitazioni |
|
|
facoltativo |
intero |
Specifica il numero massimo di connessioni per un indice HNSW |
Impostazione predefinita: 16 Intervallo [2, 100] |
|
|
facoltativo |
intero |
Specifica la dimensione dell'elenco dinamico di candidati per la costruzione del grafico per l'indice HNSW.
|
Impostazione predefinita: 64 Intervallo [4, 1000] |
È importante impostare il valore dei sottoparametri come lists per IVFFlat m e efConstruction per HNSW in modo appropriato poiché influirà sui tempi di compilazione e sulle prestazioni della accuracy/recall ricerca. Un valore di elenco più elevato aumenta la velocità dell'interrogazione in quanto riduce il numero di vettori in ogni elenco, con conseguente riduzione delle aree. Tuttavia, una regione di dimensioni inferiori può comportare un maggior numero di errori di richiamo, con conseguente minore precisione. Per HNSW, l'aumento del valore m e della precisione, ma efConstruction aumenta anche il tempo e le dimensioni di creazione dell'indice. Fare riferimento agli esempi riportati di seguito:
Esempi
Ottenere una definizione dell'indice
Puoi visualizzare i dettagli dei tuoi indici, inclusi gli indici vettoriali, usando il comando: getIndexes
Esempio
db.collection.getIndexes()
Output di esempio
[
{
"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"
}
]
Query sui vettori
Amazon DocumentDB supporta due operatori di ricerca vettoriale per interrogare i vettori:
Operatore di ricerca vettoriale classico
Usa il seguente modello per interrogare un vettore:
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] } } } ]);
| Parametro | Requisito | Tipo | Description | Valore/i |
|---|---|---|---|---|
|
|
obbligatorio |
operatore |
Utilizzato all'interno del comando $search per interrogare i vettori. |
|
|
|
obbligatorio |
array |
Indica il vettore di interrogazione che verrà utilizzato per trovare vettori simili. |
|
|
|
obbligatorio |
stringa |
Definisce il nome del campo vettoriale. |
|
|
|
obbligatorio |
intero |
Specifica il numero di risultati restituiti dalla ricerca. |
|
|
|
obbligatorio |
stringa |
Specifica la metrica della distanza utilizzata per il calcolo della somiglianza. |
|
|
|
facoltativo |
intero |
Il numero di cluster che desideri ispezionare con la ricerca vettoriale. Un valore più alto offre un migliore richiamo a scapito della velocità. Può essere impostato sul numero di elenchi per la ricerca esatta del vicino più vicino (a quel punto il planner non utilizzerà l'indice). L'impostazione consigliata per iniziare la messa a punto è. |
Impostazione predefinita: 1 |
|
|
facoltativo |
intero |
Specifica la dimensione dell'elenco dinamico di candidati utilizzato dall'indice HNSW durante la ricerca. Un valore più elevato di |
Impostazione predefinita: 40 Intervallo [1, 1000] |
È importante regolare con precisione il valore di efSearch (HNSW) o probes (IVFFlat) per ottenere le prestazioni e la precisione desiderate. Vedi i seguenti esempi di operazioni:
Output di esempio
L'aspetto dell'output di questa operazione è simile al seguente.
{ "_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 ] }
operatore $vectorSearch (disponibile in Amazon DocumentDB 8.0 e versioni successive)
Usa il seguente modello per interrogare un vettore:
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], } }])
Caratteristiche e limitazioni
Compatibilità delle versioni
La ricerca vettoriale per Amazon DocumentDB è disponibile solo sui cluster basati su istanze Amazon DocumentDB 5.0+.
Vettori
Amazon DocumentDB può indicizzare vettori fino a 2.000 dimensioni. Tuttavia, è possibile memorizzare fino a 16.000 dimensioni senza un indice.
Indici
-
Per la creazione dell'indice IVFFlat, l'impostazione consigliata per il parametro degli elenchi è il numero di documenti per un massimo di 1 milione e documents/1000
sqrt(# of documents)per oltre 1 milione di documenti. A causa di un limite di memoria di lavoro, Amazon DocumentDB supporta un determinato valore massimo del parametro degli elenchi in base al numero di dimensioni. A titolo di riferimento, la seguente tabella fornisce i valori massimi dei parametri delle liste per vettori di 500, 1000 e 2.000 dimensioni:Tipo di istanza Elenchi con 500 dimensioni Elenchi con 1000 dimensioni Elenchi con 2000 dimensioni t3.med
372
257
150
r5.l
915
741
511
r5.xl
1.393
1.196
901
r 5.2 xl
5.460
5.230
4.788
r 5.4xl
7.842
7.599
7.138
r 5,8 xl
11.220
10.974
10.498
r 5,12 xl
13.774
13.526
13.044
r 5,16 xl
15.943
15.694
15,208
r 5,24 xl
19.585
19,335
18.845
Nessun'altra opzione di indice come
compoundsparseo è supportata conpartialgli indici vettoriali.La creazione parallela dell'indice non è supportata per l'indice HNSW in Amazon DocumentDB 5.0.
Query vettoriale
Per le query di ricerca vettoriale, è importante ottimizzare i parametri, ad esempio
probesefSearchper ottenere risultati ottimali. Maggiore è il valore delefSearchparametroprobeso, maggiore è il richiamo e minore è la velocità. L'impostazione consigliata per iniziare la regolazione fine del parametro delle sonde è.sqrt(# of lists)
Best practice
Scopri le best practice per lavorare con la ricerca vettoriale in Amazon DocumentDB. Questa sezione viene continuamente aggiornata man mano che vengono identificate nuove best practice.
-
La creazione dell'indice Inverted File with Flat Compression (IVFFlat) prevede il clustering e l'organizzazione dei punti dati in base alle somiglianze. Affinché un indice sia più efficace, carica alcuni dati prima di creare l'indice.
-
Per le query di ricerca vettoriale, è importante ottimizzare i parametri, ad esempio
probesefSearchper ottenere risultati ottimali. Maggiore è il valore delefSearchparametroprobesor, maggiore è il richiamo e minore è la velocità. L'impostazione consigliata per iniziare la regolazione fine delprobesparametro èsqrt(lists).
Risorse