~/tools / Embedding e ricerca (RAG) / Embedding Similarity Calculator

Embedding Similarity Calculator — Confronta vettori di embedding di Ollama /api/embed: coseno, prodotto scalare, distanza

Incolla la risposta dell'/api/embed di Ollama o di un endpoint /v1/embeddings compatibile con OpenAI e confronta i vettori: similarità del coseno, prodotto scalare e distanza euclidea, ordinati rispetto al vettore che scegli, più una matrice di similarità. Mostra anche le dimensioni e la lunghezza di ogni vettore, così vedi se i vettori sono normalizzati e se provengono dallo stesso modello. Nulla lascia il tuo browser.

L'esempio usa vettori inventati, di lunghezza unitaria e con 4 dimensioni, così si possono leggere. Gli embedding reali hanno centinaia o migliaia di dimensioni.

Letto come una risposta di Ollama /api/embed: 4 vettori con 4 dimensioni. Tutti i vettori hanno lunghezza 1, quindi la similarità del coseno e il prodotto scalare sono uguali.

Classifica per similarità del coseno

Confrontato con #0 How do I keep a model loaded in Ollama?. Più alto è, più è simile.

PosizioneTestoCosenoProdotto scalareDistanza
1#1 keep_alive controls how long the model stays in memory0.99620.99620.0876
2#2 Protect Ollama with nginx and a password0.40370.40371.0921
3#3 Tomorrow's weather forecast0.01000.01001.4071

Matrice di similarità del coseno

Ogni cella confronta il vettore della riga con il vettore della colonna.

#0#1#2#3
#01.0000.9960.4040.010
#10.9961.0000.475-0.005
#20.4040.4751.000-0.377
#30.010-0.005-0.3771.000

Vettori

TestoDimensioniLunghezza (norma L2)Lunghezza unitaria
#0 How do I keep a model loaded in Ollama?41.000000Sì
#1 keep_alive controls how long the model stays in memory41.000000Sì
#2 Protect Ollama with nginx and a password41.000001Sì
#3 Tomorrow's weather forecast41.000000Sì

Basato sulla documentazione degli embedding e sul riferimento dell'API di Ollama, verificati il 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings

Tutto viene calcolato nel tuo browser. Non viene inviato nulla da nessuna parte.

Un modello di embedding trasforma un testo in un elenco di numeri, un vettore. La documentazione di Ollama descrive l'uso di questi vettori per la ricerca semantica con la similarità del coseno e per il RAG. Prima di scrivere il codice di ricerca, conviene guardare i numeri: la domanda risulta davvero più vicina al passaggio che le risponde? Questo strumento legge il JSON che Ollama restituisce da /api/embed ({"embeddings": [[…], …]}), il formato compatibile con OpenAI di /v1/embeddings ({"data": [{"embedding": […]}]}) o un semplice array di vettori. Ordina tutti i vettori rispetto a quello che scegli in base alla similarità del coseno, e mostra anche il prodotto scalare e la distanza euclidea. La documentazione di Ollama dice che /api/embed restituisce vettori normalizzati L2 (di lunghezza unitaria); per tali vettori, la similarità del coseno e il prodotto scalare sono lo stesso numero, e lo strumento mostra la lunghezza di ogni vettore così puoi verificarlo. La documentazione dice anche di usare lo stesso modello di embedding per l'indicizzazione e per l'interrogazione. I vettori con un numero diverso di dimensioni non si possono confrontare affatto, e lo strumento si ferma con un errore quando ne trova. I calcoli sono stati verificati con valori calcolati separatamente in Python.

La logica principale di questo strumento è open source, con licenza MIT. github.com/seigo5555/toolkitbox-lib/src/embedding-similarity.ts

Casi d'uso

  • Creare in un'unica richiesta /api/embed l'embedding di una domanda e di alcuni passaggi candidati e vedere quale passaggio si classifica per primo prima di costruire una ricerca
  • Confrontare due modelli di embedding sulle stesse frasi, un modello alla volta, per vedere quale separa con più chiarezza il testo correlato da quello non correlato
  • Verificare se i vettori salvati hanno lunghezza unitaria e le dimensioni previste prima di scegliere una metrica di distanza per il tuo database vettoriale

Utilizzo

  1. Invia i testi al tuo modello in un'unica richiesta, per esempio curl http://localhost:11434/api/embed -d '{"model": "embeddinggemma", "input": ["question", "passage 1", "passage 2"]}', e incolla l'intera risposta JSON.
  2. Facoltativamente, scrivi una etichetta per riga, nello stesso ordine dell'input, così i risultati mostrano i testi invece dei numeri.
  3. Scegli con quale vettore confrontare (per impostazione predefinita #0, il primo input). La tabella ordina gli altri per similarità del coseno; la matrice mostra tutte le coppie quando i vettori sono 10 o meno.

FAQ

Quale similarità devo usare?

La pagina degli embedding di Ollama dice di usare la similarità del coseno per la maggior parte dei casi di ricerca semantica. La similarità del coseno confronta la direzione di due vettori e ignora la loro lunghezza; 1 significa la stessa direzione. Lo strumento mostra anche il prodotto scalare e la distanza euclidea, perché i database vettoriali spesso permettono di scegliere tra queste misure.

Perché la similarità del coseno e il prodotto scalare sono uguali?

Perché i vettori hanno lunghezza 1. La documentazione di Ollama dice che /api/embed restituisce vettori normalizzati L2, di lunghezza unitaria, e per vettori di lunghezza unitaria la similarità del coseno è uguale al prodotto scalare. Lo strumento mostra la lunghezza di ogni vettore e indica se tutti hanno lunghezza unitaria (entro 0.001).

Lo strumento dice che le dimensioni non corrispondono. Che cosa significa?

Due vettori si possono confrontare solo se hanno lo stesso numero di valori. La lunghezza dipende dal modello, che la documentazione indica tipicamente tra 384 e 1024 dimensioni, e la richiesta /api/embed accetta anche un campo dimensions. Lunghezze diverse di solito significano che i vettori provengono da modelli o impostazioni diversi. La documentazione dice di usare lo stesso modello di embedding per l'indicizzazione e per l'interrogazione.

Posso incollare una risposta con embedding in base64?

No. Lo strumento legge solo numeri. Se chiami l'endpoint /v1/embeddings compatibile con OpenAI, richiedi gli embedding come numeri in virgola mobile (floats), non come base64.

Una similarità di 0.8 è buona?

Non esiste una soglia fissa. I valori dipendono dal modello e dai tuoi testi, quindi confronta i punteggi di passaggi correlati e non correlati dello stesso modello invece di giudicare un solo numero isolato.

I miei dati vengono inviati da qualche parte?

No. I calcoli vengono eseguiti nel tuo browser. Lo strumento non chiama mai Ollama né alcun altro server; la richiesta al tuo modello la invii tu stesso.

Articoli correlati

Correlati