🚀 جرب Zilliz Cloud، الـ Milvus المدارة بالكامل، مجاناً — تجربة أداء أسرع بـ 10 أضعاف! جرب الآن>>

milvus-logo
LFAI
الصفحة الرئيسية
  • دليل المستخدم
  • Home
  • Docs
  • دليل المستخدم

  • الفهارس

  • فهارس المتجهات

  • IVF_FLAT

IVF_FLAT

إن فهرس IVF_FLAT هو خوارزمية فهرسة يمكنها تحسين أداء البحث لمتجهات الفاصلة العائمة.

يعد هذا النوع من الفهرس مثاليًا لمجموعات البيانات واسعة النطاق التي تتطلب استجابات سريعة للاستعلام ودقة عالية، خاصةً عندما يمكن أن يؤدي تجميع مجموعة البيانات الخاصة بك إلى تقليل مساحة البحث وتوفر ذاكرة كافية لتخزين بيانات المجموعة.

نظرة عامة

يرمز المصطلح IVF_FLAT إلى الملف المقلوب المسطح (Inverted File Flat)، والذي يغلف النهج ثنائي الطبقات للفهرسة والبحث عن متجهات الفاصلة العائمة:

  • الملف المقلوب (IVF): يشير إلى تجميع مساحة المتجه إلى مناطق يمكن التحكم فيها باستخدام تجميع k-means. يتم تمثيل كل مجموعة بنقطة مركزية تعمل كنقطة مرجعية للمتجهات داخلها.
  • مسطح: يشير إلى أنه داخل كل مجموعة، يتم تخزين المتجهات في شكلها الأصلي (بنية مسطحة)، دون أي ضغط أو تكميم، لإجراء حسابات دقيقة للمسافات.

يوضّح الشكل التالي كيفية عملها:

ivf-flat-1.png ivf-flat-1 .png

تعمل طريقة الفهرسة هذه على تسريع عملية البحث، ولكنها تأتي مع عيب محتمل: قد لا يكون المرشح الذي تم العثور عليه كأقرب تضمين للاستعلام هو الأقرب بالضبط. يمكن أن يحدث هذا إذا كان أقرب تضمين إلى تضمين الاستعلام موجودًا في مجموعة مختلفة عن المجموعة المختارة بناءً على أقرب نقطة مركزية (انظر التصور أدناه).

ولمعالجة هذه المشكلة، يوفر IVF_FLAT معيارين فائقين يمكننا ضبطهما:

  • nlist: تحديد عدد الأقسام المراد إنشاؤها باستخدام خوارزمية k-means.
  • nprobe: يحدد عدد الأقسام التي يجب أخذها في الاعتبار أثناء البحث عن المرشحين.

الآن إذا قمنا بتعيين nprobe إلى 3 بدلاً من 1، نحصل على النتيجة التالية:

ivf-flat-2.png ivf-flat-2 .png

من خلال زيادة القيمة nprobe ، يمكنك تضمين المزيد من الأقسام في البحث، مما قد يساعد في ضمان عدم تفويت أقرب تضمين للاستعلام، حتى لو كان موجودًا في قسم مختلف. ومع ذلك، فإن هذا يأتي على حساب زيادة وقت البحث، حيث يجب تقييم المزيد من المرشحين. لمزيد من المعلومات حول ضبط معلمات الفهرس، راجع بارامز الفهرس.

إنشاء فهرس

لإنشاء فهرس IVF_FLAT على حقل متجه في ميلفوس، استخدم الطريقة add_index() ، مع تحديد index_type و metric_type ومعلمات إضافية للفهرس.

from pymilvus import MilvusClient

# Prepare index building params
index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="your_vector_field_name", # Name of the vector field to be indexed
    index_type="IVF_FLAT", # Type of the index to create
    index_name="vector_index", # Name of the index to create
    metric_type="L2", # Metric type used to measure similarity
    params={
        "nlist": 64, # Number of clusters for the index
    } # Index building params
)

