pgvecto.rs เป็นส่วนขยาย Postgres ที่ให้ฟังก์ชันการค้นหาความคล้ายคลึงกันของเวกเตอร์ เขียนด้วยภาษา Rust และอิงจาก pgrx
ชำระเงิน pgvecto.rs กับ pgvector เพื่อดูรายละเอียดเพิ่มเติม
คุณสมบัติ | pgvecto.rs | pgvector |
---|---|---|
การกรอง | แนะนำวิธี VBASE สำหรับการค้นหาเวกเตอร์และการสืบค้นเชิงสัมพันธ์ (เช่น Single-Vector TopK + Filter + Join) | เมื่อใช้ตัวกรอง ผลลัพธ์อาจไม่สมบูรณ์ ตัวอย่างเช่น หากเดิมทีคุณตั้งใจจะจำกัดผลลัพธ์ไว้ที่ 10 รายการ คุณอาจพบผลลัพธ์เพียง 5 รายการที่มีตัวกรอง |
ขนาดเวกเตอร์ | รองรับขนาดสูงสุด 65535 | รองรับได้ถึง 2,000 มิติ |
ซิมดี | คำสั่ง SIMD จะถูกส่งแบบไดนามิก ณ รันไทม์เพื่อเพิ่มประสิทธิภาพสูงสุดตามความสามารถของเครื่องเฉพาะ | เพิ่มการจัดส่ง CPU สำหรับฟังก์ชันระยะทางบน Linux x86-64" ใน 0.7.0 |
ประเภทข้อมูล | แนะนำประเภทข้อมูลเพิ่มเติม: เวกเตอร์ไบนารี, FP16 (จุดลอยตัว 16 บิต) และ INT8 (จำนวนเต็ม 8 บิต) | - |
การจัดทำดัชนี | จัดการพื้นที่เก็บข้อมูลและหน่วยความจำของดัชนีแยกจาก PostgreSQL | อาศัยกลไกการจัดเก็บข้อมูลดั้งเดิมของ PostgreSQL |
วอลสนับสนุน | ให้การสนับสนุน Write-Ahead Logging (WAL) สำหรับข้อมูล การสนับสนุนดัชนีอยู่ระหว่างดำเนินการ | ให้การสนับสนุน Write-Ahead Logging (WAL) สำหรับดัชนีและข้อมูล |
สำหรับผู้ใช้ใหม่ เราขอแนะนำให้ใช้อิมเมจ Docker เพื่อเริ่มต้นอย่างรวดเร็ว
docker run
--name pgvecto-rs-demo
-e POSTGRES_PASSWORD=mysecretpassword
-p 5432:5432
-d tensorchord/pgvecto-rs:pg16-v0.2.1
จากนั้นคุณสามารถเชื่อมต่อกับฐานข้อมูลโดยใช้เครื่องมือบรรทัดคำสั่ง psql
ชื่อผู้ใช้เริ่มต้นคือ postgres
และรหัสผ่านเริ่มต้นคือ mysecretpassword
psql -h localhost -p 5432 -U postgres
เรียกใช้ SQL ต่อไปนี้เพื่อให้แน่ใจว่าส่วนขยายถูกเปิดใช้งาน
DROP EXTENSION IF EXISTS vectors;
CREATE EXTENSION vectors;
pgvecto.rs แนะนำ vector(n)
ซึ่งแสดงถึงเวกเตอร์ n มิติ n
ภายในวงเล็บหมายถึงขนาดของเวกเตอร์
คุณสามารถสร้างตารางด้วย SQL ต่อไปนี้
-- create table with a vector column
CREATE TABLE items (
id bigserial PRIMARY KEY ,
embedding vector( 3 ) NOT NULL -- 3 dimensions
);
เคล็ดลับ
vector(n)
เป็นประเภทข้อมูลที่ถูกต้องก็ต่อเมื่อ vector(3)
ของได้ vector
ก็เป็นประเภทข้อมูลที่ถูกต้องเช่นกัน อย่างไรก็ตาม คุณยังไม่สามารถใส่ได้ vector
สำหรับคอลัมน์หรือมีค่าบางค่าไม่ตรงกับมิติที่แสดงโดยคอลัมน์ คุณจะไม่สามารถสร้างดัชนีในนั้นได้
จากนั้นคุณสามารถเติมข้อมูลเวกเตอร์ลงในตารางได้ดังนี้
-- insert values
INSERT INTO items (embedding)
VALUES ( ' [1,2,3] ' ), ( ' [4,5,6] ' );
-- or insert values using a casting from array to vector
INSERT INTO items (embedding)
VALUES (ARRAY[ 1 , 2 , 3 ]:: real []), (ARRAY[ 4 , 5 , 6 ]:: real []);
เราสนับสนุนตัวดำเนินการสามตัวในการคำนวณระยะห่างระหว่างเวกเตอร์สองตัว
<->
: ระยะทางแบบยุคลิดกำลังสอง กำหนดให้เป็น <#>
: ผลคูณดอทลบ กำหนดให้เป็น <=>
: ระยะทางโคไซน์ กำหนดเป็น -- call the distance function through operators
-- squared Euclidean distance
SELECT ' [1, 2, 3] ' ::vector < - > ' [3, 2, 1] ' ::vector;
-- negative dot product
SELECT ' [1, 2, 3] ' ::vector < # > '[3, 2, 1]'::vector;
-- cosine distance
SELECT ' [1, 2, 3] ' ::vector <=> ' [3, 2, 1] ' ::vector;
คุณสามารถค้นหาเวกเตอร์ได้ง่ายๆ เช่นนี้
-- query the similar embeddings
SELECT * FROM items ORDER BY embedding < - > ' [3,2,1] ' LIMIT 5 ;
โปรดดูบทช่วยสอนแอปพลิเคชันการตอบคำถาม
ประเภท vecf16
นั้นเหมือนกันกับ vector
ในอะไรก็ได้ยกเว้นประเภทสเกลาร์ มันเก็บตัวเลขทศนิยม 16 บิต หากคุณต้องการลดการใช้หน่วยความจำเพื่อให้ได้ประสิทธิภาพที่ดีขึ้น คุณสามารถลองแทนที่ประเภท vector
ด้วยประเภท vecf16
โปรดตรวจสอบแผนที่นำทาง ต้องการที่จะกระโดดเข้าไป? ยินดีต้อนรับการอภิปรายและการมีส่วนร่วม!
good first issue ?
ปัญหา! เรายินดีรับการมีส่วนร่วมทุกประเภทจากชุมชนโอเพ่นซอร์ส บุคคล และพันธมิตร
ขอขอบคุณผู้คนที่แสนวิเศษเหล่านี้ (คีย์อีโมจิ):
เพิ่มการมีส่วนร่วมของคุณ |
โครงการนี้เป็นไปตามข้อกำหนดของผู้มีส่วนร่วมทั้งหมด ยินดีต้อนรับการบริจาคใด ๆ !
ขอขอบคุณโครงการดังต่อไปนี้: