الانتقال إلى المحتوى
مطور برمجيات يعمل أمام شاشتين تعرضان بيانات وشيفرات على جهاز الكمبيوتر

كيفية بناء بحث دلالي باستخدام PostgreSQL و pgvector

Mikhail Nilov · Pexels

يمكن بناء بحث دلالي باستخدام PostgreSQL عندما نريد العثور على نصوص متقاربة في المعنى، حتى إن لم تتطابق الكلمات حرفيًا. وتضيف أداة pgvector نوع بيانات للمتجهات وعمليات قياس المسافة إلى قاعدة PostgreSQL، مما يسمح بتخزين النصوص وتمثيلاتها العددية في قاعدة واحدة.

ما الذي تحتاجه قبل البدء

  • خادم PostgreSQL يدعم إضافة pgvector مع صلاحية تفعيلها داخل قاعدة البيانات.
  • أداة لإرسال استعلامات SQL، مثل psql أو واجهة إدارة موثوقة.
  • نموذج توليد تمثيلات عددية للنصوص (Embeddings) من مزود تختاره. يجب استخدام النموذج نفسه للأرشفة والبحث.

في المقابل، لا ينتج pgvector تمثيل النص الدلالي بنفسه. فهو يخزن المتجهات ويقارنها، بينما يحوّل نموذج embeddings المحتوى إلى أرقام وفق أبعاد ثابتة. لذلك يجب الفصل بين مهمتي التوليد والبحث.

إنشاء جدول متجهات في PostgreSQL

بعد ذلك، ابدأ بإنشاء الإضافة إذا كانت مثبتة ومتاحة على الخادم. ثم أنشئ جدولًا للنصوص والتضمينات. يستخدم المثال ثلاثة أبعاد للتوضيح فقط؛ أما النماذج العملية فقد تحتاج مئات أو آلاف الأبعاد بحسب توثيقها.

CREATE EXTENSION IF NOT EXISTS vector;

CREATE TABLE documents (
  id BIGSERIAL PRIMARY KEY,
  body TEXT NOT NULL,
  embedding VECTOR(3) NOT NULL
);

إدخال مثال بيانات قابل للاستعلام

على سبيل المثال، تمثل المتجهات التالية أرقامًا تعليمية مختارة يدويًا لا مخرجات نموذج ذكاء اصطناعي. ويساعد المثال على فهم بنية SQL فقط؛ فلا تتوقع منه فهم اللغة العربية أو معاني الجمل فعليًا.

INSERT INTO documents (body, embedding) VALUES
('دليل رعاية النباتات', '[0.9,0.1,0.1]'),
('تنسيق الحديقة المنزلية', '[0.8,0.2,0.1]'),
('صيانة الحاسوب', '[0.1,0.1,0.9]');

البحث عن أقرب النصوص باستخدام مسافة جيب التمام

بعد ذلك، استخدم المعامل <=> لحساب مسافة جيب التمام، ثم رتب النتائج تصاعديًا. وكلما قلت المسافة، اقترب الاتجاه بين المتجهات. وفي التطبيق الحقيقي، يجب أن ينشئ نموذج embeddings متجه الاستعلام بدل إدخاله يدويًا.

SELECT id, body,
       embedding <=> '[0.85,0.15,0.1]' AS cosine_distance
FROM documents
ORDER BY embedding <=> '[0.85,0.15,0.1]'
LIMIT 2;

وبالتالي، من المتوقع أن تظهر الجملتان المرتبطتان بالنباتات أولًا في هذا المثال العددي. لكن هذه النتيجة لا تثبت جودة بحث لغوي؛ فهي تعكس فقط ترتيب أرقام أدخلناها.

كيفية تحويل المثال إلى بحث دلالي حقيقي

  • اختر نموذج embeddings يدعم النصوص واللغة المستهدفة، واقرأ أبعاده وشروط استخدامه.
  • ولّد تمثيلًا لكل وثيقة، ثم خزّنه في عمود VECTOR يساوي عدد أبعاد النموذج.
  • عند ورود استعلام المستخدم، ولّد متجهًا بالطريقة والنموذج نفسيهما.
  • أرسل المتجه في استعلام مع معاملات مهيأة (Parameterized Queries)، وحدد عدد النتائج والمقاييس المناسبة.
  • قيّم النتائج بعينات عربية حقيقية، لا بالمسافة الرقمية وحدها.

متى تستخدم فهرس HNSW

مع مجموعات البيانات الصغيرة قد يكفي البحث الدقيق. أما عندما يزيد الحجم، فيمكن تجربة فهرس HNSW لتسريع الجيران الأقرب على نحو تقريبي. تأكد من استخدام فئة العمليات الخاصة بمسافة جيب التمام إذا اخترت هذا المقياس:

CREATE INDEX documents_embedding_hnsw_idx
ON documents USING hnsw (embedding vector_cosine_ops);

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

الأمان وحدود الاستخدام

ومع ذلك، لا ترسل مستندات حساسة إلى خدمة embeddings خارجية دون تصريح وحماية مناسبة. كذلك، لا تعتبر البحث الدلالي بديلًا كاملًا عن البحث النصي التقليدي؛ فقد تحتاج إلى دمج الاثنين للبحث عن أرقام طلبات أو أسماء منتجات دقيقة.

لمزيد من الخلفية حول عمليات قواعد البيانات، اقرأ كيفية ترحيل قاعدة SQLite باستخدام Python دون فقد البيانات. وارجع إلى التوثيق الأصلي لـ pgvector قبل تطبيق الأوامر على إصدارك.

المصادر

  1. pgvector documentationpgvector
شارك هذا المقال

التعليقات 0

شارك رأيك أو أضف معلومة مفيدة إلى النقاش.

لا توجد تعليقات بعد. يمكنك بدء النقاش.

أضف تعليقًا

نرحّب بالمشاركة المفيدة والمحترمة. الحقول التي تحمل * مطلوبة.

هذا الموقع يستخدم خدمة أكيسميت للتقليل من البريد المزعجة. اعرف المزيد عن كيفية التعامل مع بيانات التعليقات الخاصة بك processed.