الذكاء الاصطناعي التوليدي والوكلاء متوسط · Intermediate 12 دقيقة

قواعد بيانات المتجهات

Vector Databases

تخزين التضمينات والبحث عن الأقرب بسرعة: البحث التقريبي وHNSW والفهارس والتصفية.

تقدّمك في المسار0%

لماذا قاعدة متجهات؟

عند وجود آلاف المقاطع يكفي حساب التشابه مع الكل بـ NumPy. مع الملايين نحتاج إلى فهارس متخصصة وتخزين دائم وتحديث وتصفية.

البحث الدقيق مقابل التقريبي

import numpy as np, faiss
d = 384
xb = np.random.default_rng(0).normal(size=(100_000, d)).astype("float32")
faiss.normalize_L2(xb)

flat = faiss.IndexFlatIP(d)                 # بحث دقيق بالضرب النقطي
flat.add(xb)

hnsw = faiss.IndexHNSWFlat(d, 32, faiss.METRIC_INNER_PRODUCT)   # بحث تقريبي
hnsw.hnsw.efSearch = 64
hnsw.add(xb)

q = xb[:5]
_, I_exact = flat.search(q, 10)
_, I_approx = hnsw.search(q, 10)
recall = np.mean([len(set(a) & set(b)) / 10 for a, b in zip(I_exact, I_approx)])
print("recall@10 =", recall)

التثبيت: pip install faiss-cpu.

أنواع الفهارس

الفهرسالفكرةملاحظات
Flatمقارنة كاملةدقيق، مناسب للأحجام الصغيرة
IVFتجميع المتجهات ثم البحث في المجموعات القريبةيحتاج إلى تدريب على عينة
HNSWرسم بياني متعدد الطبقاتسريع ودقيق، يستهلك ذاكرة أكبر
PQ (التكميم)ضغط المتجهاتيوفر الذاكرة مع خسارة دقة

pgvector مثال

CREATE EXTENSION IF NOT EXISTS vector;
CREATE TABLE chunks (id bigserial PRIMARY KEY, lang text, body text, embedding vector(384));
CREATE INDEX ON chunks USING hnsw (embedding vector_cosine_ops);
SELECT id, body FROM chunks
WHERE lang = 'ar'
ORDER BY embedding <=> $1      -- مسافة جيب التمام
LIMIT 5;

$1 يمثل متجه الاستعلام الممرر من التطبيق.

معايير الاختيار

  • حجم البيانات ومعدل التحديث.
  • الحاجة إلى التصفية بالبيانات الوصفية.
  • زمن الاستجابة المطلوب.
  • التشغيل الذاتي أم خدمة مُدارة.
  • النسخ الاحتياطي والأمان والتحكم في الوصول.

لا تحتاج كل التطبيقات إلى قاعدة متخصصة؛ مكتبة مثل FAISS أو امتداد pgvector يكفيان كثيراً.

مصطلحات الدرس

HNSW Hierarchical Navigable Small World
فهرس قائم على رسم بياني متعدد الطبقات يتيح بحثاً تقريبياً سريعاً بدقة استرجاع عالية.
البحث التقريبي عن أقرب الجيران Approximate Nearest Neighbor Search
إيجاد متجهات قريبة جداً من الاستعلام بسرعة عالية دون ضمان إيجاد الأقرب تماماً.
التصفية بالبيانات الوصفية Metadata Filtering
تقييد نتائج البحث المتجهي بشروط على حقول مثل اللغة أو التاريخ أو المصدر.

الملخص

قواعد بيانات المتجهات تخزن التضمينات مع بياناتها الوصفية وتتيح البحث عن أقرب الجيران بسرعة. البحث الدقيق يقارن الاستعلام بكل المتجهات وهو مكلف مع الملايين، لذا تُستخدم خوارزميات البحث التقريبي (ANN) مثل HNSW وIVF مع التكميم، التي تقايض قليلاً من الدقة بسرعة كبيرة. تتوفر مكتبات مثل FAISS، وامتدادات لقواعد بيانات قائمة مثل pgvector لـ PostgreSQL، وقواعد متخصصة. معايير الاختيار: الحجم، وزمن الاستجابة، والتصفية بالبيانات الوصفية، والتحديث، والتكلفة.

أسئلة مراجعة

  1. لماذا لا نستخدم البحث الدقيق مع مليار متجه؟

    لأن مقارنة الاستعلام بكل المتجهات بطيئة ومكلفة؛ الفهارس التقريبية تقلل الزمن كثيراً مقابل خسارة صغيرة في الدقة.

  2. ما المقايضة الأساسية في معاملات HNSW؟

    زيادة قيم مثل ef تحسن دقة الاسترجاع على حساب الزمن والذاكرة.

المصادر والمراجع

  1. Malkov & Yashunin (2016) Efficient and robust approximate nearest neighbor search using HNSW graphs — arXiv
  2. Johnson, Douze & Jégou (2017) Billion-scale similarity search with GPUs (FAISS) — arXiv
  3. pgvector — Open-source vector similarity search for Postgres

إكمال الدرس