View a markdown version of this page

Utilizzo degli indici vettoriali in DynamoDB - Amazon DynamoDB

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à.

Utilizzo degli indici vettoriali in DynamoDB

Gli indici vettoriali sono un tipo di indice in Amazon DynamoDB che consente la ricerca di similarità sugli incorporamenti vettoriali memorizzati negli elementi della tabella. A differenza degli indici secondari globali e degli indici secondari locali, che supportano l'utilizzo di query con corrispondenza esatta e intervallo, gli indici vettoriali utilizzano Query la ricerca ANN (Approximate Scan Nearest Neighbor) per trovare elementi i cui vettori sono più simili a un vettore di query fornito. Puoi eseguire queste ricerche di somiglianza richiamando l'SearchVectorsAPI, che restituisce gli elementi più simili classificati in base a un punteggio di somiglianza.

Con gli indici vettoriali, puoi archiviare incorporamenti vettoriali insieme ai tuoi dati operativi in DynamoDB ed eseguire ricerche di similarità senza bisogno di un database vettoriale separato. Ciò elimina la necessità di complesse pipeline di replica dei dati tra DynamoDB e archivi vettoriali esterni.

Gli indici vettoriali vengono gestiti tramite le stesse UpdateTable API che già utilizzi, con il VectorIndexes parametro (forCreateTable) CreateTable e il parametro (for). VectorIndexUpdates UpdateTable

Casi d'uso per gli indici vettoriali

Gli indici vettoriali supportano una varietà di casi d'uso che prevedono la ricerca di elementi simili sulla base di rappresentazioni vettoriali:

  • Ricerca semantica: crea motori di ricerca in grado di comprendere il significato delle query anziché abbinare le parole chiave. Archivia gli incorporamenti di testo generati da modelli di apprendimento automatico e trova contenuti semanticamente simili.

  • Retrieval Augmented Generation (RAG): collega i modelli linguistici di grandi dimensioni (LLM) con le basi di conoscenza pertinenti. Archivia gli incorporamenti dei documenti in DynamoDB e recupera il contesto più pertinente per i prompt LLM.

  • Sistemi di raccomandazione: trova prodotti, contenuti o utenti simili in base a rappresentazioni vettoriali delle loro caratteristiche o comportamenti.

  • Memoria degli agenti AI: archivia gli incorporamenti delle conversazioni per mantenere il contesto tra le sessioni e migliorare le prestazioni degli agenti di intelligenza artificiale.

  • Rilevamento di anomalie e frodi: confronta i nuovi eventi con gli incorporamenti di comportamenti normali noti per segnalare i valori anomali, come transazioni insolite o attività fraudolente.

Confronto tra indici vettoriali e indici secondari

La tabella seguente confronta gli indici vettoriali con gli indici secondari globali e gli indici secondari locali.

Funzionalità Indice vettoriale Indice secondario globale Indice secondario locale
Tipo di query Ricerca per similarità Corrispondenza e intervallo esatti Corrispondenza e intervallo esatti
Leggi l'API SearchVectors Query, Scan Query, Scan
Schema Attributo vettoriale, più opzionale SearchSchema (chiave di partizione, filtri in linea) Chiavi di partizione e chiavi di ordinamento opzionali Stessa chiave di partizione, chiave di ordinamento diversa
Numero massimo per tabella 5 20 5
modalità Capacità On-demand solo On-demand o accantonato On-demand o accantonato

Funzioni di distanza

Quando si crea un indice vettoriale, si sceglie una funzione di distanza. La funzione di distanza determina il modo in cui DynamoDB misura la somiglianza tra i vettori. La tua scelta influisce sulla qualità del ranking e sulla precisione della ricerca. Amazon DynamoDB supporta tre funzioni di distanza.

Funzione di distanza Interpretazione del punteggio Miglior partita
COSINE I punteggi più bassi indicano una maggiore somiglianza. Misura la distanza del coseno (1 meno la somiglianza del coseno) tra due vettori. I valori vanno da 0 (direzione identica) a 2 (direzione opposta). Punteggi più bassi
DOT_PRODUCT I punteggi più alti indicano una maggiore somiglianza. Misura il prodotto scalare tra due vettori. I punteggi più alti
EUCLIDEAN I punteggi più bassi indicano una maggiore somiglianza. Misura la distanza in linea retta tra due vettori. I punteggi più bassi

