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 dato punto dati confrontando le relative rappresentazioni vettoriali utilizzando metriche di distanza o somiglianza. Più i due vettori sono vicini nello spazio vettoriale, più gli elementi sottostanti vengono considerati simili. 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 JSON un database di documenti basato sulla potenza della ricerca vettoriale. Se desideri utilizzare i dati esistenti di Amazon DocumentDB o una struttura di dati documentale flessibile per creare casi d'uso di machine learning e intelligenza artificiale generativa, come esperienza di ricerca semantica, consigli di 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 di 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 l'incorporamento vettoriale corrispondente.
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 sia l'indicizzazione Hierarchical Navigable Small World (HNSW) che i metodi di indicizzazione Inverted File with Flat Compression (). IVFFlat Un IVFFlat indice separa i vettori in elenchi e successivamente cerca un sottoinsieme selezionato di quegli elenchi più vicini al vettore di query. D'altra parte, un HNSW indice organizza i dati vettoriali in un grafico a più livelli. Sebbene HNSW abbia tempi di compilazione più lenti rispetto aIVFFlat, offre prestazioni di query e richiamo migliori. Al contrarioIVFFlat, non HNSW prevede alcuna fase di formazione, il che consente la generazione dell'indice senza alcun caricamento iniziale dei dati. Per la maggior parte dei casi d'uso, consigliamo di utilizzare il tipo di HNSW indice per la ricerca vettoriale.
Se non crei un indice vettoriale, Amazon DocumentDB esegue una ricerca esatta del vicino più vicino, assicurando un richiamo perfetto. Tuttavia, negli scenari di produzione, la velocità è fondamentale. Consigliamo di utilizzare indici vettoriali, che potrebbero sostituire alcuni richiami in cambio di una maggiore velocità. È importante notare che l'aggiunta di un indice vettoriale può portare a risultati di query diversi.
Modelli
È possibile utilizzare quanto segue createIndex
o i runCommand
modelli per creare un indice vettoriale su un campo vettoriale:
Parametro | Requisito | Tipo di dati | Descrizione | Valore (i) |
---|---|---|---|---|
|
facoltativo |
string |
Specificate il nome dell'indice. |
Carattere alfanumerico |
|
facoltativo |
Speciifica il tipo di indice. |
Supportato: hnsw o ivfflat Impostazione predefinita: HNSW (patch del motore 3.0.4574 in poi) |
|
|
obbligatorio |
integer |
Speciifica il numero di dimensioni nei dati vettoriali. |
Massimo 2.000 dimensioni. |
|
obbligatorio |
string |
Specifica la metrica della distanza utilizzata per il calcolo della somiglianza. |
|
|
richiesto per IVFFlat |
integer |
Speciifica il numero di cluster utilizzati dall'IVFFlatindice per raggruppare i dati vettoriali. L'impostazione consigliata è il numero di documenti/1000 per un massimo di 1 milione di documenti e per oltre 1 milione di documenti. |
Minimo: 1 Massimo: fai riferimento alla tabella dei tipi di istanza degli elenchi per istanza riportata di seguito. Caratteristiche e limitazioni |
|
facoltativo |
integer |
Speciifica il numero massimo di connessioni per un indice HNSW |
Impostazione predefinita: 16 Intervallo [2, 100] |
|
facoltativo |
integer |
Specifica la dimensione dell'elenco dinamico dei candidati per la costruzione del grafico per HNSW l'indice.
|
Impostazione predefinita: 64 Intervallo [4, 1000] |
È importante impostare il valore dei sottoparametri, ad esempio lists
for IVFFlat m
e efConstruction
for, in HNSW modo appropriato, poiché ciò influirà sulla precisione/richiamo, sui tempi di compilazione e sulle prestazioni della ricerca. Un valore di elenco più alto aumenta la velocità della query in quanto riduce il numero di vettori in ogni elenco, con conseguenti aree più piccole. Tuttavia, una dimensione dell'area più piccola può portare a più errori di richiamo, con conseguente minore precisione. InfattiHNSW, aumentando il valore m
e la precisione dell'indice, si efConstruction
aumentano anche i tempi e le dimensioni di costruzione dell'indice. Fare riferimento agli esempi riportati di seguito:
Examples (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"
}
]
Interrogazione dei vettori
Modello di interrogazione vettoriale
Utilizzate 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 | Type | Descrizione | 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 |
string |
Definisce il nome del campo vettoriale. |
|
|
obbligatorio |
integer |
Speciifica il numero di risultati restituiti dalla ricerca. |
|
|
obbligatorio |
string |
Specifica la metrica della distanza utilizzata per il calcolo della somiglianza. |
|
|
facoltativo |
integer |
Il numero di cluster che si desidera ispezionare tramite la ricerca vettoriale. Un valore più elevato offre una migliore capacità di richiamo a scapito della velocità. Può essere impostato sul numero di elenchi per la ricerca esatta del vicino più vicino (a quel punto il pianificatore non utilizzerà l'indice). L'impostazione consigliata per avviare la regolazione fine è. |
Impostazione predefinita: 1 |
|
facoltativo |
integer |
Speciifica la dimensione dell'elenco dinamico di candidati utilizzato dall'HNSWindice 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
(IVFlat) per ottenere le prestazioni e la precisione desiderate. Vedi le seguenti operazioni di esempio:
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 ] }
Caratteristiche e limitazioni
Compatibilità delle versioni
La ricerca vettoriale per Amazon DocumentDB è disponibile solo nei cluster basati su istanze Amazon DocumentDB 5.0.
Vettori
Amazon DocumentDB può indicizzare vettori fino a 2.000 dimensioni. Tuttavia, è possibile archiviare fino a 16.000 dimensioni senza un indice.
Indici
-
Per la creazione di IVFFlat indici, l'impostazione consigliata per il parametro degli elenchi è il numero di documenti/1000 per un massimo di 1 milione di documenti e
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 lists a seconda del numero di dimensioni. A titolo di riferimento, la tabella seguente fornisce i valori massimi del parametro lists 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
5r5. l
915
741
511
r5xl
1.393
1.196
901
r 5,2 xl
5.460
5.230
4.788
r 5,4 xl
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
r5,16 xl
15.943
15.694
15.208
r5.24 xl
19.585
19.335
18,845
Nessun'altra opzione di indice come
compound
sparse
opartial
è supportata dagli indici vettoriali.La creazione di indici paralleli non è supportata per l'indice. HNSW È supportata solo per l'IVFFlatindice.
Interrogazione vettoriale
Per le query di ricerca vettoriali, è importante ottimizzare i parametri come
probes
oefSearch
per ottenere risultati ottimali. Più alto è il valore diprobes
oefSearch
parametro, maggiore è il richiamo e minore è la velocità. L'impostazione consigliata per iniziare a regolare con precisione il 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 raggruppamento e l'organizzazione dei punti dati in base alle somiglianze. Pertanto, affinché un indice sia più efficace, consigliamo di caricare almeno alcuni dati prima di creare l'indice.
-
Per le query di ricerca vettoriali, è importante ottimizzare i parametri come
probes
oefSearch
per ottenere risultati ottimali. Più alto è il valore delefSearch
parametroprobes
or, maggiore è il richiamo e minore è la velocità. L'impostazione consigliata per iniziare a regolare con precisione ilprobes
parametro èsqrt(lists)
.
Risorse