~/tools / Embedding và tìm kiếm (RAG) / Embedding Similarity Calculator

Embedding Similarity Calculator — So sánh vector embedding từ Ollama /api/embed

Dán phản hồi từ /api/embed của Ollama hoặc từ endpoint /v1/embeddings tương thích OpenAI để so sánh các vector: độ tương đồng cosine, tích vô hướng và khoảng cách Euclid, xếp hạng so với vector bạn chọn, kèm ma trận độ tương đồng. Công cụ cũng hiển thị số chiều và độ dài của từng vector, để bạn thấy các vector đã được chuẩn hóa chưa và có đến từ cùng một mô hình hay không. Không có gì rời khỏi trình duyệt của bạn.

Ví dụ dùng các vector tự nghĩ ra, có độ dài đơn vị và 4 chiều để bạn dễ đọc. Embedding thật có hàng trăm hoặc hàng nghìn chiều.

Đọc như một phản hồi /api/embed của Ollama: 4 vector có 4 chiều. Tất cả vector có độ dài bằng 1, nên độ tương đồng cosine và tích vô hướng bằng nhau.

Xếp hạng theo độ tương đồng cosine

So sánh với #0 How do I keep a model loaded in Ollama?. Giá trị càng cao càng giống.

HạngVăn bảnCosineTích vô hướngKhoảng cách
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

Ma trận độ tương đồng cosine

Mỗi ô so sánh vector ở hàng với vector ở cột.

#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

Các vector

Văn bảnSố chiềuĐộ dài (chuẩn L2)Độ dài đơn vị
#0 How do I keep a model loaded in Ollama?41.000000Có
#1 keep_alive controls how long the model stays in memory41.000000Có
#2 Protect Ollama with nginx and a password41.000001Có
#3 Tomorrow's weather forecast41.000000Có

Dựa trên tài liệu embeddings và tài liệu tham chiếu API của Ollama, đối chiếu vào 2026-11-04. Ollama: Embeddings / Ollama API: Generate embeddings

Mọi thứ được tính toán trong trình duyệt của bạn. Không có gì được gửi đi đâu cả.

Một mô hình embedding biến một đoạn văn bản thành một danh sách các con số, tức một vector. Tài liệu của Ollama mô tả việc dùng các vector này cho tìm kiếm ngữ nghĩa bằng độ tương đồng cosine và cho RAG. Trước khi viết mã tìm kiếm, việc xem các con số sẽ có ích: câu hỏi có thật sự gần nhất với đoạn văn trả lời nó không? Công cụ này đọc JSON mà Ollama trả về từ /api/embed ({"embeddings": [[…], …]}), dạng tương thích OpenAI từ /v1/embeddings ({"data": [{"embedding": […]}]}) hoặc một mảng vector thuần. Nó xếp hạng mọi vector so với vector bạn chọn theo độ tương đồng cosine, đồng thời hiển thị tích vô hướng và khoảng cách Euclid. Tài liệu của Ollama nói /api/embed trả về các vector đã chuẩn hóa L2 (có độ dài đơn vị); với các vector như vậy, độ tương đồng cosine và tích vô hướng là cùng một con số, và công cụ hiển thị độ dài của từng vector để bạn có thể kiểm chứng. Tài liệu cũng nói hãy dùng cùng một mô hình embedding cho việc lập chỉ mục và cho truy vấn. Các vector có số chiều khác nhau hoàn toàn không thể so sánh, và công cụ sẽ dừng lại với một thông báo lỗi khi gặp chúng. Các phép tính đã được kiểm tra với những giá trị tính riêng bằng Python.

Phần xử lý chính của công cụ này là mã nguồn mở theo giấy phép MIT. github.com/seigo5555/toolkitbox-lib/src/embedding-similarity.ts

Trường hợp dùng

  • Tạo embedding cho một câu hỏi và vài đoạn văn ứng viên trong một yêu cầu /api/embed, rồi xem đoạn nào xếp đầu trước khi bạn xây dựng tính năng tìm kiếm
  • So sánh hai mô hình embedding trên cùng các câu, mỗi lần một mô hình, để xem mô hình nào tách văn bản liên quan và không liên quan rõ ràng hơn
  • Kiểm tra xem các vector đã lưu có độ dài đơn vị và có số chiều như bạn mong đợi không, trước khi chọn thước đo khoảng cách cho cơ sở dữ liệu vector của bạn

Cách dùng

  1. Gửi các văn bản đến mô hình của bạn trong một yêu cầu, ví dụ curl http://localhost:11434/api/embed -d '{"model": "embeddinggemma", "input": ["question", "passage 1", "passage 2"]}', rồi dán toàn bộ phản hồi JSON.
  2. Có thể viết mỗi dòng một nhãn, theo cùng thứ tự với đầu vào, để kết quả hiển thị các văn bản thay vì số thứ tự.
  3. Chọn vector dùng làm mốc so sánh (mặc định là #0, đầu vào đầu tiên). Bảng xếp hạng các vector còn lại theo độ tương đồng cosine; ma trận hiển thị mọi cặp khi có từ 10 vector trở xuống.

Hỏi đáp

Tôi nên dùng độ tương đồng nào?

Trang embeddings của Ollama nói hãy dùng độ tương đồng cosine cho hầu hết các trường hợp tìm kiếm ngữ nghĩa. Độ tương đồng cosine so sánh hướng của hai vector và bỏ qua độ dài; 1 nghĩa là cùng hướng. Công cụ cũng hiển thị tích vô hướng và khoảng cách Euclid, vì các cơ sở dữ liệu vector thường cho bạn chọn giữa những thước đo này.

Vì sao độ tương đồng cosine và tích vô hướng lại giống nhau?

Vì các vector có độ dài bằng 1. Tài liệu của Ollama nói /api/embed trả về các vector đã chuẩn hóa L2, có độ dài đơn vị, và với các vector độ dài đơn vị thì độ tương đồng cosine bằng tích vô hướng. Công cụ hiển thị độ dài của từng vector và cho biết tất cả có độ dài đơn vị hay không (trong phạm vi 0.001).

Công cụ báo số chiều không khớp. Điều đó có nghĩa là gì?

Hai vector chỉ có thể so sánh khi chúng có cùng số lượng con số. Độ dài phụ thuộc vào mô hình, mà tài liệu nêu là thường từ 384 đến 1024 chiều, và yêu cầu /api/embed cũng chấp nhận trường dimensions. Độ dài khác nhau thường có nghĩa là các vector đến từ những mô hình hoặc thiết lập khác nhau. Tài liệu nói hãy dùng cùng một mô hình embedding cho việc lập chỉ mục và cho truy vấn.

Tôi có thể dán phản hồi chứa embedding dạng base64 không?

Không. Công cụ chỉ đọc các con số. Nếu bạn gọi endpoint /v1/embeddings tương thích OpenAI, hãy yêu cầu embedding ở dạng float, không phải base64.

Độ tương đồng 0.8 có tốt không?

Không có ngưỡng cố định. Giá trị phụ thuộc vào mô hình và văn bản của bạn, vì vậy hãy so sánh điểm của các đoạn liên quan và không liên quan từ cùng một mô hình thay vì đánh giá chỉ dựa trên một con số.

Dữ liệu của tôi có bị gửi đi đâu không?

Không. Các phép tính chạy trong trình duyệt của bạn. Công cụ không bao giờ gọi Ollama hay bất kỳ máy chủ nào khác; bạn tự gửi yêu cầu đến mô hình của mình.

Bài viết liên quan

Liên quan