~/tools / Embedding dan pencarian (RAG) / Embedding Similarity Calculator
Embedding Similarity Calculator — Bandingkan vektor embedding dari Ollama /api/embed
Tempel respons dari /api/embed milik Ollama atau endpoint /v1/embeddings yang kompatibel dengan OpenAI dan bandingkan vektornya: kemiripan kosinus, hasil kali titik, dan jarak Euclidean, diperingkat terhadap vektor yang Anda pilih, plus matriks kemiripan. Alat ini juga menampilkan dimensi dan panjang tiap vektor, sehingga Anda bisa melihat apakah vektornya sudah dinormalisasi dan apakah berasal dari model yang sama. Tidak ada yang keluar dari browser Anda.
Contoh ini memakai vektor rekaan berpanjang satuan dengan 4 dimensi agar mudah dibaca. Embedding sungguhan memiliki ratusan atau ribuan dimensi.
Dibaca sebagai respons /api/embed dari Ollama: 4 vektor dengan 4 dimensi. Semua vektor memiliki panjang 1, jadi kemiripan kosinus dan hasil kali titik sama.
Peringkat menurut kemiripan kosinus
Dibandingkan dengan #0 How do I keep a model loaded in Ollama?. Makin tinggi makin mirip.
| Peringkat | Teks | Kosinus | Hasil kali titik | Jarak |
|---|---|---|---|---|
| 1 | #1 keep_alive controls how long the model stays in memory | 0.9962 | 0.9962 | 0.0876 |
| 2 | #2 Protect Ollama with nginx and a password | 0.4037 | 0.4037 | 1.0921 |
| 3 | #3 Tomorrow's weather forecast | 0.0100 | 0.0100 | 1.4071 |
Matriks kemiripan kosinus
Setiap sel membandingkan vektor di baris dengan vektor di kolom.
| #0 | #1 | #2 | #3 | |
|---|---|---|---|---|
| #0 | 1.000 | 0.996 | 0.404 | 0.010 |
| #1 | 0.996 | 1.000 | 0.475 | -0.005 |
| #2 | 0.404 | 0.475 | 1.000 | -0.377 |
| #3 | 0.010 | -0.005 | -0.377 | 1.000 |
Vektor
| Teks | Dimensi | Panjang (norma L2) | Panjang satuan |
|---|---|---|---|
| #0 How do I keep a model loaded in Ollama? | 4 | 1.000000 | Ya |
| #1 keep_alive controls how long the model stays in memory | 4 | 1.000000 | Ya |
| #2 Protect Ollama with nginx and a password | 4 | 1.000001 | Ya |
| #3 Tomorrow's weather forecast | 4 | 1.000000 | Ya |
Berdasarkan dokumentasi embeddings dan referensi API Ollama, dicek pada 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings
Semuanya dihitung di browser Anda. Tidak ada yang dikirim ke mana pun.
Model embedding mengubah sepotong teks menjadi daftar angka, yaitu vektor. Dokumentasi Ollama menjelaskan penggunaan vektor ini untuk pencarian semantik dengan kemiripan kosinus, dan untuk RAG. Sebelum menulis kode pencarian, ada baiknya melihat angkanya: apakah pertanyaan benar-benar paling dekat dengan bagian teks yang menjawabnya? Alat ini membaca JSON yang dikembalikan Ollama dari /api/embed ({"embeddings": [[…], …]}), bentuk yang kompatibel dengan OpenAI dari /v1/embeddings ({"data": [{"embedding": […]}]}), atau array vektor biasa. Alat ini memeringkat setiap vektor terhadap vektor yang Anda pilih berdasarkan kemiripan kosinus, dan juga menampilkan hasil kali titik dan jarak Euclidean. Dokumentasi Ollama menyatakan bahwa /api/embed mengembalikan vektor yang dinormalisasi L2 (berpanjang satuan); untuk vektor seperti itu, kemiripan kosinus dan hasil kali titik adalah angka yang sama, dan alat ini menampilkan panjang tiap vektor agar Anda dapat memastikannya. Dokumentasi juga menyatakan agar menggunakan model embedding yang sama untuk pengindeksan dan untuk kueri. Vektor dengan jumlah dimensi berbeda sama sekali tidak dapat dibandingkan, dan alat ini berhenti dengan pesan error ketika menemukannya. Perhitungannya telah dicek terhadap nilai yang dihitung terpisah di Python.
Logika utama alat ini bersifat sumber terbuka dengan lisensi MIT. github.com/seigo5555/toolkitbox-lib/src/embedding-similarity.ts
Kapan dipakai
- Buat embedding satu pertanyaan dan beberapa bagian teks kandidat dalam satu permintaan /api/embed, lalu lihat bagian mana yang berperingkat pertama sebelum Anda membangun pencarian
- Bandingkan dua model embedding pada kalimat yang sama, satu model per kali, untuk melihat mana yang memisahkan teks yang berkaitan dan tidak berkaitan dengan lebih jelas
- Periksa apakah vektor yang tersimpan berpanjang satuan dan memiliki dimensi yang Anda harapkan sebelum memilih metrik jarak untuk basis data vektor Anda
Cara pakai
- Kirim teks ke model Anda dalam satu permintaan, misalnya curl http://localhost:11434/api/embed -d '{"model": "embeddinggemma", "input": ["question", "passage 1", "passage 2"]}', lalu tempel seluruh respons JSON-nya.
- Secara opsional, tulis satu label per baris, dengan urutan yang sama seperti input, agar hasilnya menampilkan teks, bukan nomor.
- Pilih vektor pembanding (secara default #0, input pertama). Tabel memeringkat vektor lainnya menurut kemiripan kosinus; matriks menampilkan setiap pasangan bila ada 10 vektor atau kurang.
Tanya jawab
Kemiripan mana yang sebaiknya saya pakai?
Halaman embeddings Ollama menyatakan agar menggunakan kemiripan kosinus untuk sebagian besar kasus pencarian semantik. Kemiripan kosinus membandingkan arah dua vektor dan mengabaikan panjangnya; 1 berarti arah yang sama. Alat ini juga menampilkan hasil kali titik dan jarak Euclidean, karena basis data vektor sering membiarkan Anda memilih di antara ketiganya.
Mengapa kemiripan kosinus dan hasil kali titik sama?
Karena panjang vektornya 1. Dokumentasi Ollama menyatakan bahwa /api/embed mengembalikan vektor berpanjang satuan yang dinormalisasi L2, dan untuk vektor berpanjang satuan, kemiripan kosinus sama dengan hasil kali titik. Alat ini menampilkan panjang tiap vektor dan menyatakan apakah semuanya berpanjang satuan (dalam 0.001).
Alat ini bilang dimensinya tidak cocok. Apa artinya?
Dua vektor hanya dapat dibandingkan jika jumlah angkanya sama. Panjangnya bergantung pada model, yang menurut dokumentasi umumnya 384 sampai 1024 dimensi, dan permintaan /api/embed juga menerima field dimensions. Panjang yang berbeda biasanya berarti vektornya berasal dari model atau pengaturan yang berbeda. Dokumentasi menyatakan agar menggunakan model embedding yang sama untuk pengindeksan dan untuk kueri.
Bisakah saya menempel respons dengan embedding base64?
Tidak. Alat ini hanya membaca angka. Jika Anda memanggil endpoint /v1/embeddings yang kompatibel dengan OpenAI, minta embedding dalam bentuk float, bukan base64.
Apakah kemiripan 0.8 itu bagus?
Tidak ada ambang batas yang pasti. Nilainya bergantung pada model dan teks Anda, jadi bandingkan skor bagian teks yang berkaitan dan tidak berkaitan dari model yang sama, jangan menilai dari satu angka saja.
Apakah data saya dikirim ke suatu tempat?
Tidak. Perhitungan berjalan di browser Anda. Alat ini tidak pernah memanggil Ollama atau server lain; Anda sendiri yang mengirim permintaan ke model Anda.
Artikel terkait
- Embedding dengan Ollama: dasar untuk pencarian dan RAGMembuat embedding dengan /api/embed milik Ollama: model dan ukurannya, truncate dan dimensions, vektor berpanjang satuan dan kemiripan kosinus, dari dokumentasi resmi.
- Simpan dan cari embedding Ollama di PostgreSQL dengan pgvectorSimpan embedding Ollama di PostgreSQL dengan pgvector, cari dengan HNSW atau IVFFlat, dan teruskan hasilnya ke /api/chat agar jawabannya menyebut sumbernya.