Come funziona un database vettoriale

Immagine realizzata con IA
Le immagini presenti nel post possono essere realizzate o elaborate con strumenti di Intelligenza Artificiale. Questa scelta nasce anche dalla necessità di prevenire le continue contestazioni e richieste economiche improprie che ricevo relative a fotografie utilizzate che sono sempre state acquistate con regolare licenza.
Contenuti dell'articolo

Nel capitolo precedente abbiamo visto come le parole si trasformano in embedding, cioè liste di numeri che rappresentano significati. Ma una volta trasformati in numeri, dove finiscono questi dati? E soprattutto, come facciamo a ritrovarli quando serve?

La risposta sta in un componente che senti nominare sempre più spesso: il database vettoriale. In questo articolo vediamo, con calma e con esempi concreti, come funziona davvero.

Il problema: cercare tra milioni di numeri

Immagina di avere una libreria con centomila libri, ma senza titoli sul dorso. Ogni libro è identificato solo da una lunga sequenza di numeri scritti sulla copertina. Se vuoi trovare i libri più simili a uno che ti è piaciuto, devi confrontare la sua sequenza con tutte le altre.

Un database vettoriale fa esattamente questo, ma con milioni di sequenze di numeri, in pochi millisecondi. La domanda non è più “dove sta esattamente questo dato?”, ma “cosa è più simile a questo?”.

Le tre operazioni fondamentali

Qualunque database vettoriale, da quelli open source a quelli dei grandi provider, compie tre operazioni di base.

1. Inserimento

Ogni vettore viene salvato insieme a un identificativo e spesso ai dati originali a cui si riferisce, per esempio il testo di un documento. L’operazione è simile a un normale inserimento in un database tradizionale.

2. Indicizzazione

Qui avviene la magia. I vettori vengono organizzati in una struttura speciale che permette di cercarli velocemente. Senza indicizzazione, ogni ricerca richiederebbe un confronto con tutti i vettori presenti.

3. Ricerca

Dato un vettore di partenza, il database restituisce i vettori più vicini secondo una misura di similarità, come la cosine similarity di cui abbiamo parlato nel capitolo dedicato.

Le tre operazioni di un database vettoriale: inserimento, indicizzazione e ricerca
Il flusso di un database vettoriale: dal vettore al grafo di similarità, fino alla ricerca.

La ricerca esatta e perché non basta

Il modo più semplice per trovare i vettori simili è confrontare il vettore di partenza con tutti gli altri, uno per uno. Si chiama ricerca esatta o k-NN, k nearest neighbors, cioè i k vicini più prossimi. Funziona benissimo con pochi dati.

Ma con milioni di vettori il calcolo diventa lentissimo. Se ogni confronto richiede un millisecondo, un milione di confronti richiede oltre un quarto d’ora. Inaccettabile per una chat o un motore di ricerca che deve rispondere in tempo reale.

La ricerca approssimata: ANN

La soluzione è accettare un piccolo margine di approssimazione in cambio di velocità. Si chiama ANN, Approximate Nearest Neighbor, cioè ricerca del vicino più prossimo approssimata. Il risultato non è sempre il vicino matematicamente perfetto, ma è quasi sempre tra i migliori, e arriva in millisecondi.

È un compromesso intelligentissimo: preferisci una risposta ottima in 10 millisecondi o una perfetta in 15 minuti? Per le applicazioni reali, la prima vince sempre.

Ricerca per similarità in un database vettoriale
La ricerca per similarità: il punto di partenza, la rete dei vettori e il risultato più vicino.

HNSW: il grafo a piccoli mondi

Tra le tecniche ANN più usate c’è HNSW, Hierarchical Navigable Small World. Il nome è complicato, l’idea è semplice.

Immagina una città: ogni vettore è un quartiere, e i quartieri simili sono collegati da strade. Quando cerchi un posto, parti da un punto qualsiasi e segui le strade che ti avvicinano alla meta. A ogni passo la distanza diminuisce.

La parte “gerarchica” aggiunge più livelli di mappe: una mappa generale con poche strade per spostarsi in fretta, poi mappe sempre più dettagliate per avvicinarsi al risultato. In pratica, poche mosse per arrivare a destinazione.

Quantizzazione: vettori più leggeri

Un altro trucco fondamentale è la quantizzazione. I numeri di un vettore occupano spazio, per esempio 4 byte ciascuno. Un vettore da 1536 dimensioni occupa circa 6 kilobyte. Moltiplicato per milioni di vettori, lo spazio e i tempi di calcolo esplodono.

La quantizzazione riduce la precisione dei numeri per comprimerli, un po’ come ridurre la qualità di una foto per farla pesare meno. Il risultato è leggermente meno preciso, ma molto più veloce da cercare.

Un esempio concreto: l’assistente clienti

Mettiamo tutto insieme con un esempio reale: un assistente che risponde alle domande dei clienti.

Prima di tutto, i documenti dell’azienda vengono divisi in pezzi e trasformati in embedding. Ogni pezzo diventa un vettore, e tutti i vettori finiscono nel database vettoriale.

Quando un cliente scrive una domanda, anche quella viene trasformata in un vettore. Il database cerca i vettori più vicini: quelli dei documenti che parlano dello stesso argomento. L’assistente prende quei documenti, li usa come contesto e formula la risposta.

È lo stesso meccanismo del RAG, Retrieval Augmented Generation, che vedremo in un prossimo capitolo della serie.

Perché non basta un database normale

Un database tradizionale cerca valori esatti: “dammi tutti gli ordini con stato spedito”. Un database vettoriale cerca per somiglianza: “dammi i documenti che parlano di qualcosa di simile a questa frase”.

Sono due filosofie diverse. La ricerca per similarità richiede strumenti pensati apposta, ed è per questo che i database vettoriali sono diventati un pilastro delle applicazioni di intelligenza artificiale.

FAQ

Un database vettoriale è un database normale con i vettori?

Non solo. Un database normale può salvare vettori, ma non sa cercarli per similarità in modo efficiente. Il database vettoriale aggiunge strutture di indicizzazione e algoritmi pensati apposta per questa ricerca.

Che differenza c’è tra ricerca esatta e ricerca approssimata?

La ricerca esatta confronta il vettore con tutti gli altri e trova il vicino perfetto, ma è lenta con molti dati. La ricerca approssimata trova un vicino quasi ottimale in una frazione del tempo, ed è quella usata nelle applicazioni reali.

Cosa significa ANN?

ANN sta per Approximate Nearest Neighbor, cioè ricerca del vicino più prossimo approssimata. È la famiglia di algoritmi che rende possibile cercare tra milioni di vettori in pochi millisecondi.

Cos’è HNSW?

HNSW è Hierarchical Navigable Small World, una tecnica di indicizzazione che organizza i vettori in un grafo a più livelli. Permette di raggiungere i vicini più prossimi con pochissimi passaggi.

Dove si usano i database vettoriali?

Nei motori di ricerca semantica, negli assistenti con RAG, nei sistemi di raccomandazione e in tutte le applicazioni che devono trovare contenuti simili partendo da un significato.

Newsletter settimanale con le ultime novità sull’intelligenza artificiale

Corso gratuito sull’Intelligenza Artificiale, dalle nozioni base ai concetti più complessi

Condividi:

Potrebbero interessarti