كيفية التمكين والاستخدام pgvector
على Azure Cosmos DB ل PostgreSQL
ينطبق على: Azure Cosmos DB ل PostgreSQL (مدعوم بملحق قاعدة بيانات Citus إلى PostgreSQL)
pgvector
يضيف الملحق بحث تشابه متجه مفتوح المصدر إلى PostgreSQL.
تعرفنا هذه المقالة على القدرات الإضافية التي تم تمكينها بواسطة pgvector
. وهو يغطي مفاهيم تشابه المتجهات وتضمينها، ويوفر إرشادات حول كيفية تمكين الملحق pgvector
. نتعرف على كيفية إنشاء المتجهات وتخزينها والاستعلام عنها.
قد تحتاج أيضا إلى الرجوع إلى README الرسمي للمشروع.
تمكين الملحق
يجب تمكين ملحقات PostgreSQL في قاعدة البيانات الخاصة بك قبل أن تتمكن من استخدامها. لتمكين الملحق، قم بتشغيل الأمر من أداة psql لتحميل الكائنات المحزمة في قاعدة البيانات الخاصة بك.
SELECT CREATE_EXTENSION('vector');
إشعار
لتعطيل استخدام ملحق drop_extension()
المفاهيم
تشابه المتجهات
تشابه المتجهات هو أسلوب يستخدم لقياس مدى تشابه عنصرين من خلال تمثيلهما كخطوط متجهة، وهي سلسلة من الأرقام. غالبا ما تستخدم المتجهات لتمثيل نقاط البيانات، حيث يمثل كل عنصر من عناصر المتجه ميزة أو سمة لنقطة البيانات.
يتم حساب تشابه المتجهات عادة باستخدام مقاييس المسافة، مثل Euclidean distance
أو cosine
التشابه. تقيس المسافة الإقليدية مسافة الخط المستقيم بين خطين متجهين في المسافة n-الأبعاد، بينما يقيس التشابه التمام جيب التمام للزاوية بين خطين متجهين. عادة ما تتراوح قيم مقاييس التشابه بين 0
و 1
، مع higher
قيم تشير إلى تشابه أكبر بين المتجهات.
يستخدم تشابه المتجهات على نطاق واسع في تطبيقات مختلفة، مثل أنظمة التوصية وتصنيف النص والتعرف على الصور وتكوين أنظمة المجموعات. على سبيل المثال، في أنظمة التوصية، يمكن استخدام تشابه المتجهات لتحديد عناصر مماثلة استنادا إلى تفضيلات المستخدم. في تصنيف النص، يمكن استخدام تشابه المتجهات لتحديد التشابه بين مستندين أو جمل استنادا إلى تمثيلات المتجهات الخاصة بهم.
عمليات التضمين
التضمين هو تقنية لتقييم "صلة" النصوص أو الصور أو مقاطع الفيديو أو أنواع أخرى من المعلومات. يسمح التقييم لنماذج التعلم الآلي بتحديد العلاقات والتشابهات بين البيانات بكفاءة، ما يسمح للخوارزميات بتحديد الأنماط وإجراء تنبؤات دقيقة. على سبيل المثال، في مهمة تحليل المشاعر، قد يتوقع أن يكون للكلمات ذات التضمينات المماثلة درجات توجه مماثلة.
الشروع في العمل
أنشئ جدولا tblvector
embedding
بعمود من النوع vector(3)
يمثل متجها ثلاثي الأبعاد.
CREATE TABLE tblvector(
id bigserial PRIMARY KEY,
embedding vector(3)
);
بمجرد إنشاء تضمين باستخدام خدمة مثل OpenAI API، يمكنك تخزين المتجه الناتج في قاعدة البيانات الخاصة بك. تعريف متجه على أنه vector(3)
معين [x,y,z] coordinates
في مستوى ثلاثي الأبعاد. يدرج الأمر خمسة صفوف جديدة في tblvector
الجدول مع التضمينات المتوفرة.
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]'), (3, '[5,4,6]'), (4, '[3,5,7]'), (5, '[7,8,9]');
باستخدام العبارة INSERT INTO ... ON CONFLICT
، يمكنك تحديد إجراء بديل، مثل تحديث السجلات التي تطابق المعايير. يسمح لك بمعالجة التعارضات المحتملة بطريقة أكثر كفاءة وفعالية.
INSERT INTO tblvector (id, embedding) VALUES (1, '[1,2,3]'), (2, '[4,5,6]')
ON CONFLICT (id) DO UPDATE SET embedding = EXCLUDED.embedding;
يقوم DELETE
الأمر بإزالة الصفوف من جدول محدد استنادا إلى الشروط المحددة في عبارة WHERE. عندما لا تكون عبارة WHERE موجودة، يتم حذف كافة الصفوف في الجدول.
DELETE FROM tblvector WHERE id = 1;
لاسترداد المتجهات وحساب التشابه، استخدم SELECT
عبارات وعوامل تشغيل المتجهات المضمنة. على سبيل المثال، يحسب الاستعلام المسافة الإقليدية (مسافة L2) بين المتجه المحدد والخطوط المتجهة المخزنة في tblvector
الجدول، ويفرز النتائج حسب المسافة المحسوبة، ويرجع أقرب خمسة عناصر متشابهة.
SELECT * FROM tblvector
ORDER BY embedding <-> '[3,1,2]'
LIMIT 5;
يستخدم الاستعلام عامل التشغيل "<->"، وهو "عامل تشغيل المسافة" المستخدم لحساب المسافة بين خطين متجهين في مساحة متعددة الأبعاد. يقوم الاستعلام بإرجاع كافة الصفوف التي تقل المسافة عن 6 من المتجه [3,1,2].
SELECT * FROM tblvector WHERE embedding <-> '[3,1,2]' < 6;
يسترد الأمر متوسط قيمة العمود "التضمين" من الجدول "tblvector". على سبيل المثال، إذا كان العمود "تضمين" يحتوي على تضمينات الكلمات لنموذج لغة، فيمكن استخدام متوسط قيمة هذه التضمينات لتمثيل الجملة أو المستند بأكمله.
SELECT AVG(embedding) FROM tblvector;
عوامل تشغيل المتجهات
pgvector
يقدم ستة عوامل تشغيل جديدة يمكن استخدامها على المتجهات:
عامل | الوصف |
---|---|
+ | إضافة من خلال عنصر |
- | الطرح من خلال عنصر |
* | الضرب من حيث العنصر |
<-> | مسافة الإقليديين |
<#> | منتج داخلي سالب |
<=> | مسافة جيب التمام |
دالات المتجه
cosine_distance
حساب مسافة جيب التمام بين خطين متجهين.
cosine_distance(vector, vector)
الوسيطات
vector
أولا vector
.
vector
الثاني vector
.
نوع الإرجاع
double precision
كمسافة بين الخطين المتجهين المقدمين.
inner_product
حساب المنتج الداخلي لمتجهين.
inner_product(vector, vector)
الوسيطات
vector
أولا vector
.
vector
ثان vector
نوع الإرجاع
double precision
كمنتج داخلي للمتجهين.
l2_distance
تحسب المسافة الإقليدية (المعروفة أيضا باسم L2) بين خطين متجهين.
l2_distance(vector, vector)
الوسيطات
vector
أولا vector
.
vector
ثان vector
نوع الإرجاع
double precision
كمسافة إقليدية بين الخطين المتجهين.
l1_distance
حساب مسافة taxicab (المعروفة أيضا باسم L1) بين خطين متجهين.
l1_distance(vector, vector)
الوسيطات
vector
أولا vector
.
vector
ثان vector
نوع الإرجاع
double precision
كمسافة taxicab بين الخطين المتجهين.
vector_dims(vector)
إرجاع أبعاد متجه معين.
الوسيطات
vector
vector
.
نوع الإرجاع
integer
يمثل عدد أبعاد المتجه المحدد.
vector_norms(vector)
حساب القاعدة الإقليدية لمتجه معين.
الوسيطات
vector
vector
.
نوع الإرجاع
double precision
يمثل القاعدة الإقليدية للمتجه المحدد.
تجميعات المتجهات
AVG
حساب متوسط المتجهات المعالجة.
الوسيطات
vector
vector
.
نوع الإرجاع
vector
يمثل متوسط المتجهات المعالجة.
SUM
الوسيطات
vector
vector
.
نوع الإرجاع
vector
يمثل مجموع المتجهات المعالجة.
الخطوات التالية
تعرف على المزيد حول الأداء والفهرسة والقيود باستخدام pgvector
.