← العودة

FLAT مقارنة مع « IVF »: كيف يعمل «Inverted File Index»

نفس البيانات، نفس الاستعلام — لكن استراتيجية بحث مختلفة. اسحب نقطة الاستعلام، واضبطها nprobe، ثم اضغط على «تشغيل البحث» (Run Search ) لترى كيف يتخطى «البحث المتسارع» ( IVF ) معظم البيانات.

nprobe2
البحث في 2 من مجموعات 8
السرعة20ms
أقل = رسوم متحركة أسرع

FLAT — البحث الشامل

يقوم بمسح كل نقطة
المقارنات
200 / 200
الحالة
✓ تم
الاسترجاع
100%

IVF — الملف المعكوس

عمليات البحث في مجموعات « nprobe »
المقارنات
33 / 33
الحالة
✓ تم
الاسترجاع@5
100%

ما الذي يحدث؟

  1. مرحلة البناء (تم الانتهاء منها بالفعل): قامت خوارزمية K-means بتقسيم النقاط 200 إلى مجموعات 8. لكل مجموعة مركز (العلامات ×).
  2. الخطوة 1 — تقييم المراكز: تقوم « IVF » أولاً بحساب المسافة من الاستعلام إلى كل مركز. وهذا لا يتطلب سوى 8 مقارنة، بغض النظر عن حجم مجموعة البيانات.
  3. الخطوة 2 — اختر أقرب مجموعات « nprobe »: ستضيء هذهالمجموعات. يتم تخطي جميع المجموعات الأخرى بالكامل.
  4. الخطوة 3 — مسح النقاط داخل المجموعات المختارة: حوالي50 فقط من النقاط 200.

المقايضة: كلما nprobe → المزيد من المجموعات التي تم فحصها → استرجاع أعلى لكن أبطأ. أصغر nprobe → أسرع، لكن قد تفوتك العناصر المجاورة الحقيقية الموجودة في المجموعات غير الممسوحة ضوئيًا. جرب ضبط nprobe = 1 وسحب الاستعلام بالقرب من حدود المجموعة لترى انخفاض دقة الاسترجاع.

ما هو مؤشر « IVF »؟

IVF (الملف المقلوب) هو فهرس تقريبي لأقرب الجيران قائم على التجميع. في وقت الإنشاء، تقوم طريقة k-means بتقسيم جميع المتجهات إلى nlist مجموعات، يمثل كل منها مركزه. عند إجراء الاستعلام، يقارن البحث أولاً الاستعلام بمراكز المجموعات فقط، ويختار أقرب nprobe المجموعات، ويقوم بمسح المتجهات الموجودة داخلها فقط — متخطياً كل شيء آخر.

Milvus يقدم عدة متغيرات لـ « IVF » (البحث المتجه الشامل) التي تضحي بالذاكرة مقابل الدقة: IVF_FLAT يخزن المتجهات الخام (الأكثر دقة)، IVF_SQ8 يضغط كل بُعد إلى بايت واحد (استهلاك ذاكرة أقل بحوالي 4 أضعاف، وتكلفة استرجاع صغيرة)، و IVF_PQ تطبق تكمية المنتج للحصول على ضغط أعلى بكثير مع تكلفة استرجاع أكبر.

ضبط nlist و nprobe

  • nlist (وقت البناء): عدد مجموعات k-means. نقطة البداية الشائعة هي 4 × sqrt(N) لـ N متجهات. كلما زاد عدد المجموعات، أصبح حجم كل مجموعة أصغر — مما يؤدي إلى عمليات مسح أسرع، لكن مسح المركز يتطلب تكلفة أكبر وتزداد تأثيرات الحدود.
  • nprobe (وقت الاستعلام): عدد المجموعات التي يجب مسحها لكل استعلام. هذا هو زر التحكم الرئيسي في الاسترجاع/الكمون — وهو بالضبط ما يتحكم فيه شريط التمرير أعلاه. ابدأ من حوالي nlist / 16 وزيده حتى يصل الاسترجاع إلى الهدف المطلوب.
  • خيار البديل: ابدأ بـ « IVF_FLAT ». انتقل إلى « IVF_SQ8 » عندما تكون الذاكرة محدودة، وإلى « IVF_PQ » فقط عندما تكون مجموعة البيانات أكبر من أن تتسع لـ « SQ8 » — وتحقق من دقة الاسترجاع على بياناتك الخاصة بعد كل خطوة.

