اختر إستراتيجية بحث EmbeddingList
تحدد استراتيجيات البحث في EmbeddingList كيفية قيام Milvus بإنشاء فهرس مرشح تقريبي للبحث في EmbeddingList. الاستراتيجية الافتراضية هي " tokenann". يمكنك التبديل إلى " muvera " أو " lemur " عندما تكون قائمة التضمين كبيرة، أو عندما يكون TokenANN مكلفًا للغاية، أو عندما يكون التمثيل المُتعلم/المضغوط على مستوى الصفوف أكثر ملاءمة. لا تزال النتيجة النهائية تُنتج عن طريق إعادة الترتيب بواسطة MaxSim عند تمكين « emb_list_rerank ».
لماذا توجد استراتيجيات البحث
تم تصميم قائمة التضمين (EmbeddingList) للصفوف التي تحتوي على متجهات متعددة، مثل تضمينات الرموز في مستند نصي، أو تضمينات الرقع في مستند مرئي، أو تضمينات المقاطع في مقطع فيديو. بدلاً من مقارنة متجه استعلام واحد بمتجه صف واحد، يقارن MaxSim قائمة تضمينات الاستعلام بقائمة تضمينات المستند ويجمع أفضل التطابقات.
يوفر هذا قدرة تمثيل أفضل، لكن تطبيق MaxSim الدقيق مكلف عند التوسع. سيتطلب البحث باستخدام MaxSim بطريقة القوة الغاشمة مقارنة متجهات الاستعلام بكل متجه في كل صف مرشح. وعادةً ما يكون ذلك بطيئًا جدًّا بالنسبة للبحث في بيئة الإنتاج.
| ### المشكلة - قد يحتوي كل صف على العديد من المتجهات. - تنفيذ MaxSim الدقيق على جميع الصفوف مكلف. - قد يزداد حجم الفهرس وزمن استجابة البحث بسرعة. | ### الاستراتيجية - استخدام طريقة استرجاع تقريبية في المرحلة الأولى. - استرجاع عدد من المرشحين أكبر من عدد topK المطلوب. - إعادة ترتيب المرشحين باستخدام MaxSim الدقيق. |
|---|
وبهذا المعنى، فإن «البحث التقديري» ( emb_list_strategy ) هو في الأساس استراتيجية لبناء الفهرس واسترجاع المرشحين. يتم تكوينه عند بناء الفهرس، ويحدد كيفية إنتاج مجموعة المرشحين من الشبكة العصبية الاصطناعية (ANN) في المرحلة الأولى. ثم تتحكم معلمات وقت البحث، مثل «الحد الأقصى لعدد المرشحين» ( retrieval_ann_ratio ) و«الحد الأقصى لعدد الصفوف» ( emb_list_rerank )، في عدد المرشحين الذين يتم استرجاعهم وما إذا كان سيتم تطبيق إعادة الترتيب باستخدام MaxSim أم لا.
الاستراتيجيات المتاحة
| الاستراتيجية | وحدة استرجاع المرشحين | ما تحله | أفضل ملاءمة | المفاضلة الرئيسية |
|---|---|---|---|---|
tokenann | المتجهات الفردية داخل كل صف | يحتفظ بالمتجهات الأصلية ويتجنب فقدان البيانات الناتج عن الضغط. | البحث الذي يضع الجودة في المقام الأول، وقوائم التضمين القصيرة أو المتوسطة، والتضمينات عالية التمييز. | فهرس أكبر وتكلفة أعلى لاسترجاع المرشحين. |
muvera | متجه واحد مشفر لكل صف | يضغط قائمة التضمين إلى تمثيل FDE ذي أبعاد ثابتة دون الحاجة إلى التدريب. | المستندات الأطول، والتضمينات عالية التمييز، والحالات التي يكون فيها TokenANN ثقيلًا جدًّا. | يؤدي الإسقاط العشوائي إلى خسارة في الدقة؛ ويؤثر بُعد FDE على زمن الاستجابة. |
lemur | متجه واحد مُتعلم لكل صف | يتعلم ضغطًا خاصًا بالمجموعة النصية من قوائم التضمين إلى متجهات صفية ذات أبعاد ثابتة. | التضمينات منخفضة التمييز، واسترجاع المستندات متعددة الوسائط أو المرئية، وقوائم التضمين الكبيرة. | يتطلب تدريبًا وقد يكون حساسًا لتوزيع المجموعة وللتحيز في طول المستندات. |
TokenANN
tokenann يقوم بفهرسة كل متجه في قائمة التضمين. أثناء البحث، يقوم كل متجه استعلام بإجراء استرجاع ANN، ويتم تجميع المتجهات المتطابقة مرة أخرى إلى صفوفها، ويتم إعادة ترتيب الصفوف المرشحة الناتجة باستخدام MaxSim.
استخدم TokenANN عندما تكون الجودة هي الأولوية الأولى. إنه أقرب تقريب لحساب MaxSim الأصلي لأنه يحافظ على توفر جميع المتجهات في فهرس المرحلة الأولى.
مناسب تمامًا: أجزاء نصية قصيرة، صفوف تحتوي على عدد صغير أو متوسط من المتجهات، فصل دلالي قوي على مستوى الرموز، خطوط أساس حساسة للجودة.
أقل ملاءمة: المستندات الطويلة جدًّا، والصفحات المرئية التي تحتوي على آلاف متجهات البقع، وميزانيات الذاكرة أو زمن الاستجابة الصارمة.
السلوك على مستوى العناصر: يمكن لـ TokenANN استرداد المرشحات من المتجهات الفردية قبل تجميعها مرة أخرى في صفوف. تظل نتيجة البحث النهائية في EmbeddingList على مستوى الصفوف بعد تقييم MaxSim.
MUVERA
muvera يقوم بترميز كل قائمة تضمين إلى متجه ذي أبعاد ثابتة باستخدام إسقاطات عشوائية. وهذا يحول عملية الاسترجاع في المرحلة الأولى إلى بحث قياسي للمتجهات على مستوى الصفوف. ثم يتم إعادة ترتيب المرشحات باستخدام MaxSim.
استخدم MUVERA عندما يكون TokenANN ثقيلًا جدًّا ولكنك لا ترغب في إجراء خطوة تدريب. إنه حل وسط عملي بين الجودة والتكلفة.
مناسبة تمامًا: المستندات النصية الطويلة، ومساحات التضمين عالية التمييز، وأحمال العمل التي تتطلب حجم فهرس أصغر من TokenANN.
الحالات الأقل ملاءمة: مساحات التضمين ذات التمييز المنخفض أو الحالات التي يصبح فيها تمثيل FDE عالي الأبعاد بشكل لا يتناسب مع ميزانية زمن الاستجابة.
المعلمات المهمة:
muvera_num_projectionsوmuvera_num_repeatsوmuvera_seed.
يقوم LEMUR
lemur يقوم بتدريب نموذج لضغط كل قائمة تضمين إلى تمثيل ذي أبعاد ثابتة. يتم تشغيل البحث ANN في المرحلة الأولى على المتجهات المُتعلمة على مستوى الصفوف، ويتم إعادة ترتيب المرشحين باستخدام MaxSim.
استخدم LEMUR عندما يكون الضغط المُتعلَّم يستحق تكلفة التدريب. يمكن أن يعمل بشكل جيد مع مساحات التضمين منخفضة التمييز والاسترجاع متعدد الوسائط، ولكن يجب التحقق من صحته مقابل المجموعة النصية المستهدفة لأنه قد يكون حساسًا لتوزيع طول المستندات.
مناسب تمامًا: البحث عن المستندات المرئية، وتضمينات الرقع متعددة الوسائط، ومساحات التضمين منخفضة التمييز، وقوائم التضمين الكبيرة التي لا يكون فيها استخدام TokenANN عمليًا.
مناسب بشكل أقل: المجموعات النصية المتغيرة باستمرار، والتضمينات عالية التمييز ذات أطوال المستندات شديدة الانحراف، وأحمال العمل التي تكون فيها تكلفة التدريب غير مقبولة.
المعلمات المهمة:
lemur_hidden_dim،lemur_num_train_samples،lemur_num_epochs،lemur_batch_size،lemur_learning_rate،lemur_seed، وlemur_num_layers.
السلوك والتكوين الافتراضيان
استراتيجية EmbeddingList الافتراضية في Knowhere هي tokenann. إذا لم تحدد emb_list_strategy ، فسيستخدم Knowhere TokenANN. تشمل الإعدادات الافتراضية لوقت البحث retrieval_ann_ratio=3.0 و emb_list_rerank=true.
عناصر التكوين حسب الاستراتيجية
يسرد الجدول التالي عناصر التكوين الخاصة بكل استراتيجية. في Milvus، عادةً ما يتم تمرير عناصر وقت البناء في خريطة params عند إنشاء فهرس. إذا كنت بحاجة إلى قيم افتراضية من جانب الخادم، فيجب تعريفها في ملف تكوين Milvus ضمن قسم knowhere.
| الاستراتيجية | عنصر التكوين | المرحلة | القيمة الافتراضية | متى يتم تغييره |
|---|---|---|---|---|
tokenann | emb_list_strategy="tokenann" | إنشاء الفهرس | tokenann | استخدمه صراحةً عندما تريد سلوك الفهرسة الافتراضي لمتجه العناصر أو عند استخدام DiskANN. |
muvera | emb_list_strategy="muvera" | بناء الفهرس | tokenann | استخدمه عندما تريد استرجاعًا مشفرًا على مستوى الصفوف دون تدريب. |
muvera | muvera_num_projections | إنشاء الفهرس | 4 | يتحكم في عدد إسقاطات SimHash. تؤدي القيم الأعلى إلى إنشاء المزيد من المجموعات وقد تحسن جودة الترميز، ولكنها تزيد من أبعاد الترميز. |
muvera | muvera_num_repeats | إنشاء الفهرس | 7 | يتحكم في عدد عمليات الترميز FDE المستقلة التي يتم ربطها معًا. قد تؤدي القيم الأعلى إلى تحسين المتانة، ولكنها تزيد من تكلفة الفهرسة/البحث. |
muvera | muvera_seed | إنشاء الفهرس | 42 | يُضبط للحصول على إسقاطات عشوائية قابلة للتكرار، خاصة في الاختبارات ومقارنات المعايير. |
lemur | emb_list_strategy="lemur" | بناء الفهرس | tokenann | يُستخدم عندما يُتوقع أن يعمل الضغط المُتعلم على مستوى الصفوف بشكل أفضل من الإسقاط العشوائي الثابت. |
lemur | lemur_hidden_dim | إنشاء الفهرس | 256 | يتحكم في حجم التمثيل المضغوط. قم بزيادته للحصول على سعة أكبر؛ وقم بتقليله لتقليل استهلاك الذاكرة وتسريع عملية الاسترجاع. |
lemur | lemur_num_train_samples | بناء الفهرس | 20000 | قم بزيادته عندما يكون النص متنوعًا ويكون الضغط المُتعلم غير ملائم؛ وقم بتقليله فقط للاختبارات الصغيرة أو لعمليات الإنشاء الأسرع. |
lemur | lemur_num_epochs | إنشاء الفهرس | 50 | قم بزيادته إذا لم يتقارب التدريب؛ وقم بتقليصه عندما يكون وقت الإنشاء هو القيد الرئيسي. |
lemur | lemur_batch_size | بناء الفهرس | 512 | اضبطه وفقًا لإنتاجية التدريب واستخدام الذاكرة. |
lemur | lemur_learning_rate | بناء الفهرس | 0.001 | اضبطه عندما يكون التدريب غير مستقر أو يتقارب ببطء شديد. |
lemur | lemur_seed | بناء الفهرس | 42 | اضبطه لإجراء عمليات تدريب قابلة للتكرار. |
lemur | lemur_num_layers | بناء الفهرس | 2 | قم بزيادته فقط عندما يحتاج المجموع إلى مستخرج ميزات أكثر تعبيرًا ويمكنك تحمل تكلفة التدريب الإضافية. |
| جميع الاستراتيجيات | retrieval_ann_ratio | البحث | 3.0 | قم بزيادة القيمة لاسترداد المزيد من المرشحين في المرحلة الأولى وتحسين معدل الاسترجاع؛ وقم بتخفيضها لتقليل زمن الاستجابة. |
| جميع الاستراتيجيات | emb_list_rerank | البحث | true | اترك الخيار ممكّنًا لإعادة ترتيب MaxSim. قم بتعطيله فقط في التجارب الخاضعة للرقابة حيث يتم قياس جودة الشبكة العصبية الاصطناعية (ANN) في المرحلة الأولى بشكل مباشر. |
تكوين الاستراتيجية في Milvus
في Milvus، يتم تمرير الاستراتيجية كمعلمة فهرس عند إنشاء فهرس في حقل EmbeddingList، مثل الحقل الفرعي للمتجه StructArray.
index_params = client.prepare_index_params()
index_params.add_index(
field_name="clips[clip_embedding]",
index_type="HNSW",
metric_type="MAX_SIM_COSINE",
params={
"M": 16,
"efConstruction": 96,
"emb_list_strategy": "muvera",
"muvera_num_projections": 4,
"muvera_num_repeats": 7,
"muvera_seed": 42,
},
)
بالنسبة لـ LEMUR، قم بتوفير معلمات تدريب LEMUR في نفس خريطة " params ".
params={
"M": 16,
"efConstruction": 96,
"emb_list_strategy": "lemur",
"lemur_hidden_dim": 256,
"lemur_num_train_samples": 20000,
"lemur_num_epochs": 50,
"lemur_batch_size": 512,
"lemur_learning_rate": 0.001,
"lemur_seed": 42,
"lemur_num_layers": 2,
}
تكوين الإعدادات الافتراضية من جانب الخادم في Milvus
يمكن لـ Milvus أيضًا ملء معلمات الفهرس من milvus.yaml. القسم ذو الصلة هو knowhere. يتم تنظيم المعلمات حسب نوع الفهرس والمرحلة، باستخدام النمط knowhere.<INDEX_TYPE>.<stage>.<parameter>. معلمات الفهرس التي يوفرها المستخدم لها الأسبقية على هذه القيم الافتراضية.
knowhere:
enable: true
HNSW:
build:
emb_list_strategy: muvera
muvera_num_projections: 4
muvera_num_repeats: 7
muvera_seed: 42
search:
retrieval_ann_ratio: 3.0
emb_list_rerank: true
يفضل استخدام المعلمات الخاصة بكل فهرس عند اختيار الاستراتيجية. تنطبق القيمة الافتراضية في ملف تكوين Milvus بشكل عام على الفهارس من ذلك النوع والمرحلة. استخدم معلمات create_index عندما تحتاج مجموعات أو حقول مختلفة إلى استراتيجيات EmbeddingList مختلفة.
تكوين استرجاع المرشحين في وقت البحث
تحدد الاستراتيجية كيفية بناء الفهرس. في وقت البحث، استخدم retrieval_ann_ratio للتحكم في عدد المرشحين في المرحلة الأولى الذين يتم استردادهم قبل إعادة الترتيب باستخدام MaxSim. عادةً ما تؤدي القيم الأعلى إلى تحسين معدل الاسترجاع (recall) ولكنها تزيد من زمن الاستجابة.
results = client.search(
collection_name=collection_name,
data=[query_embedding_list],
anns_field="clips[clip_embedding]",
search_params={
"metric_type": "MAX_SIM_COSINE",
"params": {
"ef": 64,
"retrieval_ann_ratio": 3.0,
"emb_list_rerank": True,
},
},
limit=10,
)
| المعلمة | المرحلة | القيمة الافتراضية | المعنى |
|---|---|---|---|
emb_list_strategy | بناء الفهرس | tokenann | يحدد كيفية فهرسة واسترجاع المرشحين في EmbeddingList. |
retrieval_ann_ratio | البحث | 3.0 | معامل توسيع المرشحين للجولة الأولى من الشبكة العصبية الاصطناعية (ANN). |
emb_list_rerank | البحث | true | تحديد ما إذا كان سيتم إعادة ترتيب المرشحين المسترجعين باستخدام MaxSim. |
ملاحظات التوافق: يدعم كل من MUVERA و LEMUR حاليًا بيانات fp32 في Knowhere. يدعم DiskANN قائمة EmbeddingList فقط مع استراتيجية TokenANN. إذا كنت تستخدم أنواع متجهات غير fp32 أو DiskANN، فتأكد من دعم الاستراتيجية قبل تغيير الإعداد الافتراضي.
كيفية اختيار الاستراتيجية
لا توجد استراتيجية واحدة تعتبر الأفضل بشكل عام. اختر الاستراتيجية بناءً على طول قائمة التضمين، والتمييز في مساحة التضمين، وميزانية زمن الاستجابة، وحجم الفهرس، وما إذا كان بإمكانك تحمل خطوة التدريب أم لا.
| السؤال | الإشارة | نقطة البداية الموصى بها |
|---|---|---|
| هل تحتاج إلى خط أساس عالي الجودة؟ | تريد قياس أفضل تقريب عملي قبل تحسين التكلفة. | tokenann |
| هل عدد المتجهات في كل صف قصير أم متوسط؟ | يحتوي كل صف على عدد صغير من متجهات الرموز أو الباتشات أو المقاطع. | tokenann |
| هل TokenANN كبير جدًا أم بطيء جدًا؟ | يُعد حجم الفهرس أو زمن استجابة الاسترجاع في المرحلة الأولى هو عنق الزجاجة. | muvera |
| هل تريد الضغط دون تدريب؟ | تحتاج إلى نموذج تشغيلي أبسط وترميز قابل للتكرار. | muvera |
| هل مساحة التضمين منخفضة التمييز؟ | تتسم شبكات ANN المرشحة على مستوى الرموز بالضوضاء، ولا يحافظ الإسقاط العشوائي على إشارة كافية. | lemur |
| هل عبء العمل بصري أم متعدد الوسائط؟ | تحتوي الصفوف على العديد من متجهات الباتش، وتكلفة شبكة ANN على مستوى الرموز (TokenANN) باهظة للغاية. | lemur أو muvera |
| هل طول المستندات متفاوت بشكل كبير؟ | تحتوي بعض الصفوف على متجهات أكثر بكثير من غيرها. | ابدأ بـ muvera ؛ وتحقق من صحة lemur بعناية. |
سير عمل التقييم المقترح
ابدأ بـ
tokenannكخط أساس للجودة عندما يسمح حجم مجموعة البيانات بذلك.قم بتشغيل نفس الاستعلامات باستخدام
muveraوقارن بين معدل الاسترجاع وnDCG وزمن الاستجابة وحجم الفهرس.جرب
lemurعندما تكون قائمة التضمين كبيرة، أو تكون مساحة التضمين مشوشة، أو يكون عبء العمل مرئيًا أو متعدد الوسائط.اضبط
retrieval_ann_ratioقبل تغيير الكثير من معلمات وقت البناء. قم بزيادته إذا كان معدل الاسترجاع منخفضًا؛ وقم بتخفيضه إذا كان زمن الاستجابة مرتفعًا جدًّا.قم دائمًا بالتحقق من صحة النتائج باستخدام استعلامات تمثيلية وتوزيعات طول المستندات. قد لا تنجح الاستراتيجية التي تعمل مع النصوص القصيرة مع المستندات المرئية أو مجموعات النصوص ذات الذيل الطويل.
### الجودة أولاً ابدأ بـ tokenann. استخدمه كخط أساس لجودة تقريب MaxSim. | ### التوازن جرب muvera عندما تحتاج إلى تكلفة أقل دون إضافة مسار تدريب. | ### المضغوط: جرب lemur عندما يُرجح أن يتفوق الضغط المُتعلم على مستوى الصفوف على الإسقاط العشوائي الثابت. |
|---|
المراجع المستخدمة في هذه المسودة
اختبارات Milvus لـ
emb_list_strategyوretrieval_ann_ratioوemb_list_rerank.معالجة ملفات التكوين في Milvus لإعدادات الفهرس الافتراضية من جانب الخادم ضمن قسم
knowhere.تعريفات معلمات Knowhere للقيم الافتراضية وأسماء الاستراتيجيات المدعومة.
فحوصات التوافق في Knowhere لـ MUVERA/LEMUR التي تعمل بـ fp32 فقط، ودعم DiskANN الذي يعمل بـ TokenANN فقط.
ملاحظات التقييم الداخلية التي تقارن بين TokenANN و MUVERA و LEMUR لاسترجاع المرشحين في MaxSim.
ملاحظة بشأن النشر: قبل النشر خارجيًا، تحقق من المعلمات المدعومة رسميًا في إصدار Milvus المستهدف، وما إذا كان المنتج يرغب في الكشف عن جميع معلمات Knowhere منخفضة المستوى أم فقط مجموعة فرعية أصغر موثقة.