في هذا الدرس، ستقوم ببناء قاعدة بيانات متجهات عالية الأداء باستخدام Milvus و FAISS لتشغيل التطبيقات الذكية بالبحث الدلالي.
المتطلبات الأساسية
- Python ٣.١٠ أو أعلى
- Milvus v٢.٢.٠ أو أعلى
- FAISS v١.١٣.٠
- Docker v٢٠.١٠ أو أعلى
- معرفة أساسية بـ Docker وبرمجة Python
ما الذي نبنيه
في هذا الدرس الشامل، سنرشدك خلال عملية إعداد قاعدة بيانات متجهات قابلة للتوسع باستخدام Milvus و FAISS. سيعمل هذا النظام كعمود فقري للتطبيقات الذكية التي تتطلب بحث دلالي فعال واسترجاع البيانات عالية الأبعاد مثل النصوص والصور والصوت.
سيمكنك المشروع المكتمل من معالجة الاستفسارات عن طريق تحويلها إلى تضمينات متجهية، وإجراء عمليات البحث عن التشابه، واسترجاع النتائج الأكثر صلة في أجزاء من الثانية. هذا الإعداد مثالي للتطبيقات مثل محركات التوصية، واكتشاف الشذوذ، والدردشة الآلية في الوقت الحقيقي.
الإعداد والتثبيت
لبدء العمل، نحتاج إلى تثبيت وتكوين Milvus، قاعدة بيانات متجهات مفتوحة المصدر شهيرة، إلى جانب FAISS، مكتبة للبحث عن التشابه وتكتيل المتجهات الكثيفة بكفاءة. سنستخدم Docker لتبسيط عملية النشر.
docker pull milvusdb/milvus:v2.2.0
docker run -d --name milvus -p 19530:19530 milvusdb/milvus:v2.2.0بعد ذلك، قم بتثبيت عميل Python لـ Milvus و FAISS باستخدام pip:
pip install pymilvus==2.2.0
pip install faiss-cpu==1.13.0سنحتاج أيضًا إلى إعداد بعض متغيرات البيئة لإدارة التكوينات:
export MILVUS_HOST=localhost
export MILVUS_PORT=19530الخطوة ١: تهيئة عميل Milvus
الخطوة الأولى في مشروعنا هي تهيئة عميل Milvus، مما سيمكننا من التفاعل مع قاعدة بيانات المتجهات. يتضمن ذلك الاتصال بخادم Milvus باستخدام المضيف والمنفذ المحددين في متغيرات البيئة.
from pymilvus import connections
# Initialize Milvus client
connections.connect("default", host="localhost", port="19530")هنا، نقوم باستيراد وحدة الاتصالات من pymilvus ونستخدم دالة الاتصال لإنشاء اتصال بخادم Milvus. الحجة “default” هي الاسم المستعار لهذا الاتصال، وتشير إلى المضيف والمنفذ حيث يعمل Milvus.
الخطوة ٢: إنشاء مجموعة في Milvus
بعد ذلك، نحتاج إلى إنشاء مجموعة في Milvus لتخزين بيانات المتجهات الخاصة بنا. تشبه المجموعة في Milvus الجدول في قاعدة البيانات التقليدية وتُعرّف بواسطة مخطط يحدد أبعاد المتجهات.
from pymilvus import Collection, FieldSchema, DataType
# Define schema for the collection
fields = [
FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True),
FieldSchema(name="embedding", dtype=DataType.FLOAT_VECTOR, dim=128)
]
# Create collection
collection = Collection(name="example_collection", schema=fields)في هذه الخطوة، نقوم بتعريف مخطط المجموعة مع حقلين: حقل معرف صحيح يعمل كمفتاح أساسي وحقل متجه عائم ذو ١٢٨ بعدًا لتخزين التضمينات. ثم نقوم بإنشاء المجموعة باستخدام هذا المخطط.
الخطوة ٣: فهرسة المتجهات باستخدام FAISS
لإجراء عمليات البحث عن التشابه بكفاءة، نحتاج إلى فهرسة المتجهات الخاصة بنا باستخدام FAISS. يوفر FAISS طرق فهرسة متنوعة؛ هنا، سنستخدم فهرس الملف المعكوس (IVF) مع التكميم المنتج (PQ) لتحقيق الأداء الأمثل.
import faiss
import numpy as np
# Create random vectors for demonstration
vectors = np.random.rand(1000, 128).astype('float32')
# Create FAISS index
index = faiss.index_factory(128, "IVF10,PQ4")
faiss.normalize_L2(vectors)
index.train(vectors)
index.add(vectors)في هذا الكود، نقوم بإنشاء مجموعة من المتجهات العشوائية ذات ١٢٨ بعدًا ونقوم بتطبيعها باستخدام تطبيع L2 الخاص بـ FAISS. ثم نقوم بتهيئة فهرس IVF10,PQ4، وتدريبه باستخدام المتجهات الخاصة بنا، وإضافة المتجهات إلى الفهرس.
اختبار تنفيذك
للتحقق من أن إعدادنا يعمل بشكل صحيح، يمكننا إجراء استعلام بسيط للعثور على أقرب المتجهات إلى متجه استعلام معين. سيتحقق هذا الاختبار من تكاملات Milvus و FAISS.
# Query vector
query_vector = np.random.rand(1, 128).astype('float32')
faiss.normalize_L2(query_vector)
# Search in FAISS index
D, I = index.search(query_vector, k=5)
print("Nearest neighbors:", I)يقوم كود الاختبار هذا بإنشاء متجه استعلام عشوائي، وتطبيعه، والبحث عن أقرب ٥ جيران في فهرس FAISS. تُطبع مؤشرات المتجهات الأقرب كإخراج.
ما الذي تبنيه بعد ذلك
بمجرد أن يكون لديك إعداد قاعدة بيانات متجهات أساسي، فكر في توسيع مشروعك بالتحسينات التالية:
- دمج تصفية البيانات الوصفية في Milvus لاسترجاع النتائج ذات الصلة السياقية بناءً على سمات إضافية مثل الفئة أو الطابع الزمني.
- تنفيذ واجهة ويب باستخدام Next.js للسماح للمستخدمين بالتفاعل مع قاعدة بيانات المتجهات الخاصة بك من خلال واجهة أمامية حديثة.
- تحسين الأداء من خلال تجربة استراتيجيات فهرسة FAISS المختلفة وضبط المعلمات لمجموعة البيانات وحالة الاستخدام الخاصة بك.
في سياق دول مجلس التعاون الخليجي والشرق الأوسط، يمكن أن تكون قواعد البيانات المتجهية هذه مفيدة في قطاعات مثل النفط والغاز للصيانة التنبؤية، وفي المالية لاكتشاف الاحتيال، وفي مشاريع المدن الذكية تحت مبادرات مثل رؤية السعودية ٢٠٣٠.