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

IVF_SQ8

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

نظرة عامة

يعتمد فهرس IVF_SQ8 على مكونين رئيسيين:

  • ملف مقلوب (IVF): ينظّم البيانات في مجموعات، مما يمكّن خوارزمية البحث من التركيز فقط على المجموعات الفرعية الأكثر صلة من المتجهات.

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

IVF

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

إليك كيفية عملها:

  1. التجميع: يتم تقسيم مجموعة البيانات المتجهة إلى عدد محدد من العناقيد باستخدام خوارزمية تجميع مثل k-means. تحتوي كل مجموعة على مركزية (متجه تمثيلي للمجموعة).

  2. التعيين: يتم تعيين كل متجه إلى المجموعة التي يكون متجهها المركزي الأقرب إليه.

  3. الفهرس المقلوب: يتم إنشاء فهرس يعيّن مركز كل مجموعة عنقودية إلى قائمة المتجهات المعينة لتلك المجموعة.

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

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

SQ8

التكميم الكمي القياسي (SQ) هي تقنية تُستخدم لتقليل حجم المتجهات عالية الأبعاد عن طريق استبدال قيمها بتمثيلات أصغر وأكثر إحكاما. يستخدم متغير SQ8 الأعداد الصحيحة 8 بت بدلاً من أرقام الفاصلة العائمة النموذجية 32 بت لتخزين كل قيمة بُعد من المتجه. هذا يقلل بشكل كبير من حجم الذاكرة المطلوبة لتخزين البيانات.

إليك كيفية عمل SQ8:

  1. تحديد النطاق: أولاً، تحديد القيم الدنيا والقصوى داخل المتجه. يحدد هذا النطاق حدود التكميم.

  2. التطبيع: تطبيع قيم المتجه إلى نطاق بين 0 و1 باستخدام الصيغة:

    normalized_value=valueminmaxmin\text{normalized\_value} = \frac{\text{value} - \text{min}}{\text{max} - \text{min}}

    يضمن ذلك تعيين جميع القيم بشكل متناسب داخل نطاق موحد، وإعدادها للضغط.

  3. ضغط 8 بت: اضرب القيمة المعيارية في 255 (القيمة القصوى لعدد صحيح 8 بت) وقم بتقريب الناتج إلى أقرب عدد صحيح. هذا يضغط كل قيمة بشكل فعال إلى تمثيل 8 بت.

لنفترض أن لديك قيمة بُعد 1.2، مع قيمة صغرى -1.7 وقيمة قصوى 2.3. يوضّح الشكل التالي كيفية تطبيق SQ8 لتحويل قيمة عوامة32 إلى عدد صحيح int8.

Ivf Sq8 Ivf Sq8

IVF + SQ8

يجمع فهرس IVF_SQ8 بين IVF و SQ8 لإجراء عمليات بحث التشابه بكفاءة:

  1. يضيّق IVF نطاق البحث: يتم تقسيم مجموعة البيانات إلى مجموعات، وعندما يتم إصدار استعلام، يقارن IVF أولاً الاستعلام بمراكز المجموعات، ويختار المجموعات الأكثر صلة.

  2. يعمل SQ8 على تسريع عمليات حساب المسافة: داخل المجموعات المختارة، يقوم SQ8 بضغط المتجهات إلى أعداد صحيحة 8 بت، مما يقلل من استخدام الذاكرة ويسرّع من عمليات حساب المسافة.

باستخدام IVF لتركيز البحث و SQ8 لتسريع العمليات الحسابية، يحقق IVF_SQ8 كلاً من أوقات البحث السريعة وكفاءة الذاكرة.

بناء الفهرس

لبناء فهرس IVF_SQ8 على حقل متجه في ميلفوس، استخدم طريقة 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_SQ8", # 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 to create using the k-means algorithm during index building
    } # Index building params
)

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

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

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

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

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

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

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

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

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

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

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: خيارات التكوين الإضافية للبحث على الفهرس.

    • nprobe: عدد المجموعات للبحث عن الكيانات المرشحة.

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

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

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

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

يسرد الجدول التالي المعلمات التي يمكن تكوينها في 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 أضعاف.

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

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