Cosine Similarity
Scopri come la similarità coseno misura la somiglianza tra vettori nell'IA. Calcola embedding visivi con Ultralytics YOLO26 e scala con Ultralytics Platform.
La similarità coseno è una metrica matematica fondamentale utilizzata nell'apprendimento automatico (ML) e nell'intelligenza artificiale (AI) per misurare la somiglianza tra due array multidimensionali o vettori, a prescindere dalle loro dimensioni o dal loro modulo. Calcolando l'angolo tra due punti in uno spazio vettoriale, determina se puntano approssimativamente nella stessa direzione. Questo approccio angolare è fondamentale per elaborare dati in cui l'orientamento conta più della lunghezza complessiva, e lo rende particolarmente efficace nel confronto di rappresentazioni astratte dei dati come gli embedding.
La matematica alla base della metrica#
Per calcolare questa metrica, si calcola il prodotto scalare di due vettori e lo si divide per il prodotto dei rispettivi moduli (lunghezze). Il punteggio risultante rientra sempre nell'intervallo fisso da -1 a 1:
- Un punteggio pari a 1 indica che i vettori puntano esattamente nella stessa direzione, segnalando la massima similarità.
- Un punteggio pari a 0 indica che i vettori sono completamente ortogonali (formano un angolo di 90 gradi), quindi non presentano alcuna similarità direzionale.
- Un punteggio pari a -1 indica che puntano esattamente in direzioni opposte.
In molti framework moderni di deep learning progettati per la visione artificiale (CV), puoi accedere facilmente a funzioni ottimizzate per questa operazione matematica, come il modulo funzionale di PyTorch o le metriche di TensorFlow.
Distinguere i concetti correlati#
È utile distinguere la similarità coseno da altre misure di analisi dei dati usate frequentemente, per capire quando utilizzarla:
- Distanza coseno: sebbene siano strettamente correlate, queste grandezze sono inversamente proporzionali. La distanza coseno si calcola semplicemente sottraendo la similarità coseno da 1. Pertanto, una distanza minore indica una maggiore similarità tra i vettori.
- Distanza euclidea: questa metrica misura la distanza fisica in linea retta tra due punti ed è quindi molto sensibile alle dimensioni o al modulo complessivi dei vettori. Al contrario, la similarità coseno considera solo l'angolo. Per esempio, nell'analisi del testo, un documento lungo e una frase breve possono avere una grande distanza euclidea, ma se trattano lo stesso argomento la loro similarità coseno rimane elevata.
Applicazioni pratiche nell'IA#
La similarità coseno è il motore alla base di numerosi prodotti software moderni e colma il divario tra i dati grezzi e le intenzioni umane.
- Ricerca vettoriale e RAG: nelle applicazioni di elaborazione del linguaggio naturale (NLP), come i chatbot, le query degli utenti e i documenti interni vengono convertiti in embedding densi. Il sistema calcola rapidamente la similarità coseno per recuperare i documenti più pertinenti al contesto da un database vettoriale, un passaggio fondamentale nella generazione aumentata dal recupero (RAG).
- Sistemi di raccomandazione: i servizi di e-commerce e streaming utilizzano strumenti come Scikit-learn e SciPy per rappresentare come vettori le preferenze degli utenti e gli articoli dei cataloghi. Misurando il punteggio di similarità tra il profilo di un cliente e i diversi prodotti, i sistemi possono consigliare con precisione articoli affini dal punto di vista visivo o tematico.
Misurare la similarità visiva con Ultralytics#
Puoi estrarre vettori di caratteristiche ad alta dimensionalità direttamente dai dati visivi utilizzando modelli di visione all'avanguardia. Il codice Python seguente mostra come caricare un modello Ultralytics YOLO26 per la classificazione delle immagini, generare embedding per due immagini e calcolare la similarità coseno per misurarne la somiglianza visiva.
import torch
import torch.nn.functional as F
from ultralytics import YOLO
# Load a pre-trained YOLO26 classification model
model = YOLO("yolo26n-cls.pt")
# Generate embedding vectors for two separate images
results = model.embed(["bus.jpg", "car.jpg"])
# Calculate the cosine similarity between the two visual embeddings
similarity = F.cosine_similarity(torch.tensor(results[0]), torch.tensor(results[1]), dim=0)
print(f"Visual Similarity Score: {similarity.item():.4f}")Per gli sviluppatori che desiderano ampliare queste funzionalità di ricerca semantica, è fondamentale addestrare modelli di base molto accurati. La Ultralytics Platform semplifica questa pipeline offrendo strumenti efficaci per l'annotazione dei dati, l'addestramento scalabile nel cloud e la distribuzione dei modelli senza interruzioni, per garantire che gli embedding alla base del sistema siano il più possibile accurati e significativi.









