• نبذة عن ميلفوس
  • ابدأ الآن
  • المفاهيم
  • دليل المستخدم
  • استيراد البيانات
  • أدوات الذكاء الاصطناعي
  • دليل الإدارة
  • الأدوات
  • عمليات الدمج
  • البرامج التعليمية
  • الأسئلة الشائعة
  • API Reference

SCANN

مدعومًا بمكتبة ScaNN من Google، تم تصميم فهرس SCANN في Milvus لمعالجة تحديات البحث عن التشابه المتجهي المتدرج، وتحقيق التوازن بين السرعة والدقة، حتى على مجموعات البيانات الكبيرة التي عادةً ما تشكل تحديات لمعظم خوارزميات البحث.

نظرة عامة

تم تصميم ScaNN لحل أحد أكبر التحديات في البحث عن المتجهات: العثور بكفاءة على المتجهات الأكثر صلة في المساحات عالية الأبعاد، حتى مع نمو مجموعات البيانات بشكل أكبر وأكثر تعقيدًا. تقسم بنيتها عملية البحث عن المتجهات إلى مراحل متميزة:

Scann المسح

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

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

  3. إعادة الترتيب: مرحلة إعادة الترتيب هي الخطوة النهائية، حيث تقوم ScaNN بضبط نتائج البحث من مرحلتي التقسيم والتكميم. تطبق عملية إعادة الترتيب هذه عمليات حسابية دقيقة للمنتج الداخلي على أفضل المتجهات المرشحة، مما يضمن دقة النتائج النهائية بدقة عالية. تُعد إعادة التصنيف أمرًا بالغ الأهمية في محركات التوصية عالية السرعة أو تطبيقات البحث عن الصور حيث تعمل التصفية الأولية والتجميع كطبقة خشنة، وتضمن المرحلة النهائية إعادة النتائج الأكثر صلة فقط للمستخدم.

يتم التحكم في أداء SCANN من خلال معلمتين رئيسيتين تتيحان لك ضبط التوازن بين السرعة والدقة:

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

  • reorder_k: يحدد عدد المرشحين الذين يتم تنقيحهم أثناء مرحلة إعادة الترتيب النهائية. تعمل القيم الأعلى على تحسين الدقة ولكنها تزيد من زمن انتقال البحث.

للحصول على إرشادات مفصلة حول تحسين هذه المعلمات لحالة الاستخدام الخاصة بك، راجع بارامترات الفهرس.

إنشاء فهرس

لإنشاء فهرس SCANN على حقل متجه في ميلفوس، استخدم الطريقة 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="SCANN", # 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={
        "with_raw_data": True, # Whether to hold raw data
    } # Index building params
)

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

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

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

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

    • with_raw_data: ما إذا كان سيتم تخزين بيانات المتجه الأصلية إلى جانب التمثيل الكمي.

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

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

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

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

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

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

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

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

    • reorder_k: عدد المرشحين المطلوب تنقيحهم أثناء مرحلة إعادة الترتيب.
    • nprobe: عدد المجموعات المطلوب البحث عنها.

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

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

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

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

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

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

nlist

عدد وحدات المجموعة

[1, 65536]

تزيد القائمة النونية الأعلى من كفاءة التقليم وعادةً ما تسرّع البحث الخشن، لكن يمكن أن تصبح الأقسام صغيرة جدًا، مما قد يقلل من التذكر؛ بينما تقوم القائمة النونية الأقل بمسح مجموعات أكبر، مما يحسن التذكر لكن يبطئ البحث.

with_raw_data

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

النوع: منطقية

النطاق: true, false

القيمة الافتراضية: true

تعيين إلى true للحصول على دقة بحث أعلى وعندما لا تكون مساحة التخزين مصدر قلق أساسي. تتيح بيانات المتجه الأصلية إجراء حسابات تشابه أكثر دقة أثناء إعادة الترتيب.

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

موصى به: استخدم true لتطبيقات الإنتاج حيث تكون الدقة أمرًا بالغ الأهمية.

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

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

المعلمة

الوصف

نطاق القيمة

اقتراح الضبط

reorder_k

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

النوع: عدد صحيح

المدى: [1، int_max]

القيمة الافتراضية: لا يوجد

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

ضع في اعتبارك زيادة reorder_k عندما يكون تحقيق استرجاع عالٍ أمرًا بالغ الأهمية وتكون سرعة البحث أقل أهمية. نقطة البداية الجيدة هي 2-5 أضعاف المطلوب limit (أعلى عدد من النتائج المطلوب إرجاعها).

ضع في اعتبارك تقليل reorder_k لإعطاء الأولوية لعمليات البحث الأسرع، خاصةً في السيناريوهات التي يكون فيها الانخفاض الطفيف في الدقة مقبولاً.

في معظم الحالات، نوصيك بتعيين قيمة ضمن هذا النطاق:[الحد، الحد * 5].

nprobe

عدد المجموعات للبحث عن المرشحين.

النوع: عدد صحيح

النطاق: [1, nlist]

القيمة الافتراضية: 8

تسمح القيم الأعلى بالبحث في المزيد من المجموعات، مما يحسن الاستدعاء من خلال توسيع نطاق البحث ولكن على حساب زيادة زمن وصول الاستعلام.

قم بتعيين nprobe بشكل متناسب مع nlist لتحقيق التوازن بين السرعة والدقة.

في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [1, nlist].

جرب Managed Milvus مجاناً

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

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

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