اختر إستراتيجية بحث 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.

الاستراتيجيةعنصر التكوينالمرحلةالقيمة الافتراضيةمتى يتم تغييره
tokenannemb_list_strategy="tokenann"إنشاء الفهرسtokenannاستخدمه صراحةً عندما تريد سلوك الفهرسة الافتراضي لمتجه العناصر أو عند استخدام DiskANN.
muveraemb_list_strategy="muvera"بناء الفهرسtokenannاستخدمه عندما تريد استرجاعًا مشفرًا على مستوى الصفوف دون تدريب.
muveramuvera_num_projectionsإنشاء الفهرس4يتحكم في عدد إسقاطات SimHash. تؤدي القيم الأعلى إلى إنشاء المزيد من المجموعات وقد تحسن جودة الترميز، ولكنها تزيد من أبعاد الترميز.
muveramuvera_num_repeatsإنشاء الفهرس7يتحكم في عدد عمليات الترميز FDE المستقلة التي يتم ربطها معًا. قد تؤدي القيم الأعلى إلى تحسين المتانة، ولكنها تزيد من تكلفة الفهرسة/البحث.
muveramuvera_seedإنشاء الفهرس42يُضبط للحصول على إسقاطات عشوائية قابلة للتكرار، خاصة في الاختبارات ومقارنات المعايير.
lemuremb_list_strategy="lemur"بناء الفهرسtokenannيُستخدم عندما يُتوقع أن يعمل الضغط المُتعلم على مستوى الصفوف بشكل أفضل من الإسقاط العشوائي الثابت.
lemurlemur_hidden_dimإنشاء الفهرس256يتحكم في حجم التمثيل المضغوط. قم بزيادته للحصول على سعة أكبر؛ وقم بتقليله لتقليل استهلاك الذاكرة وتسريع عملية الاسترجاع.
lemurlemur_num_train_samplesبناء الفهرس20000قم بزيادته عندما يكون النص متنوعًا ويكون الضغط المُتعلم غير ملائم؛ وقم بتقليله فقط للاختبارات الصغيرة أو لعمليات الإنشاء الأسرع.
lemurlemur_num_epochsإنشاء الفهرس50قم بزيادته إذا لم يتقارب التدريب؛ وقم بتقليصه عندما يكون وقت الإنشاء هو القيد الرئيسي.
lemurlemur_batch_sizeبناء الفهرس512اضبطه وفقًا لإنتاجية التدريب واستخدام الذاكرة.
lemurlemur_learning_rateبناء الفهرس0.001اضبطه عندما يكون التدريب غير مستقر أو يتقارب ببطء شديد.
lemurlemur_seedبناء الفهرس42اضبطه لإجراء عمليات تدريب قابلة للتكرار.
lemurlemur_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 بعناية.

سير عمل التقييم المقترح

  1. ابدأ بـ tokenann كخط أساس للجودة عندما يسمح حجم مجموعة البيانات بذلك.

  2. قم بتشغيل نفس الاستعلامات باستخدام muvera وقارن بين معدل الاسترجاع وnDCG وزمن الاستجابة وحجم الفهرس.

  3. جرب lemur عندما تكون قائمة التضمين كبيرة، أو تكون مساحة التضمين مشوشة، أو يكون عبء العمل مرئيًا أو متعدد الوسائط.

  4. اضبط retrieval_ann_ratio قبل تغيير الكثير من معلمات وقت البناء. قم بزيادته إذا كان معدل الاسترجاع منخفضًا؛ وقم بتخفيضه إذا كان زمن الاستجابة مرتفعًا جدًّا.

  5. قم دائمًا بالتحقق من صحة النتائج باستخدام استعلامات تمثيلية وتوزيعات طول المستندات. قد لا تنجح الاستراتيجية التي تعمل مع النصوص القصيرة مع المستندات المرئية أو مجموعات النصوص ذات الذيل الطويل.

### الجودة أولاً ابدأ بـ 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 منخفضة المستوى أم فقط مجموعة فرعية أصغر موثقة.