نفس البيانات، نفس الاستعلام — لكن استراتيجية بحث مختلفة. اسحب نقطة الاستعلام، واضبطها nprobe، ثم اضغط على «تشغيل البحث» (Run Search ) لترى كيف يتخطى «البحث المتسارع» ( IVF ) معظم البيانات.
nprobe »: ستضيء هذهالمجموعات. يتم تخطي جميع المجموعات الأخرى بالكامل.المقايضة: كلما nprobe → المزيد من المجموعات التي تم فحصها → استرجاع أعلى لكن أبطأ. أصغر nprobe → أسرع، لكن قد تفوتك العناصر المجاورة الحقيقية الموجودة في المجموعات غير الممسوحة ضوئيًا. جرب ضبط nprobe = 1 وسحب الاستعلام بالقرب من حدود المجموعة لترى انخفاض دقة الاسترجاع.
IVF (الملف المقلوب) هو فهرس تقريبي لأقرب الجيران قائم على التجميع. في وقت الإنشاء، تقوم طريقة k-means بتقسيم جميع المتجهات إلى nlist مجموعات، يمثل كل منها مركزه. عند إجراء الاستعلام، يقارن البحث أولاً الاستعلام بمراكز المجموعات فقط، ويختار أقرب nprobe المجموعات، ويقوم بمسح المتجهات الموجودة داخلها فقط — متخطياً كل شيء آخر.
Milvus يقدم عدة متغيرات لـ « IVF » (البحث المتجه الشامل) التي تضحي بالذاكرة مقابل الدقة: IVF_FLAT يخزن المتجهات الخام (الأكثر دقة)، IVF_SQ8 يضغط كل بُعد إلى بايت واحد (استهلاك ذاكرة أقل بحوالي 4 أضعاف، وتكلفة استرجاع صغيرة)، و IVF_PQ تطبق تكمية المنتج للحصول على ضغط أعلى بكثير مع تكلفة استرجاع أكبر.
nlist (وقت البناء): عدد مجموعات k-means. نقطة البداية الشائعة هي 4 × sqrt(N) لـ N متجهات. كلما زاد عدد المجموعات، أصبح حجم كل مجموعة أصغر — مما يؤدي إلى عمليات مسح أسرع، لكن مسح المركز يتطلب تكلفة أكبر وتزداد تأثيرات الحدود.nprobe (وقت الاستعلام): عدد المجموعات التي يجب مسحها لكل استعلام. هذا هو زر التحكم الرئيسي في الاسترجاع/الكمون — وهو بالضبط ما يتحكم فيه شريط التمرير أعلاه. ابدأ من حوالي nlist / 16 وزيده حتى يصل الاسترجاع إلى الهدف المطلوب.IVF يتم إنشاؤه بسرعة، ويستهلك مساحة صغيرة من الذاكرة بالإضافة إلى المتجهات، ويسهل فهمه — ولكن عند نفس هدف الاسترجاع، عادةً ما يجيب HNSW على الاستعلامات بشكل أسرع في الذاكرة. اختر IVF عندما تعيد إنشاء الفهارس بشكل متكرر (يكون سرعة الإنشاء مهمة)، أو عندما تكون الذاكرة محدودة (IVF_SQ8/IVF_PQ)، أو عندما تريد سلوك مسح يمكن التنبؤ به وقابل للضبط. اختر HNSW للحصول على أقل زمن انتقال للاستعلامات في الذاكرة، و DiskANN عندما لا تتسع RAM للمتجهات على الإطلاق.
تقوم المجموعات الثلاث بتجميع المتجهات بنفس الطريقة؛ لكنها تختلف في كيفية تخزين المتجهات داخل المجموعات. « IVF_FLAT » تحتفظ بالمتجهات العائمة الخام (أفضل استرجاع). « IVF_SQ8 » تقوم بتكمية كل بُعد إلى 8 بتات، مما يقلل الذاكرة بنحو 4 أضعاف مع خسارة طفيفة في الاسترجاع. « IVF_PQ » تستبدل المتجهات برموز قصيرة لتكمية المنتج من أجل أعلى ضغط وأكبر خسارة في الاسترجاع.
هناك قاعدة عامة تقضي بأن تكون قيمة « nlist » تساوي 4 × sqrt(N) لـ N متجهات، ثم قم بضبط « nprobe » في وقت الاستعلام. كلما زاد « nprobe »، زاد عدد المجموعات التي يتم مسحها: كلما زادت دقة الاسترجاع، زاد زمن الاستجابة. ابدأ بقيمة تقارب nlist/16 وزدها حتى تصل دقة الاسترجاع لمجموعة الاستعلامات المحتجزة إلى الهدف المطلوب.
بسبب حدود المجموعات. إذا وقع الاستعلام بالقرب من حافة إحدى المجموعات، فقد يكون بعض جيرانه الحقيقيين موجودين في مجموعة مجاورة لم تكن ضمن المجموعات التي تم مسحها باستخدام « nprobe ». يمكنك ملاحظة ذلك في التصور عن طريق سحب نقطة الاستعلام بالقرب من حدود ذات قيمة « nprobe » تساوي 1.
عند نفس دقة الاسترجاع، عادةً ما يكون « HNSW » أسرع في البحث داخل الذاكرة، لكنه يستهلك ذاكرة أكبر ويستغرق وقتًا أطول في الإنشاء. يتم إنشاء « IVF » بسرعة ويتوافق جيدًا مع التكمية (SQ8/PQ) عندما تكون الذاكرة محدودة. بالنسبة لمجموعات البيانات التي تتجاوز RAM تمامًا، فكر في استخدام « DiskANN » بدلاً من ذلك.
لمزيد من التفاصيل: اقرأ وثائق «IVF_FLAT » (معلمات الفهرس) لمعرفة معلمات الفهرس، أو راجع «Index Explained» (شرح الفهرس) للحصول على دليل القرار الكامل.
شاهد البحث في الرسم البياني متعدد الطبقات خطوة بخطوة — بدءًا من القفزات السريعة وصولًا إلى التنقلات المحلية.
انظر كيف يتيح لك PQ-in-RAM + full-vectors-on-SSD البحث في مجموعات بيانات بمليارات السجلات على جهاز كمبيوتر محمول.
اسحب نقطة استعلام وقم بالتبديل بين « L2 » و«Cosine» و« IP » لترى كيف يتغير «الأقرب».