في هذا التكوين

  • index_type: نوع الفهرس المراد إنشاؤه. في هذا المثال، اضبط القيمة على IVF_FLAT.

  • metric_type: الطريقة المستخدمة لحساب المسافة بين المتجهات. تتضمن القيم المدعومة COSINE و L2 و IP. لمزيد من التفاصيل، راجع أنواع المقاييس.

  • params: : خيارات التكوين الإضافية لبناء الفهرس.

    • nlist: عدد المجموعات لتقسيم مجموعة البيانات.

    لمعرفة المزيد من معلمات البناء المتوفرة للفهرس IVF_FLAT ، راجع بارامز بناء الفهرس.

بمجرد تكوين معلمات الفهرس، يمكنك إنشاء الفهرس باستخدام الأسلوب create_index() مباشرةً أو تمرير بارامترات الفهرس في الأسلوب create_collection. لمزيد من التفاصيل، راجع إنشاء مجموعة.

البحث في الفهرس

بمجرد إنشاء الفهرس وإدراج الكيانات، يمكنك إجراء عمليات بحث عن التشابه على الفهرس.

search_params = {
    "params": {
        "nprobe": 10, # Number of clusters to search
    }
}

res = MilvusClient.search(
    collection_name="your_collection_name", # Collection name
    data=[[0.1, 0.2, 0.3, 0.4, 0.5]],  # Query vector
    limit=3,  # TopK results to return
    search_params=search_params
)

في هذا التكوين

  • params: خيارات التكوين الإضافية للبحث على الفهرس.

    • nprobe: عدد المجموعات المطلوب البحث عنها.

    لمعرفة المزيد من معلمات البحث المتوفرة للفهرس IVF_FLAT ، راجع باراميات البحث الخاصة بالفهرس.

بارامترات الفهرس

يقدم هذا القسم نظرة عامة على المعلمات المستخدمة لبناء الفهرس وإجراء عمليات البحث على الفهرس.

معلمات بناء الفهرس

يسرد الجدول التالي المعلمات التي يمكن تكوينها في params عند إنشاء فهرس.

المعلمةالوصفنطاق القيمةاقتراح الضبط
nlistعدد العناقيد المراد إنشاؤها باستخدام خوارزمية k-means أثناء بناء الفهرس، حيث تخزن كل عنقود، ممثلة بنقطة مركزية، قائمة من المتجهات. تؤدي زيادة هذه المعلمة إلى تقليل عدد المتجهات في كل مجموعة، مما يؤدي إلى إنشاء أقسام أصغر وأكثر تركيزًا.النوع: عدد صحيح
المدى: [1, 65536]
القيمة الافتراضية: 128
تعمل القيم الأكبر nlist على تحسين الاستدعاء من خلال إنشاء مجموعات أكثر دقة ولكنها تزيد من وقت بناء الفهرس. قم بالتحسين بناءً على حجم مجموعة البيانات والموارد المتاحة، وفي معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [32, 4096].

بارامترات البحث الخاصة بالفهرس

يسرد الجدول التالي المعلمات التي يمكن تكوينها في search_params.params عند البحث في الفهرس.

المعلمةالوصفنطاق القيمةاقتراح الضبط
nprobeعدد المجموعات للبحث عن المرشحين، تسمح القيم الأعلى بالبحث عن المزيد من المجموعات، مما يحسن الاستدعاء من خلال توسيع نطاق البحث ولكن على حساب زيادة زمن انتقال الاستعلام.النوع: عدد صحيح
المدى: [1, nlist]
القيمة الافتراضية: 8
تؤدي زيادة هذه القيمة إلى تحسين الاستدعاء ولكنها قد تؤدي إلى إبطاء البحث.قم بتعيين nprobe بشكل متناسب مع nlist لتحقيق التوازن بين السرعة والدقة.
في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [1, nlist].

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

ابدأ
التعليقات

هل كانت هذه الصفحة مفيدة؟