IVF vs HNSW vs DiskANN

IVF يتم إنشاؤه بسرعة، ويستهلك مساحة صغيرة من الذاكرة بالإضافة إلى المتجهات، ويسهل فهمه — ولكن عند نفس هدف الاسترجاع، عادةً ما يجيب HNSW على الاستعلامات بشكل أسرع في الذاكرة. اختر IVF عندما تعيد إنشاء الفهارس بشكل متكرر (يكون سرعة الإنشاء مهمة)، أو عندما تكون الذاكرة محدودة (IVF_SQ8/IVF_PQ)، أو عندما تريد سلوك مسح يمكن التنبؤ به وقابل للضبط. اختر HNSW للحصول على أقل زمن انتقال للاستعلامات في الذاكرة، و DiskANN عندما لا تتسع RAM للمتجهات على الإطلاق.

الأسئلة المتكررة

ما الفرق بين IVF_FLAT و IVF_SQ8 و IVF_PQ ؟

تقوم المجموعات الثلاث بتجميع المتجهات بنفس الطريقة؛ لكنها تختلف في كيفية تخزين المتجهات داخل المجموعات. « IVF_FLAT » تحتفظ بالمتجهات العائمة الخام (أفضل استرجاع). « IVF_SQ8 » تقوم بتكمية كل بُعد إلى 8 بتات، مما يقلل الذاكرة بنحو 4 أضعاف مع خسارة طفيفة في الاسترجاع. « IVF_PQ » تستبدل المتجهات برموز قصيرة لتكمية المنتج من أجل أعلى ضغط وأكبر خسارة في الاسترجاع.

كيف يجب أن أختار بين « nlist » و« nprobe »؟

هناك قاعدة عامة تقضي بأن تكون قيمة « nlist » تساوي 4 × sqrt(N) لـ N متجهات، ثم قم بضبط « nprobe » في وقت الاستعلام. كلما زاد « nprobe »، زاد عدد المجموعات التي يتم مسحها: كلما زادت دقة الاسترجاع، زاد زمن الاستجابة. ابدأ بقيمة تقارب nlist/16 وزدها حتى تصل دقة الاسترجاع لمجموعة الاستعلامات المحتجزة إلى الهدف المطلوب.

لماذا يفوت « IVF » بعض الجيران الأقرب الحقيقيين؟

بسبب حدود المجموعات. إذا وقع الاستعلام بالقرب من حافة إحدى المجموعات، فقد يكون بعض جيرانه الحقيقيين موجودين في مجموعة مجاورة لم تكن ضمن المجموعات التي تم مسحها باستخدام « nprobe ». يمكنك ملاحظة ذلك في التصور عن طريق سحب نقطة الاستعلام بالقرب من حدود ذات قيمة « nprobe » تساوي 1.

هل يجب أن أستخدم IVF أم HNSW ؟

عند نفس دقة الاسترجاع، عادةً ما يكون « HNSW » أسرع في البحث داخل الذاكرة، لكنه يستهلك ذاكرة أكبر ويستغرق وقتًا أطول في الإنشاء. يتم إنشاء « IVF » بسرعة ويتوافق جيدًا مع التكمية (SQ8/PQ) عندما تكون الذاكرة محدودة. بالنسبة لمجموعات البيانات التي تتجاوز RAM تمامًا، فكر في استخدام « DiskANN » بدلاً من ذلك.

لمزيد من التفاصيل: اقرأ وثائق «IVF_FLAT » (معلمات الفهرس) لمعرفة معلمات الفهرس، أو راجع «Index Explained» (شرح الفهرس) للحصول على دليل القرار الكامل.

استمر في الاستكشاف