← Indietro

Metriche di similarità vettoriale: L2, coseno e prodotto interno

Trascinare il punto di query e cambiare le unità di misura per osservare come cambiano i vicini più prossimi.

I 5 vicini più prossimi(più basso = più vicino)

#1P1842.1
#2P1074.0
#3P17111.6
#4P14122.8
#5P13126.9
Misura di similarità
L2
Valore mostrato
Distanza euclidea

L2 (Distanza euclidea)

Misura la distanza in linea retta tra due punti. I cerchi concentrici mostrano le zone equidistanti: tutti i punti sullo stesso cerchio sono ugualmente “lontani” dalla query.

Che cos’è una metrica?

Una metrica è semplicemente una funzione che accetta due vettori e restituisce un unico numero che indica quanto siano simili (o diversi). La ricerca vettoriale consiste, in sostanza, nel «trovare i K vettori con il miglior punteggio metrico rispetto alla mia query». Tutto il resto — indici, cluster, grafi — è solo una questione di gestione per evitare di calcolare questo punteggio rispetto a ogni singolo vettore nel database.

La metrica scelta definisce cosa significa “simile” per i propri dati. Due embedding possono essere “vicini” secondo una metrica e “lontani” secondo un’altra: stessi dati, risposta diversa. Ecco perché questa scelta va effettuata prima ancora di creare un indice.

I tre che vedrete nella pratica

  • L2 (Euclideo): distanza in linea retta. Più è basso, meglio è. Da utilizzare quando contano sia la direzione che la grandezza — incorporamenti di immagini, coordinate geografiche, letture grezze dei sensori. Impostazione predefinita per la maggior parte dei modelli di CV.
  • Coseno: angolo tra vettori, che ignora la lunghezza. Più è alto, meglio è. Da utilizzare quando conta solo la direzione — embedding di testo (BERT, OpenAI, ecc.), sistemi di raccomandazione in cui la “popolarità” del vettore non dovrebbe prevalere.
  • Prodotto interno (IP): prodotto scalare, premia sia l’allineamento che la grandezza. Più è alto, meglio è. Da utilizzare con modelli che normalizzano esplicitamente per l’ IP (DPR, molti modelli di recupero). Matematicamente identico al coseno quando i vettori hanno lunghezza unitaria.

Due regole pratiche

  • Adattare la metrica al modello. I modelli di embedding vengono addestrati tenendo conto di una metrica specifica. Utilizzarne una diversa in fase di ricerca comprometterà silenziosamente il recall. Controllare la scheda del modello prima di effettuare la scelta.
  • Mantenere la coerenza. Tutti i vettori in una raccolta devono utilizzare la stessa metrica. Non è possibile mescolarli all’interno di un singolo indice, né è possibile confrontare in modo significativo i punteggi tra metriche diverse.

Prova questo: trascina il punto di query vicino all’origine e passa da “Cosine” a “ L2 ”. Osserva come “Cosine” tenga conto solo della “direzione” verso cui punta la query: i punti sul lato opposto dell’origine possono risultare “vicini” con “ L2 ”, ma “lontani” con “Cosine”. Quella rappresentazione visiva incarna l’intero concetto.

Impostazione del tipo di metrica in Milvus

In Milvus, la metrica viene impostata per ogni indice tramite metric_type — L2, IP, oppure COSINE per i vettori densi — al momento della creazione dell’indice. Ogni ricerca effettuata su quella raccolta utilizza quindi la stessa funzione che avete appena sperimentato sopra. La regola più affidabile in assoluto: utilizzate la metrica con cui è stato addestrato il vostro modello di embedding, che è indicata praticamente su ogni scheda del modello.

Due scorciatoie utili. La maggior parte delle moderne API di embedding testuale (OpenAI, Cohere, Voyage e la maggior parte dei transformer di frasi) produce vettori destinati alla similarità coseno. E se i vostri vettori sono normalizzati a lunghezza unitaria, il coseno e il prodotto interno restituiscono classifiche identiche — quindi IP sui vettori normalizzati è un sostituto comune e leggermente più economico di COSINE.

Domande frequenti

Quale metrica di similarità dovrei utilizzare per l’ OpenAI o o altre rappresentazioni vettoriali di testo?

Utilizzare la similarità coseno (metric_type COSINE in Milvus). Quasi tutti i moderni modelli di embedding testuale — compresa la famiglia text-embedding-3 di OpenAI — sono addestrati per la similarità coseno. Poiché OpenAI gli embedding sono normalizzati a lunghezza unitaria, il prodotto interno (IP) fornisce classifiche identiche e rappresenta una valida alternativa.

Qual è la differenza tra similarità coseno e prodotto interno?

La similarità coseno misura solo l’angolo tra due vettori, ignorandone le lunghezze. Il prodotto interno (prodotto scalare) tiene conto sia dell’allineamento che della grandezza, quindi un vettore più lungo che punta nella stessa direzione ottiene un punteggio più alto. Su vettori normalizzati per unità, i due concetti sono matematicamente equivalenti.

È possibile modificare il tipo di unità di misura dopo aver creato un indice in Milvus?

No. La metrica è integrata nell’indice in fase di creazione. Per cambiare metrica è necessario eliminare l’indice e ricrearlo con un nuovo `metric_type`. Inoltre, i punteggi ottenuti con metriche diverse non sono comparabili tra loro, quindi non mescolarli durante la post-elaborazione dei risultati.

La scelta dell’unità di misura influisce sul recall o sulla velocità di ricerca?

La velocità è sostanzialmente identica: " L2", " IP" e "cosine" richiedono tutti un unico passaggio sul vettore. Il "recall" è l’aspetto cruciale: effettuare ricerche con una metrica diversa da quella per cui è stato addestrato il modello di embedding degrada silenziosamente la qualità dei risultati, spesso in modo drammatico.

Approfondisci: leggi la documentazione sulle metriche di similarità per l’elenco completo delle metriche supportate d Milvus, tra cui Hamming e Jaccard per i vettori binari e BM25 per la ricerca full-text.

Continua a esplorare