كيفية تمكين واستخدام pgvector على قاعدة بيانات Azure ل PostgreSQL - خادم مرن

ينطبق على: قاعدة بيانات Azure ل PostgreSQL - خادم مرن

pgvector يضيف الملحق بحث تشابه متجه مفتوح المصدر إلى PostgreSQL.

تعرفنا هذه المقالة على القدرات الإضافية التي تم تمكينها بواسطة pgvector. وهو يغطي مفاهيم تشابه المتجهات وتضمينها، ويوفر إرشادات حول كيفية تمكين الملحق pgvector . نتعرف على كيفية إنشاء المتجهات وتخزينها والاستعلام عنها. قد تحتاج أيضا إلى الرجوع إلى README الرسمي للمشروع.

تمكين الملحق

قبل أن تتمكن من التمكين pgvector على قاعدة بيانات Azure لمثيل خادم PostgreSQL المرن، تحتاج إلى إضافته إلى قائمة السماح الخاصة بك كما هو موضح في كيفية استخدام ملحقات PostgreSQL والتحقق مما إذا تمت إضافتها بشكل صحيح عن طريق تشغيل SHOW azure.extensions;.

هام

لاحظ أنه على الرغم من أن جميع مجتمع PostgreSQL يميل إلى الإشارة إلى هذا الملحق ك pgvector، فإن اسم الثنائي والملحق نفسه هو ببساطة vector. خذ ذلك في الاعتبار، لأن هذا هو الاسم الذي يجب استخدامه للسماح بالقائمة أو لإنشائه على أي قاعدة بيانات عبر الأمر CREATE EXTENSION.

ثم يمكنك تثبيت الملحق، عن طريق الاتصال بقاعدة البيانات الهدف وتشغيل الأمر CREATE EXTENSION . تحتاج إلى تكرار الأمر بشكل منفصل لكل قاعدة بيانات تريد أن يكون الملحق متوفرا فيها.

CREATE EXTENSION vector;

إشعار

لإزالة الملحق من قاعدة البيانات المتصلة حاليا، استخدم DROP EXTENSION vector;.

المفاهيم

تشابه المتجهات

تشابه المتجهات هو أسلوب يستخدم لقياس مدى تشابه عنصرين من خلال تمثيلهما كخطوط متجهة، وهي سلسلة من الأرقام. غالبا ما تستخدم المتجهات لتمثيل نقاط البيانات، حيث يمثل كل عنصر من عناصر المتجه ميزة أو سمة لنقطة البيانات.

يتم حساب تشابه المتجهات عادة باستخدام مقاييس المسافة، مثل 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.