Panoramica della ricerca vettoriale di Spanner Omni

La ricerca vettoriale in Spanner Omni è una funzionalità integrata ad alte prestazioni che consente la ricerca semantica e la corrispondenza di similarità su dati vettoriali ad alta dimensione. Archiviando e indicizzando gli embedding vettoriali direttamente nel database transazionale, Spanner Omni elimina i database vettoriali separati e le complesse pipeline di estrazione, trasformazione e caricamento (ETL).

Gli argomenti trattati in questo documento si applicano a Spanner Omni nello stesso modo in cui si applicano a Spanner.

La ricerca vettoriale consente di trovare elementi semanticamente simili rappresentando i dati come vettori numerici (embedding). Spanner Omni supporta due metodi di ricerca principali:

  • K-Nearest Neighbor (KNN): esegue una ricerca esatta calcolando la distanza tra la query e ogni vettore nel set di dati. Fornisce il richiamo più elevato, ma può essere costoso dal punto di vista computazionale per set di dati di grandi dimensioni.

  • Approximate Nearest Neighbor (ANN): utilizza un indice vettoriale per trovare rapidamente le corrispondenze in set di dati di grandi dimensioni. Compensa una piccola quantità di accuratezza (richiamo) con guadagni in termini di velocità e scalabilità.

La ricerca vettoriale è particolarmente efficace se combinata con altre funzionalità:

Combinazione Vantaggio
Ricerca vettoriale con filtro SQL Combina in modo efficiente la ricerca vettoriale con i filtri (ad esempio, "Trova immagini simili in cui categoria = 'scarpe' e prezzo < 100").
Ricerca vettoriale + ricerca a testo intero Combina la similarità semantica con la precisione delle parole chiave utilizzando la fusione del rango reciproco (RRF) per migliorare la pertinenza della ricerca.
Vettore + grafo Utilizza la ricerca vettoriale per trovare punti di ingresso (nodi) pertinenti in un grafico delle proprietà e poi attraversa relazioni complesse.

Per saperne di più, consulta la panoramica della ricerca vettoriale di Spanner nella documentazione di Spanner.

Spanner Omni supporta la ricerca K-Nearest Neighbor (KNN) utilizzando le funzioni di distanza integrate. Puoi fornire un embedding vettoriale come parametro di input per trovare i vettori più vicini nello spazio N-dimensionale.

Sono disponibili le seguenti funzioni di distanza:

  • COSINE_DISTANCE(): misura il coseno dell'angolo tra due vettori

  • EUCLIDEAN_DISTANCE(): misura la distanza in linea retta più breve tra due vettori

  • DOT_PRODUCT(): calcola il coseno dell'angolo moltiplicato per il prodotto delle magnitudini dei vettori (ideale per i dati normalizzati)

Per saperne di più, consulta Eseguire la ricerca di similarità vettoriale trovando i K-Nearest Neighbor nella documentazione di Spanner.

Scegliere la funzione di distanza vettoriale migliore

La scelta della funzione di distanza appropriata dipende dai dati e dal modello utilizzato per generare gli embedding.

Funzione Descrizione Relazione con l'aumento della similarità
Prodotto scalare Calcola il coseno dell'angolo moltiplicato per il prodotto delle magnitudini dei vettori corrispondenti. Aumenta
Distanza coseno Misura il coseno dell'angolo tra due vettori (1 - similarità del coseno). Diminuisce
Distanza euclidea Misura la distanza in linea retta tra due vettori. Diminuisce

Se gli embedding sono normalizzati (magnitudine = 1.0), DOT_PRODUCT() è in genere una scelta efficiente. Per i dati non normalizzati, prova COSINE_DISTANCE() o EUCLIDEAN_DISTANCE() per determinare quale produce risultati migliori per il tuo caso d'uso.

Per saperne di più, consulta Scegliere tra le funzioni di distanza vettoriale nella documentazione di Spanner.

Approximate Nearest Neighbor (ANN)

La ricerca ANN è progettata per set di dati di grandi dimensioni in cui la ricerca KNN esatta diventa troppo lenta o costosa. Utilizza un indice vettoriale per fornire risultati rapidi con un piccolo compromesso nel richiamo.

La ricerca Approximate Nearest Neighbor (ANN) in Spanner Omni supporta set di dati fino a 1 milione di vettori per vettori di lunghezza massima di 128 dimensioni. Se i vettori hanno più dimensioni, il numero di vettori supportato diminuisce proporzionalmente.

Per eseguire una ricerca ANN, utilizza funzioni di distanza approssimative come APPROX_COSINE_DISTANCE(), APPROX_EUCLIDEAN_DISTANCE() o APPROX_DOT_PRODUCT(). Queste funzioni richiedono:

  • Un indice vettoriale esistente nella colonna degli embedding.

  • Una clausola ORDER BY che utilizza la funzione di distanza approssimativa.

  • Una clausola LIMIT per specificare il numero di risultati.

Per saperne di più, consulta Trovare i vicini più prossimi approssimativi (ANN) ed eseguire query sugli embedding vettoriali nella documentazione di Spanner.

Creare e gestire gli indici vettoriali

Quando crei un indice vettoriale, devi specificare la vector_length della colonna degli embedding e puoi utilizzare la clausola STORING per includere colonne aggiuntive per un filtro più rapido.

Di seguito è riportato un esempio di come creare un indice vettoriale:

CREATE VECTOR INDEX INDEX_NAME
  ON TABLE_NAME(EMBEDDING_COLUMN)
  OPTIONS (distance_type = 'DISTANCE_TYPE', tree_depth = 2, num_leaves = 1000);

Per saperne di più, consulta Creare e gestire gli indici vettoriali nella documentazione di Spanner.

Best practice per l'indicizzazione vettoriale

Per mantenere un elevato rendimento di ricerca e richiamo:

  • Ottimizzare le opzioni dell'indice: regola num_leaves e num_leaves_to_search in base alle dimensioni dei dati e ai requisiti di rendimento.

  • Ricostruire periodicamente: ricostruisci l'indice se la distribuzione dei tuoi vettori cambia in modo significativo nel tempo.

  • Utilizzare i filtri in modo efficace: archivia le colonne filtrate di frequente nell'indice per migliorare l'efficienza della ricerca.

Per saperne di più, consulta Best practice per l'indicizzazione vettoriale nella documentazione di Spanner.