Hub documentation
Thực hiện tìm kiếm tương tự vector
Thực hiện tìm kiếm tương tự vector
Tính năng Fixed-Length Arrays được thêm vào trong phiên bản DuckDB 0.10.0. Tính năng này cho phép bạn sử dụng vector embeddings trong các bảng DuckDB, giúp việc phân tích dữ liệu của bạn trở nên mạnh mẽ hơn.
Ngoài ra, hàm array_cosine_similarity đã được giới thiệu. Hàm này đo cosin của góc giữa hai vector, cho thấy mức độ tương đồng của chúng. Giá trị 1 nghĩa là chúng hoàn toàn cùng hướng, 0 nghĩa là chúng vuông góc, và -1 nghĩa là chúng hoàn toàn ngược hướng.
Hãy cùng khám phá cách sử dụng hàm này cho các truy vấn tìm kiếm tương tự. Trong phần này, chúng tôi sẽ hướng dẫn bạn cách thực hiện tìm kiếm tương tự bằng DuckDB.
Chúng ta sẽ sử dụng bộ dữ liệu asoria/awesome-chatgpt-prompts-embeddings.
Trước tiên, hãy xem trước một vài bản ghi từ tập dữ liệu:
FROM 'hf://datasets/asoria/awesome-chatgpt-prompts-embeddings/data/*.parquet' SELECT act, prompt, len(embedding) as embed_len LIMIT 3;
┌──────────────────────┬──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬───────────┐
│ act │ prompt │ embed_len │
│ varchar │ varchar │ int64 │
├──────────────────────┼──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼───────────┤
│ Linux Terminal │ I want you to act as a linux terminal. I will type commands and you will reply with what the terminal should show. I want you to only reply with the terminal output insid… │ 384 │
│ English Translator… │ I want you to act as an English translator, spelling corrector and improver. I will speak to you in any language and you will detect the language, translate it and answer… │ 384 │
│ `position` Intervi… │ I want you to act as an interviewer. I will be the candidate and you will ask me the interview questions for the `position` position. I want you to only reply as the inte… │ 384 │
└──────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴───────────┘
Tiếp theo, hãy chọn một embedding để sử dụng cho việc tìm kiếm tương tự:
FROM 'hf://datasets/asoria/awesome-chatgpt-prompts-embeddings/data/*.parquet' SELECT embedding WHERE act = 'Linux Terminal';
┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ embedding │
│ float[] │
├─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ [-0.020781303, -0.029143505, -0.0660217, -0.00932716, -0.02601602, -0.011426172, 0.06627567, 0.11941507, 0.0013917526, 0.012889079, 0.053234346, -0.07380514, 0.04871567, -0.043601237, -0.0025319182, 0.0448… │
└─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
Bây giờ, hãy sử dụng embedding đã chọn để tìm các bản ghi tương tự:
SELECT act,
prompt,
array_cosine_similarity(embedding::float[384], (SELECT embedding FROM 'hf://datasets/asoria/awesome-chatgpt-prompts-embeddings/data/*.parquet' WHERE act = 'Linux Terminal')::float[384]) AS similarity
FROM 'hf://datasets/asoria/awesome-chatgpt-prompts-embeddings/data/*.parquet'
ORDER BY similarity DESC
LIMIT 3;
┌──────────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┬────────────┐
│ act │ prompt │ similarity │
│ varchar │ varchar │ float │
├──────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┼────────────┤
│ Linux Terminal │ I want you to act as a linux terminal. I will type commands and you will reply with what the terminal should show. I want you to only reply with the terminal output insi… │ 1.0 │
│ JavaScript Console │ I want you to act as a javascript console. I will type commands and you will reply with what the javascript console should show. I want you to only reply with the termin… │ 0.7599728 │
│ R programming Inte… │ I want you to act as a R interpreter. I'll type commands and you'll reply with what the terminal should show. I want you to only reply with the terminal output inside on… │ 0.7303775 │
└──────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┴────────────┘
Xong rồi! Bạn đã thực hiện thành công tìm kiếm tương tự vector bằng DuckDB.
Update on GitHub