Vector search في Python من الصفر: embeddings والبحث بالتشابه
إن بناء نظام بحث قائم على التشابه المتجهي أسهل مما يبدو. تعرّف على كيفية إنشاء vector search engine في Python باستخدام embeddings وحساب cosine similarity ومنطق

البحث الموجه (Vector Search) — هو طريقة بحث عن المعنى الدلالي، وليس عن التطابق الدقيق للكلمات الأساسية. بدلاً من البحث التقليدي، نحول البيانات إلى تمثيل متجه (embeddings) ونبحث عن المتجهات الأكثر تشابهاً في فضاء عالي الأبعاد. هذا هو أساس أنظمة RAG، والبحث الدلالي، وأنظمة التوصيات، والتطبيقات الحديثة للذكاء الاصطناعي.
ما هي التضمينات والتشابه
التضمينات هي تمثيلات رقمية للنص على شكل مصفوفة تتراوح بين 300 و 1500+ أرقام. العبارة "القط يجلس على الأريكة" و "القط يستريح على الكرسي" ستحتوي على تضمينات قريبة من بعضها البعض في الفضاء المتجه، على الرغم من أن الكلمات المستخدمة مختلفة تماماً. لقياس المسافة بين المتجهات، يتم استخدام تشابه جيب التمام (cosine similarity) — فهو يوضح الزاوية بين متجهين. تتراوح القيمة من 0 (اختلاف كامل) إلى 1 (تطابق تام)، مما يسهل ترتيب نتائج البحث.
المكونات الأساسية للبحث الموجه
يتكون محرك البحث الموجه من عدة أجزاء حرجة، كل منها مهم للتشغيل الصحيح:
- مولد التضمينات — يحول النص إلى متجه (يستخدم OpenAI و HuggingFace و SentenceTransformers)
- تخزين المتجهات — يحفظ التضمينات (في الذاكرة أو SQLite أو قواعس بيانات متخصصة مثل Pinecone و Weaviate)
- دالة التشابه — تحسب المسافة بين المتجهات (جيب التمام أو المسافة الإقليدية أو الضرب العددي)
- منطق الاسترجاع — يجد أفضل K نتائج متشابهة ويصنفها حسب الصلة
- الفهرسة — تسرع البحث من خلال هياكل البيانات الهرمية
التنفيذ خطوة بخطوة في Python
في Python، يتم تنفيذ هذا بطريقة بسيطة نسبياً. أولاً، نختار نموذجاً لتوليد التضمينات — على سبيل المثال، SentenceTransformers من Hugging Face، الذي يعمل محلياً دون الحاجة إلى مفاتيح API. بعد ذلك، لكل مستند في مجموعتنا، نولد تضميناً وحفظه في بنية (على سبيل المثال، قاموس أو DataFrame). عندما يقوم المستخدم بإجراء استعلام، نولد تضميناً لسؤاله ونقارنه مع جميع التضمينات المخزنة. نحسب تشابه جيب التمام لكل مستند، ونصنف النتائج بترتيب تنازلي من التشابه، ونعيد أفضل 5 أو 10 مستندات الأكثر صلة. تستغرق العملية برمتها ميلي ثانية على مجموعات البيانات الصغيرة.
"البحث الموجه ليس سحراً، بل تطبيق الجبر الخطي البسيط مع التحسينات
لتحقيق السرعة."
التحسين والتوسع
على مجموعات البيانات الصغيرة (حتى 10K مستند)، يمكنك تخزين التضمينات مباشرة في الذاكرة أو في قاعدة بيانات عادية. لكن عند التوسع إلى ملايين المستندات، تحتاج إلى قواعس بيانات متجهة متخصصة (Pinecone و Weaviate و Milvus و Qdrant) مع فهرسة مدمجة للبحث السريع. تسمح الفهرسة بالبحث ليس من خلال التكرار الخطي لجميع المتجهات، بل من خلال الهياكل الهرمية (HNSW و IVF-PQ)، مما يعطي تسريعاً بمعامل 100-1000 مرة. اختيار نموذج التضمين حرج أيضاً — النماذج الأكثر قوة (على سبيل المثال، OpenAI text-embedding-3-large) توفر فهماً دلالياً أكثر دقة، لكنها أبطأ وأكثر تكلفة. للإنتاج، عادة ما يتم اختيار نماذج مضغوطة وقسمة محسنة تعمل محلياً.
ماذا يعني هذا
أصبح البحث الموجه معياراً صناعياً لتطبيقات الذكاء الاصطناعي. إذا كنت تبني روبوت محادثة بذاكرة، أو محرك بحث ذكي، أو نظام توصيات، أو تطبيق RAG، أو نظام كشف الانتحال — تحتاج إلى فهم البحث الموجه من الداخل. بدءاً من الصفر في Python، ستكتسب فهماً أساسياً لكيفية عمل قواعس البيانات الموجهة الحديثة ولماذا هي قوية جداً.