pgvecto.rs هو امتداد Postgres يوفر وظائف البحث عن تشابه المتجهات. هو مكتوب في الصدأ وعلى أساس pgrx.
الخروج pgvecto.rs مقابل pgvector لمزيد من التفاصيل.
ميزة | pgvecto.rs | com.pgvector |
---|---|---|
تصفية | يقدم طريقة VBASE للبحث عن المتجهات والاستعلام العلائقي (على سبيل المثال، TopK + Filter + Join ذو ناقل واحد). | عند تطبيق المرشحات، قد تكون النتائج غير كاملة. على سبيل المثال، إذا كنت تنوي في الأصل قصر النتائج على 10، فقد ينتهي بك الأمر إلى 5 نتائج فقط باستخدام المرشحات. |
أبعاد المتجهات | يدعم ما يصل إلى 65535 الأبعاد. | يدعم ما يصل إلى 2000 الأبعاد. |
SIMD | يتم إرسال تعليمات SIMD ديناميكيًا في وقت التشغيل لتحقيق أقصى قدر من الأداء بناءً على قدرات الجهاز المحدد. | تمت إضافة إرسال وحدة المعالجة المركزية لوظائف المسافة على Linux x86-64" في 0.7.0. |
أنواع البيانات | يقدم أنواع بيانات إضافية: المتجهات الثنائية، FP16 (نقطة عائمة 16 بت)، وINT8 (عدد صحيح 8 بت). | - |
الفهرسة | يتعامل مع تخزين وذاكرة الفهارس بشكل منفصل عن PostgreSQL | يعتمد على محرك التخزين الأصلي لـ PostgreSQL |
دعم وال | يوفر دعمًا لتسجيل الكتابة المسبقة (WAL) للبيانات، ويعمل دعم الفهرس حاليًا. | يوفر دعم تسجيل الكتابة المسبق (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 ?
مشاكل! نحن نرحب بجميع أنواع المساهمات من مجتمع المصادر المفتوحة والأفراد والشركاء.
الشكر موصول لهؤلاء الأشخاص الرائعين (مفتاح الرموز التعبيرية):
أضف مساهماتك |
يتبع هذا المشروع مواصفات جميع المساهمين. المساهمات من أي نوع موضع ترحيب!
وذلك بفضل المشاريع التالية: