Panoramica del rendimento delle query vettoriali di ScaNN

Select a documentation version:

Questa pagina fornisce una panoramica concettuale del miglioramento del rendimento delle query vettoriali utilizzando l'indice Scalable Nearest Neighbor (ScaNN) di AlloyDB AI. Per saperne di più, consulta Creare indici ed eseguire query sui vettori.

L'indice ScaNN utilizza l'indicizzazione basata sulla quantizzazione degli alberi, in cui gli indici apprendono un albero di ricerca insieme a una funzione di quantizzazione (o hashing). Quando esegui una query, l'albero di ricerca viene utilizzato per eliminare lo spazio di ricerca, mentre la quantizzazione viene utilizzata per comprimere le dimensioni dell'indice. Questa eliminazione velocizza l'assegnazione di un punteggio alla somiglianza, in altre parole la distanza, tra il vettore di query e i vettori del database.

Per ottenere sia una frequenza di query al secondo (QPS) elevata sia un richiamo elevato con le query sui vicini più prossimi, devi partizionare l'albero dell'indice ScaNN nel modo più appropriato per i tuoi dati e le tue query.

I modelli di embedding ad alta dimensionalità possono conservare gran parte delle informazioni a una dimensionalità molto inferiore. Ad esempio, puoi conservare il 90% delle informazioni con solo il 20% delle dimensioni dell'embedding. Per velocizzare questi set di dati, l'indice ScaNN di AlloyDB AI esegue automaticamente la riduzione della dimensionalità utilizzando l'analisi delle componenti principali (PCA) sui vettori indicizzati, il che riduce ulteriormente l'utilizzo di CPU e memoria utilizzata per la ricerca vettoriale. Per saperne di più, consulta scann.enable_pca.

Poiché la riduzione della dimensionalità causa una piccola perdita di richiamo nell'indice, l'indice ScaNN di AlloyDB AI compensa la perdita di richiamo eseguendo prima un passaggio di classificazione con un numero maggiore di candidati di vettori PCAed dall'indice. Poi, ScaNN riclassifica i candidati di vettori PCAed in base ai vettori originali. Per saperne di più, consulta scann.pre_reordering_num_neighbors.

Passaggi successivi