Per confrontare il modo in cui le funzioni di distanza classificano lo stesso vettore di interrogazione, vedereIn che modo le funzioni di distanza classificano i risultati.

Le seguenti linee guida ti aiutano a scegliere la giusta funzione di distanza per il tuo carico di lavoro.

COSINE

Confronta la direzione e ignora la magnitudine. Da utilizzare COSINE per la somiglianza semantica con i modelli di incorporamento del testo. Questi modelli codificano il significato in direzione e la lunghezza del vettore può variare. Gli esempi includono Amazon Titan Text Embeddings e. Cohere Embed

COSINEè adatto per i seguenti casi d'uso:

  • Ricerca semantica sulle descrizioni o sui documenti dei prodotti

  • Retrieval Augmented Generation (RAG)

  • Rispetto delle domande frequenti

COSINEè l'impostazione predefinita sicura quando non si è sicuri della funzione da utilizzare.

DOT_PRODUCT

DOT_PRODUCTè sensibile sia alla direzione che alla magnitudine (la lunghezza di un vettore). Scegli DOT_PRODUCT quando la documentazione del tuo modello di incorporamento consiglia dot product come misura di somiglianza o quando desideri che la lunghezza del vettore influenzi il ranking.

DOT_PRODUCTè adatto per i seguenti casi d'uso:

  • Sistemi di raccomandazione che utilizzano i punteggi di popolarità o di confidenza per scalare gli incorporamenti e influenzare il posizionamento

  • Modelli la cui documentazione raccomanda specificamente il dot product come misura di somiglianza

  • Magnitude-sensitive classifica in cui la lunghezza del vettore trasporta un segnale significativo

Ti consigliamo di normalizzare gli incorporamenti alla lunghezza unitaria. Una volta normalizzato, DOT_PRODUCT classifica i risultati nello stesso modo di. COSINE Salta la normalizzazione solo se desideri che la grandezza influenzi la classifica.

Esempio di caso d'uso: un sistema di consigli sui prodotti in cui si ridimensiona ogni prodotto incorporato in base al relativo punteggio di popolarità. I prodotti più popolari ottengono vettori più lunghi e si posizionano più in alto nei risultati di ricerca.

EUCLIDEAN

Misura la distanza in linea retta tra due vettori. EUCLIDEANè sensibile alla magnitudo. Usalo quando è importante la posizione assoluta nello spazio di incorporamento.

EUCLIDEANè adatto per i seguenti casi d'uso:

  • Incorporamenti di immagini o audio in cui la distanza spaziale è importante

  • Near-duplicate rilevamento

  • Clustering e rilevamento delle anomalie

Esempio di caso d'uso: ricerca di immagini quasi duplicate da incorporamenti di immagini.

Scegli una funzione di distanza che corrisponda al tuo modello di incorporamento

Se non siete sicuri della funzione da utilizzare, consultate la documentazione del modello di incorporamento. Convalida la tua scelta rispetto a un set di dati rappresentativo. Non è possibile modificare la funzione di distanza dopo la creazione dell'indice. Per ulteriori informazioni, consulta Abbina la funzione di distanza ai tuoi incorporamenti.

In che modo le funzioni di distanza classificano i risultati

La funzione di distanza scelta al momento della creazione dell'indice determina sia il Score valore che l'ordinamento dei risultati. La stessa query può classificare gli stessi elementi in modo diverso con funzioni di distanza diverse. L'esempio seguente utilizza il vettore di interrogazione [1, 0, 0, 0] su quattro vettori memorizzati.

Vettore memorizzato COSINE(più basso è più simile) EUCLIDEAN(più basso è più simile) DOT_PRODUCT(più alto è più simile)
[1, 0, 0, 0] 0,0 0,0 1.0
[10, 0, 0, 0] 0,0 9.0 10.0
[0.7071, 0.7071, 0, 0] 0,29 0,77 0,71
[-1, 0, 0, 0] 2.0 2.0 -1,0

