قواعد بيانات المتجهات
Vector Databases
تخزين التضمينات والبحث عن الأقرب بسرعة: البحث التقريبي وHNSW والفهارس والتصفية.
لماذا قاعدة متجهات؟
عند وجود آلاف المقاطع يكفي حساب التشابه مع الكل بـ 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، وقواعد متخصصة. معايير الاختيار: الحجم، وزمن الاستجابة، والتصفية بالبيانات الوصفية، والتحديث، والتكلفة.
أسئلة مراجعة
-
لماذا لا نستخدم البحث الدقيق مع مليار متجه؟
لأن مقارنة الاستعلام بكل المتجهات بطيئة ومكلفة؛ الفهارس التقريبية تقلل الزمن كثيراً مقابل خسارة صغيرة في الدقة.
-
ما المقايضة الأساسية في معاملات HNSW؟
زيادة قيم مثل ef تحسن دقة الاسترجاع على حساب الزمن والذاكرة.
المصادر والمراجع
إكمال الدرس
أكملت كل دروس المسار! يمكنك الآن طلب شهادة إكمال المسار.
اطلب الشهادة