Se hai seguito le lezioni precedenti, ormai hai capito che nell’intelligenza artificiale le parole, le immagini e i suoni diventano vettori di numeri, gli embedding. Ma una cosa è trasformare i contenuti in numeri, un’altra è capire se due contenuti si somigliano. È qui che entrano in gioco la similarità vettoriale e le sue due misure più famose: la cosine similarity e la distanza euclidea.
In questa lezione ti spiego cosa sono, come funzionano e quando conviene usarle, con esempi semplici e senza formule spaventose.
Di cosa parleremo..
Il problema di fondo: come confrontare due vettori
Quando un modello trasforma la parola “gatto” in un vettore, il risultato è una lista di numeri come [0.2, 0.8, -0.1, 0.5]. La parola “micio” produrrà una lista simile, perché i due termini compaiono in contesti vicini. “Astronave”, invece, produrrà numeri molto diversi.
Il computer non guarda le parole: guarda i numeri. Per dire “gatto e micio sono simili, gatto e astronave no”, deve calcolare quanto due vettori sono vicini o lontani.
Questo calcolo si chiama similarità vettoriale, ed è il cuore di tanti sistemi che usi ogni giorno, dalla ricerca semantica ai suggerimenti dei film. Se vuoi ripassare da dove arrivano questi numeri, ti consiglio la lezione su cosa sono gli embedding.
Esistono due grandi famiglie di misure: le distanze, dove un valore piccolo significa “simile”, e le similarità, dove invece un valore grande significa “simile”. La distanza euclidea appartiene alla prima famiglia, la cosine similarity alla seconda.
La distanza euclidea: il righello dello spazio vettoriale
La distanza euclidea è quella che usi intuitivamente nella vita di tutti i giorni: è la lunghezza del segmento dritto che unisce due punti. Se disegni due città su una mappa, la distanza euclidea è la linea retta che le collega, non il percorso stradale.
Nel nostro caso i “punti” sono i vettori. Immagina due vettori nello spazio a due dimensioni: il primo termina nel punto (1, 1), il secondo nel punto (4, 5). La distanza euclidea si calcola guardando la differenza su ogni asse: 3 sull’asse orizzontale, 4 su quello verticale. Il segmento che li unisce misura 5, perché 3, 4 e 5 formano una terna pitagorica, ma il concetto vale con qualsiasi numero di dimensioni.
Più la distanza euclidea è piccola, più i due vettori sono vicini e quindi simili. Se due parole hanno embedding quasi identici, la loro distanza euclidea sarà quasi zero.

La cosine similarity: conta l’angolo, non la distanza
La cosine similarity (similarità del coseno) adotta un punto di vista diverso: invece di misurare quanto sono lontane le punte dei due vettori, misura l’angolo che formano tra loro.
Immagina due frecce che partono dallo stesso punto, l’origine. Se puntano nella stessa direzione, l’angolo tra loro è zero gradi e la cosine similarity vale 1: i vettori sono considerati identici, anche se uno è lungo il doppio dell’altro. Se puntano in direzioni opposte, l’angolo è 180 gradi e la similarità vale -1. Se sono perpendicolari, l’angolo è 90 gradi e la similarità vale 0.
Il risultato è sempre un numero tra -1 e 1. Più è vicino a 1, più i due vettori “guardano dalla stessa parte”, che è esattamente ciò che conta quando confronti il significato di due testi.