Vale la pena notare due comportamenti:

  • COSINEignora la grandezza. Ha un punteggio [1, 0, 0, 0] [10, 0, 0, 0] identico (entrambi0.0) perché puntano nella stessa direzione. EUCLIDEANSi colloca [10, 0, 0, 0] all'ultimo posto per la stessa interrogazione perché misura la distanza assoluta, che aumenta con la grandezza di un vettore.

  • DOT_PRODUCTi punteggi possono essere negativi. Un vettore che punta nella direzione opposta ([-1, 0, 0, 0]) segna-1.0. Non date per scontato che i punteggi siano sempre non negativi quando ordinate o applicate soglie ai risultati.

SearchSchema

Quando create un indice vettoriale, potete facoltativamente definirne uno SearchSchema che specifichi le chiavi di partizione dell'indice vettoriale e gli attributi del filtro in linea.

HASH(chiave di partizione dell'indice vettoriale)

Una chiave di partizione dell'indice vettoriale partiziona i dati dell'indice per un ridimensionamento indipendente. Quando si specifica una chiave di partizione dell'indice vettoriale, gli elementi con lo stesso valore di chiave di partizione vengono memorizzati insieme, il che consente al sistema di cercare solo i dati pertinenti. Su scala elevata, ciò riduce la latenza di ricerca perché la ricerca esamina solo un sottoinsieme dello spazio vettoriale anziché l'intero indice. Utilizzate attributi con cardinalità da bassa a media, ad esempio o. Category Country È possibile specificare al massimo una chiave di partizione dell'indice vettoriale.

Se si definisce una chiave di partizione dell'indice vettoriale in SearchSchema, è necessario fornire il relativo valore in SearchConditionExpression quando si chiama. SearchVectors

Utilizzate una chiave di partizione per scalare la velocità di ricerca

Definisci una chiave di partizione dell'indice vettoriale quando prevedi un indice ampio o un volume di ricerca elevato. Poiché ogni SearchVectors chiamata è limitata a un singolo valore di chiave di partizione, la distribuzione dei dati su più valori di chiave di partizione consente di eseguire più operazioni di ricerca al secondo e riduce la quantità di dati esaminati da ogni ricerca. Per informazioni, consulta Scegli una chiave di partizione che corrisponda ai tuoi schemi di interrogazione.

INLINE_FILTER

Gli attributi del filtro in linea vengono proiettati nell'indice vettoriale in modo che DynamoDB possa filtrare durante la ricerca a livello di archiviazione.

I filtri in linea supportano l'operatore di uguaglianza () in. = SearchConditionExpression Gli operatori di confronto, intervallo e appartenenza ai set (<>,,<,<=, >>=,IN) non sono ancora disponibili. A differenza delle chiavi di partizione degli indici vettoriali, i filtri in linea sono opzionali durante la ricerca.

È possibile creare un indice vettoriale senza definire una chiave di partizione in. SearchSchema In questo caso, ogni SearchVectors chiamata esegue la ricerca nell'intero indice. Questo è più semplice perché non è necessario unSearchConditionExpression, ma non viene scalato orizzontalmente. Man mano che l'indice cresce, ogni ricerca esamina più dati, aumentando latenza e costi. Se il carico di lavoro richiede un throughput elevato o l'indice contiene un numero elevato di vettori, definisci una chiave di partizione per distribuire i dati tra le partizioni e scalare in modo indipendente. Per informazioni, consulta Scegli una chiave di partizione che corrisponda ai tuoi schemi di interrogazione.

Proiezioni

Come gli indici secondari globali, gli indici vettoriali supportano proiezioni che controllano quali attributi della tabella di base vengono copiati nell'indice. La proiezione viene specificata quando si crea l'indice vettoriale.

  • KEYS_ONLY— Nell'indice SearchSchema vengono proiettati solo gli attributi della chiave primaria della tabella di base, l'attributo vettoriale e tutti gli attributi del filtro in linea definiti in.

  • INCLUDE— Oltre agli KEYS_ONLY attributi, si specificano altri attributi non chiave per il progetto. Non è possibile modificare il set di attributi inclusi dopo la creazione dell'indice vettoriale. Per proiettare un diverso set di attributi, eliminate l'indice e ricreatelo con la proiezione desiderata.

  • ALL— Tutti gli attributi della tabella di base vengono proiettati nell'indice.

La proiezione limita ciò che può restituire SearchVectors

Gli attributi che non sono proiettati nell'indice vettoriale non possono essere restituiti nelle SearchVectors risposte. Se hai bisogno di attributi specifici nei risultati della ricerca, includili nella proiezione o nell'uso. ALL

Utilizzo di indici vettoriali con altre funzionalità di DynamoDB

DynamoDB Streams

Puoi abilitare DynamoDB Streams su una tabella con un indice vettoriale, con il StreamSpecification parametro quando crei la tabella o tramite. UpdateTable Lo stream acquisisce le modifiche a livello di elemento nella tabella di base e opera indipendentemente dall'indice vettoriale.

Tabelle globali

È possibile aggiungere un indice vettoriale a una tabella globale e convertire una tabella con un indice vettoriale in una tabella globale aggiungendo una replica con. UpdateTable La definizione dell'indice vettoriale, comprese le dimensioni, SearchSchema la funzione di distanza e la proiezione, viene replicata automaticamente in ogni nuova regione di replica. L'indice vettoriale non viene creato separatamente nella regione di replica.

Gli elementi scritti in qualsiasi regione di replica vengono replicati nelle altre regioni e indicizzati lì. Una volta completata la replica, SearchVectors in ogni regione ricerca lo stesso set di vettori. Poiché la ricerca vettoriale utilizza il vicino più prossimo approssimativo (ANN), ricerche separate in regioni diverse potrebbero restituire risultati o ordini leggermente diversi per la stessa query, anche su dati identici. La replica e l'indicizzazione dei vettori nelle altre regioni sono asincrone, anche per le tabelle globali MRSC (Multi-region Strong Consistency). Un vettore appena scritto in una regione potrebbe non apparire ancora nei SearchVectors risultati di un'altra regione finché la modifica non si è propagata.

On-demand capacità richiesta

Gli indici vettoriali richiedono la modalità di capacità su richiesta, supportata anche dalle tabelle globali. Crea l'indice vettoriale e la replica su una tabella che utilizza già la capacità su richiesta.

Point-in-time ripristino (PITR) e backup

Quando ripristini una tabella da un ripristino point-in-time o da un backup su richiesta, DynamoDB ripristina i dati della tabella di base e la definizione dell'indice vettoriale. Come per gli indici secondari globali, DynamoDB ricostruisce l'indice vettoriale dai dati della tabella di base ripristinati anziché copiarli byte per byte, in modo che l'indice venga riempito prima di essere pronto per la ricerca. Attendi che sia e si trovi nell'indice ripristinato prima di eseguire l'esecuzione. IndexStatus ACTIVE Backfilling false SearchVectors

Time to Live (TTL)

Puoi usare DynamoDB TTL su una tabella con un indice vettoriale. Quando il TTL elimina un elemento scaduto dalla tabella di base, DynamoDB rimuove la voce corrispondente dall'indice vettoriale, allo stesso modo di un'eliminazione manuale. Pertanto, gli elementi scaduti smettono di apparire nei SearchVectors risultati dopo che l'eliminazione si è propagata all'indice.

Importazione ed esportazione dei dati delle tabelle

Puoi esportare una tabella con un indice vettoriale in Amazon S3; l'esportazione contiene gli elementi della tabella di base, inclusi gli attributi vettoriali in essi memorizzati. Quando importi dati da Amazon S3 in una nuova tabella, definisci l'indice vettoriale nella richiesta di importazione nello stesso modo in cui lo faresti. CreateTable DynamoDB indicizza gli elementi importati man mano che vengono scritti e l'indice vettoriale diventa disponibile al termine dell'importazione.

DAX

DynamoDB Accelerator (DAX) non supporta l'operazione. SearchVectors Invia SearchVectors richieste direttamente a DynamoDB, anche quando l'applicazione utilizza DAX per altre operazioni di lettura. La memorizzazione nella cache DAX delle letture delle tabelle di base non è influenzata dalla presenza di un indice vettoriale.