~/tools / Embeddingi i wyszukiwanie (RAG) / Embedding Similarity Calculator

Embedding Similarity Calculator — Porównuj wektory embeddingów z Ollama /api/embed: podobieństwo cosinusowe, iloczyn skalarny

Wklej odpowiedź z /api/embed Ollamy albo z endpointu /v1/embeddings zgodnego z OpenAI i porównaj wektory: podobieństwo cosinusowe, iloczyn skalarny i odległość euklidesową, uszeregowane względem wybranego wektora, oraz macierz podobieństwa. Narzędzie pokazuje też wymiary i długość każdego wektora, dzięki czemu widać, czy wektory są znormalizowane i czy pochodzą z tego samego modelu. Nic nie opuszcza Twojej przeglądarki.

Przykład używa zmyślonych wektorów o długości 1 i 4 wymiarach, aby dało się je przeczytać. Prawdziwe embeddingi mają setki lub tysiące wymiarów.

Odczytano jako odpowiedź Ollama /api/embed: wektorów: 4, wymiarów: 4. Wszystkie wektory mają długość 1, więc podobieństwo cosinusowe i iloczyn skalarny są równe.

Ranking według podobieństwa cosinusowego

Porównanie z #0 How do I keep a model loaded in Ollama?. Wyższa wartość oznacza większe podobieństwo.

MiejsceTekstCosinusIloczyn skalarnyOdległość
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

Macierz podobieństwa cosinusowego

Każda komórka porównuje wektor z wiersza z wektorem z kolumny.

#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

Wektory

TekstWymiaryDługość (norma L2)Długość 1
#0 How do I keep a model loaded in Ollama?41.000000Tak
#1 keep_alive controls how long the model stays in memory41.000000Tak
#2 Protect Ollama with nginx and a password41.000001Tak
#3 Tomorrow's weather forecast41.000000Tak

Na podstawie dokumentacji o embeddingach i dokumentacji API Ollamy, sprawdzone dnia 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings

Wszystko jest liczone w Twojej przeglądarce. Nic nie jest nigdzie wysyłane.

Model embeddingów zamienia fragment tekstu w listę liczb, czyli wektor. Dokumentacja Ollamy opisuje używanie tych wektorów do wyszukiwania semantycznego z podobieństwem cosinusowym oraz do RAG. Zanim napiszesz kod wyszukiwania, warto spojrzeć na liczby: czy pytanie naprawdę wypada najbliżej fragmentu, który na nie odpowiada? To narzędzie odczytuje JSON, który Ollama zwraca z /api/embed ({"embeddings": [[…], …]}), postać zgodną z OpenAI z /v1/embeddings ({"data": [{"embedding": […]}]}) albo zwykłą tablicę wektorów. Szereguje każdy wektor według podobieństwa cosinusowego do wybranego przez Ciebie wektora, a także pokazuje iloczyn skalarny i odległość euklidesową. Dokumentacja Ollamy podaje, że /api/embed zwraca wektory znormalizowane w L2 (o długości 1); dla takich wektorów podobieństwo cosinusowe i iloczyn skalarny to ta sama liczba, a narzędzie pokazuje długość każdego wektora, abyś mógł to sprawdzić. Dokumentacja mówi też, by do indeksowania i do zapytań używać tego samego modelu embeddingów. Wektorów o różnej liczbie wymiarów w ogóle nie da się porównać, a narzędzie przerywa z błędem, gdy takie znajdzie. Obliczenia sprawdzono na wartościach policzonych osobno w Pythonie.

Główna logika tego narzędzia jest otwartoźródłowa, na licencji MIT. github.com/seigo5555/toolkitbox-lib/src/embedding-similarity.ts

Zastosowania

  • Utworzyć w jednym żądaniu /api/embed embeddingi pytania i kilku kandydatów na fragmenty tekstu i zobaczyć, który fragment jest pierwszy, zanim zbudujesz wyszukiwanie
  • Porównać dwa modele embeddingów na tych samych zdaniach, jeden model po drugim, aby zobaczyć, który wyraźniej oddziela teksty powiązane od niepowiązanych
  • Sprawdzić, czy zapisane wektory mają długość 1 i oczekiwane wymiary, zanim wybierzesz miarę odległości dla swojej bazy wektorowej

Jak używać

  1. Wyślij teksty do swojego modelu w jednym żądaniu, na przykład curl http://localhost:11434/api/embed -d '{"model": "embeddinggemma", "input": ["question", "passage 1", "passage 2"]}', i wklej całą odpowiedź JSON.
  2. Opcjonalnie wpisz po jednej etykiecie w wierszu, w tej samej kolejności co dane wejściowe, aby wyniki pokazywały teksty zamiast numerów.
  3. Wybierz, z którym wektorem porównywać (domyślnie #0, czyli pierwsze wejście). Tabela szereguje pozostałe według podobieństwa cosinusowego; macierz pokazuje każdą parę, gdy wektorów jest 10 lub mniej.

FAQ

Którego podobieństwa powinienem użyć?

Strona Ollamy o embeddingach mówi, by w większości zastosowań wyszukiwania semantycznego używać podobieństwa cosinusowego. Podobieństwo cosinusowe porównuje kierunek dwóch wektorów i pomija ich długość; 1 oznacza ten sam kierunek. Narzędzie pokazuje też iloczyn skalarny i odległość euklidesową, ponieważ bazy wektorowe często pozwalają wybierać spośród nich.

Dlaczego podobieństwo cosinusowe i iloczyn skalarny są takie same?

Ponieważ wektory mają długość 1. Dokumentacja Ollamy podaje, że /api/embed zwraca wektory znormalizowane w L2, o długości 1, a dla wektorów o długości 1 podobieństwo cosinusowe jest równe iloczynowi skalarnemu. Narzędzie pokazuje długość każdego wektora i informuje, czy wszystkie mają długość 1 (z dokładnością do 0.001).

Narzędzie mówi, że wymiary się nie zgadzają. Co to znaczy?

Dwa wektory można porównać tylko wtedy, gdy mają tyle samo liczb. Długość zależy od modelu, a dokumentacja podaje ją typowo jako od 384 do 1024 wymiarów; żądanie /api/embed przyjmuje też pole dimensions. Różne długości zwykle oznaczają, że wektory pochodzą z różnych modeli lub ustawień. Dokumentacja mówi, by do indeksowania i do zapytań używać tego samego modelu embeddingów.

Czy mogę wkleić odpowiedź z embeddingami w base64?

Nie. Narzędzie odczytuje tylko liczby. Jeśli wywołujesz endpoint /v1/embeddings zgodny z OpenAI, poproś o embeddingi jako liczby zmiennoprzecinkowe, a nie base64.

Czy podobieństwo 0.8 jest dobre?

Nie ma stałego progu. Wartości zależą od modelu i od Twoich tekstów, więc porównuj wyniki fragmentów powiązanych i niepowiązanych z tego samego modelu, zamiast oceniać jedną liczbę osobno.

Czy moje dane są dokądś wysyłane?

Nie. Obliczenia odbywają się w Twojej przeglądarce. Narzędzie nigdy nie wywołuje Ollamy ani żadnego innego serwera; żądanie do swojego modelu wysyłasz sam.

Powiązane artykuły

Powiązane