Perché l’angolo è così utile per i testi
Negli embedding, la lunghezza di un vettore spesso dipende da fattori che non c’entrano col significato, come la frequenza della parola o il modo in cui il modello è stato addestrato. Due parole simili possono avere vettori di lunghezze diverse ma che puntano nella stessa direzione.
La cosine similarity ignora la lunghezza e guarda solo la direzione, quindi riesce a cogliere la somiglianza “vera”. Per questo è diventata lo standard per confrontare testi, frasi e documenti, ed è la misura più usata nei database vettoriali.
Distanza euclidea o cosine similarity: quale scegliere?
Non esiste una misura migliore in assoluto, dipende dal problema. Ti do una regola pratica.
Scegli la cosine similarity quando ti interessa la somiglianza di contenuto o significato: confronti testi, cerchi documenti simili, costruisci sistemi di raccomandazione. È il caso più comune nell’IA moderna.
Scegli la distanza euclidea quando anche la “quantità” conta, non solo la direzione. Per esempio se confronti vettori che rappresentano valori fisici, prezzi o misure, dove un vettore lungo il doppio deve davvero essere considerato diverso da uno corto.
C’è una bella semplificazione: se normalizzi i vettori, cioè li porti tutti alla stessa lunghezza, le due misure diventano quasi equivalenti, perché l’angolo e la distanza raccontano la stessa storia. In pratica molti sistemi normalizzano gli embedding e usano indifferentemente l’una o l’altra.
Un esempio concreto con i numeri
Mettiamo le mani in pasta con due vettori semplici: A = (1, 2) e B = (2, 4).
Osservali: B è esattamente il doppio di A su entrambi gli assi, quindi i due vettori puntano nella stessa direzione. La cosine similarity vale 1, somiglianza perfetta. La distanza euclidea invece non è zero: le punte distano circa 2,24, perché B è più lungo. Stessa direzione, lunghezze diverse: le due misure raccontano due storie diverse.
Ora prendi A = (1, 0) e C = (0, 1). I due vettori sono perpendicolari: la cosine similarity vale 0, mentre la distanza euclidea vale circa 1,41.
Vedi il punto? La cosine similarity dice “sono ortogonali, nessuna somiglianza“, la distanza euclidea dice semplicemente “sono lontani“. Entrambe hanno ragione, ma rispondono a domande diverse.
Dove incontri la similarità vettoriale nella vita reale
Ora che sai come funziona, ti farà piacere sapere che questa roba è ovunque.
Nei motori di ricerca semantici, la tua domanda viene trasformata in un vettore e confrontata con quelli di milioni di documenti: il sistema restituisce i più simili, anche se non contengono le tue stesse parole. È la base dei sistemi di domanda e risposta basati su documenti aziendali.
Nei sistemi di raccomandazione, i gusti degli utenti diventano vettori: se il tuo vettore assomiglia a quello di un altro utente, ti suggeriscono ciò che piace a lui. Funziona così per film, musica e prodotti.
Nei database vettoriali, la similarità è l’operazione principale: salvi gli embedding dei tuoi contenuti e poi chiedi al database “quali sono i più vicini a questa domanda?”. Il database ordina tutto in base alla misura di similarità che gli indichi. Se l’argomento ti incuriosisce, ho scritto una lezione dedicata su cosa sono i database vettoriali.
Si usa anche per pulire i dati: trovare articoli duplicati, raggruppare notizie simili o accorgersi che due frasi dicono la stessa cosa.
Domande frequenti
Cosine similarity e distanza euclidea danno sempre risultati diversi?
No. Se i vettori sono normalizzati, cioè hanno tutti la stessa lunghezza, le due misure diventano equivalenti: l’ordinamento dei risultati è lo stesso. Le differenze emergono quando i vettori hanno lunghezze molto diverse tra loro.
Perché la cosine similarity è la scelta più comune per i testi?
Perché gli embedding di parole e frasi hanno lunghezze che dipendono da fattori poco legati al significato. La cosine similarity guarda solo l’angolo tra i vettori, quindi cattura la somiglianza semantica ignorando il “rumore” della lunghezza.
Cosa significa una cosine similarity negativa?
Significa che i due vettori puntano in direzioni opposte, con un angolo superiore a 90 gradi. Nel confronto tra testi è raro e di solito indica contenuti con significati molto distanti o opposti.
Quale misura uso in un database vettoriale?
La più usata è la cosine similarity, ed è quella che trovi come impostazione predefinita nella maggior parte dei database vettoriali. La distanza euclidea è la seconda scelta più comune, utile quando la lunghezza del vettore ha un significato.
Devo normalizzare i vettori prima di confrontarli?
Non è obbligatorio, ma è una buona pratica: normalizzare rende la distanza euclidea e la cosine similarity molto simili e semplifica i calcoli. Molti modelli producono già embedding normalizzati, quindi non devi fare nulla.


