IVF_SQ8
إن فهرس IVF_SQ8 هو خوارزمية فهرسة قائمة على التكميم مصممة لمعالجة تحديات البحث عن التشابه على نطاق واسع. يحقق هذا النوع من الفهرس عمليات بحث أسرع مع بصمة ذاكرة أصغر بكثير مقارنةً بطرق البحث الشاملة.
نظرة عامة
يعتمد فهرس IVF_SQ8 على مكونين رئيسيين:
ملف مقلوب (IVF): ينظّم البيانات في مجموعات، مما يمكّن خوارزمية البحث من التركيز فقط على المجموعات الفرعية الأكثر صلة من المتجهات.
التكميم الكمي القياسي (SQ8): يضغط المتجهات إلى شكل أكثر إحكامًا، مما يقلل بشكل كبير من استخدام الذاكرة مع الحفاظ على دقة كافية لحسابات التشابه السريعة.
IVF
يشبه IVF إنشاء فهرس في كتاب. بدلاً من مسح كل صفحة (أو، في حالتنا، كل متجه)، يمكنك البحث عن كلمات رئيسية محددة (مجموعات) في الفهرس للعثور بسرعة على الصفحات (المتجهات) ذات الصلة. في السيناريو الخاص بنا، يتم تجميع المتجهات في مجموعات، وستقوم الخوارزمية بالبحث ضمن مجموعات قليلة قريبة من متجه الاستعلام.
إليك كيفية عملها:
التجميع: يتم تقسيم مجموعة البيانات المتجهة إلى عدد محدد من العناقيد باستخدام خوارزمية تجميع مثل k-means. تحتوي كل مجموعة على مركزية (متجه تمثيلي للمجموعة).
التعيين: يتم تعيين كل متجه إلى المجموعة التي يكون متجهها المركزي الأقرب إليه.
الفهرس المقلوب: يتم إنشاء فهرس يعيّن مركز كل مجموعة عنقودية إلى قائمة المتجهات المعينة لتلك المجموعة.
بحث: عند البحث عن أقرب الجيران، تقارن خوارزمية البحث متجه الاستعلام الخاص بك مع مراكز المجموعات العنقودية وتختار المجموعة (المجموعات) الواعدة. ثم يتم تضييق نطاق البحث إلى المتجهات داخل تلك المجموعات المختارة.
لمعرفة المزيد حول تفاصيلها الفنية، راجع IVF_FLAT.
SQ8
التكميم الكمي القياسي (SQ) هي تقنية تُستخدم لتقليل حجم المتجهات عالية الأبعاد عن طريق استبدال قيمها بتمثيلات أصغر وأكثر إحكاما. يستخدم متغير SQ8 الأعداد الصحيحة 8 بت بدلاً من أرقام الفاصلة العائمة النموذجية 32 بت لتخزين كل قيمة بُعد من المتجه. هذا يقلل بشكل كبير من حجم الذاكرة المطلوبة لتخزين البيانات.
إليك كيفية عمل SQ8:
تحديد النطاق: أولاً، تحديد القيم الدنيا والقصوى داخل المتجه. يحدد هذا النطاق حدود التكميم.
التطبيع: تطبيع قيم المتجه إلى نطاق بين 0 و1 باستخدام الصيغة:
يضمن ذلك تعيين جميع القيم بشكل متناسب داخل نطاق موحد، وإعدادها للضغط.
ضغط 8 بت: اضرب القيمة المعيارية في 255 (القيمة القصوى لعدد صحيح 8 بت) وقم بتقريب الناتج إلى أقرب عدد صحيح. هذا يضغط كل قيمة بشكل فعال إلى تمثيل 8 بت.
لنفترض أن لديك قيمة بُعد 1.2، مع قيمة صغرى -1.7 وقيمة قصوى 2.3. يوضّح الشكل التالي كيفية تطبيق SQ8 لتحويل قيمة عوامة32 إلى عدد صحيح int8.
Ivf Sq8
IVF + SQ8
يجمع فهرس IVF_SQ8 بين IVF و SQ8 لإجراء عمليات بحث التشابه بكفاءة:
يضيّق IVF نطاق البحث: يتم تقسيم مجموعة البيانات إلى مجموعات، وعندما يتم إصدار استعلام، يقارن IVF أولاً الاستعلام بمراكز المجموعات، ويختار المجموعات الأكثر صلة.
يعمل 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 عند إنشاء فهرس.
المعلمة |
الوصف |
نطاق القيمة |
اقتراح الضبط |
|
|---|---|---|---|---|
عامل التجميع |
|
عدد المجموعات المراد إنشاؤها باستخدام خوارزمية k-means أثناء بناء الفهرس. |
النوع: عدد صحيح المدى: [1, 65536] القيمة الافتراضية: |
تعمل القيم الأكبر |
بارامترات البحث الخاصة بالفهرس
يسرد الجدول التالي المعلمات التي يمكن تكوينها في search_params.params عند البحث في الفهرس.
المعلمة |
الوصف |
نطاق القيمة |
اقتراح الضبط |
|
|---|---|---|---|---|
عامل التهيئة |
|
عدد المجموعات للبحث عن المرشحين. |
النوع: عدد صحيح المدى: [1, nlist] القيمة الافتراضية: |
تسمح القيم الأعلى بالبحث في عدد أكبر من المجموعات، مما يحسّن الاستدعاء من خلال توسيع نطاق البحث ولكن على حساب زيادة زمن انتقال الاستعلام. قم بتعيين في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [1, nlist]. |