IVF_PQ
إن فهرس IVF_PQ هو خوارزمية فهرسة قائمة على التكميم للبحث التقريبي عن أقرب جار في المساحات عالية الأبعاد. على الرغم من أنها ليست بنفس سرعة بعض الأساليب القائمة على الرسم البياني، إلا أن IVF_PQ غالبًا ما تتطلب ذاكرة أقل بكثير، مما يجعلها خيارًا عمليًا لمجموعات البيانات الكبيرة.
نظرة عامة
يرمز IVF_PQ إلى الملف المقلوب مع تحديد كمية المنتج، وهو نهج هجين يجمع بين الفهرسة والضغط من أجل البحث الفعال عن المتجهات واسترجاعها. وهو يستفيد من مكونين أساسيين: الملف المقلوب (IVF) والتكميم الكمي للمنتج (PQ).
IVF
يشبه IVF إنشاء فهرس في كتاب. بدلاً من مسح كل صفحة (أو، في حالتنا، كل متجه)، يمكنك البحث عن كلمات رئيسية محددة (مجموعات) في الفهرس للعثور بسرعة على الصفحات (المتجهات) ذات الصلة. في السيناريو الخاص بنا، يتم تجميع المتجهات في مجموعات، وستقوم الخوارزمية بالبحث ضمن مجموعات قليلة قريبة من متجه الاستعلام.
إليك كيفية عملها:
- التجميع: يتم تقسيم مجموعة البيانات المتجهة إلى عدد محدد من العناقيد باستخدام خوارزمية تجميع مثل k-means. تحتوي كل مجموعة على مركزية (متجه تمثيلي للمجموعة).
- التعيين: يتم تعيين كل متجه إلى المجموعة التي يكون متجهها المركزي الأقرب إليه.
- الفهرس المقلوب: يتم إنشاء فهرس يعيّن مركز كل مجموعة عنقودية إلى قائمة المتجهات المعينة لتلك المجموعة.
- بحث: عند البحث عن أقرب الجيران، تقارن خوارزمية البحث متجه الاستعلام الخاص بك مع مراكز المجموعات العنقودية وتختار المجموعة (المجموعات) الواعدة. ثم يتم تضييق نطاق البحث إلى المتجهات داخل تلك المجموعات المختارة.
لمعرفة المزيد حول تفاصيلها الفنية، راجع IVF_FLAT.
PQ
تكميمالمنتج (PQ) هي طريقة ضغط للمتجهات عالية الأبعاد تقلل بشكل كبير من متطلبات التخزين مع تمكين عمليات البحث عن التشابه السريع.
تتضمن عملية PQ هذه المراحل الرئيسية:
عملية PQ- 1
- تحلل الأبعاد: تبدأ الخوارزمية بتحليل كل متجه عالي الأبعاد إلى
m
متجهات فرعية متساوية الحجم. يحوّل هذا التحلل الفضاء الأصلي ذا الأبعاد D إلىm
فضاءات فرعية منفصلة، حيث يحتوي كل فضاء فرعي على أبعاد D/م. تتحكم المعلمةm
في دقة التحلل وتؤثر بشكل مباشر على نسبة الضغط. - توليد دفتر رموز الفضاء الفرعي: داخل كل فضاء فرعي، تطبق الخوارزمية تجميع k-means لتعلم مجموعة من المتجهات التمثيلية (مركزيات). وتشكل هذه المركزيات مجتمعةً كتاب رموز لهذا الفضاء الفرعي. يتم تحديد عدد المراكز في كل دفتر رموز بواسطة البارامتر
nbits
، حيث يحتوي كل دفتر رموز على 2^nbits من المراكز. على سبيل المثال، إذا كانnbits = 8
، سيحتوي كل دفتر رموز على 256 مركزاً. يتم تعيين فهرس فريد لكل مركزية معnbits
بت. - تكميمالمتجهات: بالنسبة لكل متجه فرعي في المتجه الأصلي، يحدد PQ أقرب نقطة مركزية له داخل الفضاء الفرعي المقابل باستخدام نوع مقياس معين. تقوم هذه العملية بفعالية بتعيين كل متجه فرعي إلى أقرب متجه تمثيلي له في دفتر الرموز. وبدلاً من تخزين إحداثيات المتجه الفرعي بالكامل، يتم الاحتفاظ فقط بفهرس المتجه المركزي المطابق.
- التمثيل المضغوط: يتألف التمثيل المضغوط النهائي من
m
مؤشر، واحد من كل فضاء فرعي، ويشار إليها مجتمعة برموز PQ. يقلل هذا الترميز من متطلبات التخزين من D × 32 بت (بافتراض أرقام الفاصلة العائمة 32 بت) إلى m × nbits بت، مما يحقق ضغطًا كبيرًا مع الحفاظ على القدرة على تقريب مسافات المتجهات.
لمزيد من التفاصيل حول ضبط المعلمات وتحسينها، راجع فهرس البارامترات.
مثال على الضغط
ضع في اعتبارك متجهًا بأبعاد D = 128 بعدًا باستخدام أرقام ذات فاصلة عائمة 32 بت. باستخدام معلمات PQ m = 64 (المتجهات الفرعية) و nbits = 8 (وبالتالي k = 2^8 = 256 مركزًا لكل مساحة فرعية)، يمكننا مقارنة متطلبات التخزين:
- المتجه الأصلي: 128 بُعدًا × 32 بت = 4096 بت
- متجه مضغوط PQ: 64 متجهًا فرعيًا × 8 بت = 512 بت
يمثل ذلك انخفاضًا بمقدار 8 أضعاف في متطلبات التخزين.
حساب المسافة باستخدام PQ
عند إجراء بحث التشابه مع متجه استعلام، يتيح PQ حساب المسافة بكفاءة من خلال الخطوات التالية:
المعالجة المسبقة للاستعلام
- يتحلل متجه الاستعلام إلى
m
متجهات فرعية، بما يتطابق مع بنية تحليل PQ الأصلية. - لكل متجه استعلام فرعي ودفتر الرموز المقابل له (يحتوي على 2^nbits centroids)، يتم حساب وتخزين المسافات إلى جميع المراكز.
- يؤدي هذا إلى إنشاء
m
جداول بحث، حيث يحتوي كل جدول على مسافات 2^nbits.
- يتحلل متجه الاستعلام إلى
تقريب المسافات
بالنسبة إلى أي متجه قاعدة بيانات ممثلة برموز PQ، يتم حساب المسافة التقريبية إلى متجه الاستعلام على النحو التالي:
- بالنسبة لكل متجه من المتجهات الفرعية
m
، استرجع المسافة المحسوبة مسبقًا من جدول البحث المقابل باستخدام فهرس النواة المركزية المخزنة. - اجمع هذه المسافات
m
للحصول على المسافة التقريبية بناءً على نوع مقياس معين (مثل المسافة الإقليدية).
- بالنسبة لكل متجه من المتجهات الفرعية
عملية pq-process-1
IVF + PQ
يجمع مؤشر IVF_PQ بين نقاط قوة IVF وPQ لتسريع عمليات البحث. تعمل العملية في خطوتين:
- التصفية الخشنة باستخدام IVF: يقسم IVF فضاء المتجه إلى مجموعات، مما يقلل من نطاق البحث. بدلاً من تقييم مجموعة البيانات بأكملها، تركز الخوارزمية فقط على المجموعات الأقرب إلى متجه الاستعلام.
- المقارنة الدقيقة مع PQ: داخل المجموعات المختارة، تستخدم PQ تمثيلات المتجهات المضغوطة والكمية لحساب المسافات التقريبية بسرعة.
يتأثر أداء فهرس IVF_PQ بشكل كبير بالمعلمات التي تتحكم في كل من خوارزميات IVF و PQ. يعد ضبط هذه المعلمات أمرًا بالغ الأهمية لتحقيق أفضل النتائج لمجموعة بيانات وتطبيق معينين. يمكن العثور على معلومات أكثر تفصيلاً حول هذه المعلمات وكيفية ضبطها في بارامز الفهرس.
إنشاء فهرس
لإنشاء فهرس IVF_PQ
على حقل متجه في ميلفوس، استخدم طريقة 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_PQ", # 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={
"m": 4, # Number of sub-vectors to split eahc vector into
} # Index building params
)
في هذا التكوين
index_type
: نوع الفهرس المراد إنشاؤه. في هذا المثال، اضبط القيمة علىIVF_PQ
.metric_type
: الطريقة المستخدمة لحساب المسافة بين المتجهات. تتضمن القيم المدعومةCOSINE
وL2
وIP
. لمزيد من التفاصيل، راجع أنواع المقاييس.params
: : خيارات التكوين الإضافية لبناء الفهرس.m
: عدد المتجهات الفرعية المراد تقسيم المتجه إليها.
لمعرفة المزيد من معلمات البناء المتوفرة للفهرس
IVF_PQ
، راجع بارامترات بناء الفهرس.
بمجرد تكوين معلمات الفهرس، يمكنك إنشاء الفهرس باستخدام الأسلوب 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_PQ
، راجع باراميات البحث الخاصة بالفهرس.
بارامترات الفهرس
يقدم هذا القسم نظرة عامة على المعلمات المستخدمة لبناء الفهرس وإجراء عمليات البحث على الفهرس.
معلمات بناء الفهرس
يسرد الجدول التالي المعلمات التي يمكن تكوينها في params
عند إنشاء فهرس.
المعلمة | الوصف | نطاق القيمة | اقتراح الضبط | |
---|---|---|---|---|
عامل التجميع | nlist | عدد المجموعات المراد إنشاؤها باستخدام خوارزمية k-means أثناء بناء الفهرس. | النوع: عدد صحيح النطاق: [1, 65536] القيمة الافتراضية: 128 | تعمل القيم الأكبر nlist على تحسين الاستدعاء من خلال إنشاء مجموعات أكثر دقة ولكنها تزيد من وقت بناء الفهرس. قم بالتحسين بناءً على حجم مجموعة البيانات والموارد المتاحة.في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [32, 4096]. |
PQ | m | عدد المتجهات الفرعية (المستخدمة في التكميم) لتقسيم كل متجه عالي الأبعاد إلى متجهات عالية الأبعاد أثناء عملية التكميم. | النوع: عدد صحيح المدى: [1, 65536] القيمة الافتراضية: لا يوجد | يمكن للقيمة الأعلى m تحسين الدقة، لكنها تزيد أيضًا من التعقيد الحسابي واستخدام الذاكرة.m يجب أن يكون مقسومًا على البُعد المتجه(D) لضمان التحلل الصحيح. القيمة الموصى بها عادةً هي m = D/2.في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [D/8، D]. |
nbits | عدد البتات المستخدمة لتمثيل فهرس مركزية كل متجه فرعي في النموذج المضغوط. وهو يحدد مباشرةً حجم كل دفتر رموز، حيث سيحتوي كل دفتر رموز على 2^nbits centroids. على سبيل المثال، إذا تم تعيين nbits على 8، فسيتم تمثيل كل متجه فرعي بفهرس مركزية مكون من 8 بت. وهذا يسمح بوجود 2^8 (256) مركزيات ممكنة في دفتر الرموز لهذا المتجه الفرعي. | النوع: عدد صحيح المدى: [1, 64] القيمة الافتراضية: 8 | تسمح القيمة الأعلى nbits باستخدام دفاتر رموز أكبر، مما قد يؤدي إلى تمثيل أكثر دقة للمتجهات الأصلية. ومع ذلك، فهذا يعني أيضًا استخدام المزيد من البتات لتخزين كل فهرس، مما يؤدي إلى ضغط أقل.في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [1, 16]. |
بارامترات البحث الخاصة بالفهرس
يسرد الجدول التالي المعلمات التي يمكن تكوينها في search_params.params
عند البحث في الفهرس.
المعلمة | الوصف | نطاق القيمة | اقتراح الضبط | |
---|---|---|---|---|
عامل التهيئة | nprobe | عدد المجموعات للبحث عن المرشحين. | النوع: عدد صحيح المدى: [1, nlist] القيمة الافتراضية: 8 | تسمح القيم الأعلى بالبحث في المزيد من المجموعات، مما يحسن الاستدعاء من خلال توسيع نطاق البحث ولكن على حساب زيادة زمن وصول الاستعلام. قم بتعيين nprobe بشكل متناسب مع nlist لتحقيق التوازن بين السرعة والدقة.في معظم الحالات، نوصي بتعيين قيمة ضمن هذا النطاق: [1, nlist]. |