~/tools / Embeddings et recherche (RAG) / Embedding Similarity Calculator

Embedding Similarity Calculator — Comparez des vecteurs d'embeddings d'Ollama /api/embed : cosinus, produit scalaire, distance

Collez la réponse du /api/embed d'Ollama ou d'un endpoint /v1/embeddings compatible OpenAI et comparez les vecteurs : similarité cosinus, produit scalaire et distance euclidienne, classés par rapport au vecteur de votre choix, avec en plus une matrice de similarité. L'outil affiche aussi les dimensions et la longueur de chaque vecteur, pour que vous voyiez si les vecteurs sont normalisés et s'ils proviennent du même modèle. Rien ne quitte votre navigateur.

L'exemple utilise des vecteurs inventés, de longueur unitaire et à 4 dimensions, pour qu'ils restent lisibles. De vrais embeddings ont des centaines ou des milliers de dimensions.

Lu comme une réponse d'Ollama /api/embed : 4 vecteurs de 4 dimensions. Tous les vecteurs ont une longueur de 1, donc la similarité cosinus et le produit scalaire sont égaux.

Classement par similarité cosinus

Comparé avec #0 How do I keep a model loaded in Ollama?. Plus la valeur est élevée, plus la similarité est grande.

RangTexteCosinusProduit scalaireDistance
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 de similarité cosinus

Chaque cellule compare le vecteur de la ligne avec le vecteur de la colonne.

#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

Vecteurs

TexteDimensionsLongueur (norme L2)Longueur unitaire
#0 How do I keep a model loaded in Ollama?41.000000Oui
#1 keep_alive controls how long the model stays in memory41.000000Oui
#2 Protect Ollama with nginx and a password41.000001Oui
#3 Tomorrow's weather forecast41.000000Oui

D'après la documentation des embeddings et la référence de l'API d'Ollama, vérifiées le 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings

Tout est calculé dans votre navigateur. Rien n'est envoyé nulle part.

Un modèle d'embeddings transforme un texte en une liste de nombres, un vecteur. La documentation d'Ollama décrit l'usage de ces vecteurs pour la recherche sémantique avec la similarité cosinus et pour le RAG. Avant d'écrire le code de recherche, il est utile de regarder les nombres : la question se retrouve-t-elle vraiment la plus proche du passage qui y répond ? Cet outil lit le JSON qu'Ollama renvoie depuis /api/embed ({"embeddings": [[…], …]}), le format compatible OpenAI de /v1/embeddings ({"data": [{"embedding": […]}]}) ou un simple tableau de vecteurs. Il classe tous les vecteurs par rapport à celui que vous choisissez selon la similarité cosinus, et affiche aussi le produit scalaire et la distance euclidienne. La documentation d'Ollama indique que /api/embed renvoie des vecteurs normalisés L2 (de longueur unitaire) ; pour de tels vecteurs, la similarité cosinus et le produit scalaire sont le même nombre, et l'outil affiche la longueur de chaque vecteur pour que vous puissiez le vérifier. La documentation indique aussi d'utiliser le même modèle d'embeddings pour l'indexation et pour l'interrogation. Des vecteurs de dimensions différentes ne peuvent pas du tout être comparés, et l'outil s'arrête avec une erreur quand il en trouve. Les calculs ont été vérifiés avec des valeurs calculées séparément en Python.

Le cœur de cet outil est open source, sous licence MIT. github.com/seigo5555/toolkitbox-lib/src/embedding-similarity.ts

Cas d'usage

  • Créer en une seule requête /api/embed les embeddings d'une question et de quelques passages candidats et voir quel passage arrive en tête avant de construire une recherche
  • Comparer deux modèles d'embeddings sur les mêmes phrases, un modèle à la fois, pour voir lequel sépare le plus nettement les textes liés et non liés
  • Vérifier si les vecteurs stockés ont une longueur unitaire et les dimensions attendues avant de choisir une métrique de distance pour votre base de données vectorielle

Utilisation

  1. Envoyez les textes à votre modèle en une seule requête, par exemple curl http://localhost:11434/api/embed -d '{"model": "embeddinggemma", "input": ["question", "passage 1", "passage 2"]}', et collez la réponse JSON entière.
  2. Si vous le souhaitez, écrivez une étiquette par ligne, dans le même ordre que l'entrée, pour que les résultats affichent les textes plutôt que des numéros.
  3. Choisissez le vecteur de comparaison (par défaut #0, la première entrée). Le tableau classe les autres selon la similarité cosinus ; la matrice affiche toutes les paires quand il y a 10 vecteurs ou moins.

FAQ

Quelle similarité dois-je utiliser ?

La page des embeddings d'Ollama indique d'utiliser la similarité cosinus pour la plupart des cas de recherche sémantique. La similarité cosinus compare la direction de deux vecteurs et ignore leur longueur ; 1 signifie la même direction. L'outil affiche aussi le produit scalaire et la distance euclidienne, car les bases de données vectorielles permettent souvent de choisir entre ces mesures.

Pourquoi la similarité cosinus et le produit scalaire sont-ils identiques ?

Parce que les vecteurs ont une longueur de 1. La documentation d'Ollama indique que /api/embed renvoie des vecteurs normalisés L2, de longueur unitaire, et pour des vecteurs de longueur unitaire la similarité cosinus est égale au produit scalaire. L'outil affiche la longueur de chaque vecteur et indique si tous ont une longueur unitaire (à 0.001 près).

L'outil indique que les dimensions ne correspondent pas. Que cela signifie-t-il ?

Deux vecteurs ne peuvent être comparés que s'ils contiennent le même nombre de valeurs. La longueur dépend du modèle, que la documentation situe en général entre 384 et 1024 dimensions, et la requête /api/embed accepte aussi un champ dimensions. Des longueurs différentes signifient généralement que les vecteurs proviennent de modèles ou de réglages différents. La documentation indique d'utiliser le même modèle d'embeddings pour l'indexation et pour l'interrogation.

Puis-je coller une réponse avec des embeddings en base64 ?

Non. L'outil ne lit que des nombres. Si vous appelez l'endpoint /v1/embeddings compatible OpenAI, demandez les embeddings sous forme de nombres à virgule flottante (floats), pas en base64.

Une similarité de 0.8, est-ce bon ?

Il n'y a pas de seuil fixe. Les valeurs dépendent du modèle et de vos textes ; comparez donc les scores de passages liés et non liés issus du même modèle plutôt que de juger un nombre isolé.

Mes données sont-elles envoyées quelque part ?

Non. Les calculs s'exécutent dans votre navigateur. L'outil n'appelle jamais Ollama ni aucun autre serveur ; c'est vous qui envoyez la requête à votre modèle.

Articles liés

Voir aussi