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

مصنف RRRF

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

متى تستخدم مصنف RRF Ranker

تم تصميم RRF Ranker خصيصًا لسيناريوهات البحث المختلطة حيث تريد موازنة النتائج من مسارات بحث متعددة متجهة دون تعيين أوزان أهمية صريحة. إنه فعال بشكل خاص لـ

حالة الاستخدام

مثال

لماذا يعمل مصنف RRF Ranker بشكل جيد

البحث متعدد الوسائط بأهمية متساوية

البحث عن الصور والنصوص حيث تكون كلتا الطريقتين متساويتين في الأهمية

يوازن بين النتائج دون الحاجة إلى تعيينات وزن تعسفية

بحث متجه التجميع

الجمع بين النتائج من نماذج تضمين مختلفة

يدمج التصنيفات بشكل ديمقراطي دون تفضيل توزيع درجات أي نموذج معين

البحث عبر اللغات

البحث عن المستندات عبر لغات متعددة

ترتيب النتائج بشكل عادل بغض النظر عن خصائص التضمين الخاصة باللغة

توصيات الخبراء

الجمع بين التوصيات من أنظمة خبراء متعددة

إنشاء تصنيفات توافقية عندما تستخدم أنظمة مختلفة أساليب تسجيل غير قابلة للمقارنة

إذا كان تطبيق البحث المختلط الخاص بك يتطلب موازنة مسارات بحث متعددة بشكل ديمقراطي دون تعيين أوزان صريحة، فإن RRF Ranker هو خيارك المثالي.

آلية مصنف RRF Ranker

سير العمل الرئيسي لاستراتيجية RRRFRanker على النحو التالي:

  1. جمع تصنيفات البحث: اجمع تصنيفات النتائج من كل مسار من مسارات البحث المتجه (الرتبة_1، الرتبة_2).

  2. دمج التصنيفات: تحويل التصنيفات من كل مسار (rank_rf_1، rank_rf_rf_2) وفقًا لصيغة حسابية.

    تتضمن الصيغة الحسابية والتي تمثل عدد عمليات الاسترجاع. راندي) هو موضع ترتيب المستند (د) الناتج عن المسترجع i(th). k هو معامل تنعيم يتم تعيينه عادةً عند 60.

  3. الترتيب الإجمالي: إعادة تصنيف نتائج البحث بناءً على التصنيفات المجمعة لإنتاج النتائج النهائية.

Rrf Ranker مصنف RRRF

مثال على مصنف RRRF

يوضح هذا المثال بحثًا هجينًا (topK=5) على متجهات متناثرة وكثيفة ويوضح كيفية إعادة ترتيب استراتيجية RRFR Ranker للنتائج من عمليتي بحث لشبكة ANN.

  • نتائج بحث ANN على متجهات متناثرة من النصوص (topK=5):

    المعرف

    الترتيب (متناثر)

    101

    1

    203

    2

    150

    3

    198

    4

    175

    5

  • نتائج بحث الشبكة العصبية الاصطناعية على متجهات كثيفة من النصوص (topK = 5):

    المعرف

    الرتبة (كثيفة)

    198

    1

    101

    2

    110

    3

    175

    4

    250

    5

  • استخدم RRF لإعادة ترتيب ترتيب مجموعتي نتائج البحث. افترض أن معلمة التنعيم k مضبوطة على 60.

    المعرف

    النتيجة (متناثرة)

    النتيجة (كثيفة)

    النتيجة النهائية

    101

    1

    2

    1/(60+1)+1/(60+2) = 0.03252247

    198

    4

    1

    1/(60+4)+1/(60+1) = 0.03201844

    175

    5

    4

    1/(60+5)+1/(60+4) = 0.03100962

    203

    2

    غير متاح

    1/(60+2) = 0.01612903

    150

    3

    غير متاح

    1/(60+3) = 0.01587302

    110

    غير متاح

    3

    1/(60+3) = 0.01587302

    250

    غير متاح

    5

    1/(60+5) = 0.01538462

  • النتائج النهائية بعد إعادة الترتيب (توب ك = 5): النتائج النهائية بعد إعادة الترتيب

    الرتبة

    المعرف

    النتيجة النهائية

    1

    101

    0.03252247

    2

    198

    0.03201844

    3

    175

    0.03100962

    4

    203

    0.01612903

    5

    150

    0.01587302

    5

    110

    0.01587302

استخدام مصنف RRF

عند استخدام استراتيجية إعادة ترتيب RRF، تحتاج إلى تكوين المعلمة k. وهي معلمة تنعيم يمكن أن تغير بشكل فعال الأوزان النسبية للبحث عن النص الكامل مقابل البحث المتجه. القيمة الافتراضية لهذه المعلمة هي 60، ويمكن ضبطها ضمن نطاق (0، 16384). يجب أن تكون القيمة أرقام فاصلة عائمة. القيمة الموصى بها هي بين [10، 100]. في حين أن k=60 هو خيار شائع، إلا أن القيمة المثلى k يمكن أن تختلف بناءً على تطبيقاتك ومجموعات البيانات الخاصة بك. نوصي باختبار هذه المعلمة وتعديلها بناءً على حالة الاستخدام الخاصة بك لتحقيق أفضل أداء.

إنشاء مصنف RRRF

بعد إعداد مجموعتك باستخدام حقول متجهة متعددة، قم بإنشاء مصنف RRF Ranker باستخدام معلمة تنعيم مناسبة:

يتيح لك الإصدار Milvus 2.6.x والإصدارات الأحدث تكوين استراتيجيات إعادة الترتيب مباشرةً عبر واجهة برمجة التطبيقات Function. إذا كنت تستخدم إصدارًا سابقًا (قبل الإصدار 2.6.0)، فارجع إلى وثائق إعادة التصنيف للحصول على تعليمات الإعداد.

from pymilvus import Function, FunctionType

ranker = Function(
    name="rrf",
    input_field_names=[], # Must be an empty list
    function_type=FunctionType.RERANK,
    params={
        "reranker": "rrf", 
        "k": 100  # Optional
    }
)
import io.milvus.common.clientenum.FunctionType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;

CreateCollectionReq.Function rerank = CreateCollectionReq.Function.builder()
        .name("rrf")
        .functionType(FunctionType.RERANK)
        .param("reranker", "rrf")
        .param("k", "100")
        .build();
import { FunctionType } from "@zilliz/milvus2-sdk-node";

const ranker = {
  name: "weight",
  input_field_names: [],
  function_type: FunctionType.RERANK,
  params: {
    reranker: "weighted",
    weights: [0.1, 0.9],
    norm_score: true,
  },
};

// Go
# Restful

المعلمة

هل هي مطلوبة؟

الوصف

القيمة/مثال

name

نعم

المعرف الفريد لهذه الوظيفة

"rrf"

input_field_names

نعم

قائمة بالحقول المتجهة لتطبيق الدالة عليها (يجب أن تكون فارغة لمصنف RRF)

[]

function_type

نعم

نوع الدالة المطلوب استدعاؤها؛ استخدم RERANK لتحديد استراتيجية إعادة الترتيب

FunctionType.RERANK

params.reranker

نعم

يحدد طريقة إعادة الترتيب المراد استخدامها.

يجب تعيينها على rrf لاستخدام RRF Ranker.

"weighted"

params.k

لا

معلمة التنعيم التي تتحكم في تأثير رتب المستندات؛ يقلل ارتفاع k من الحساسية تجاه الرتب العليا. النطاق: (0، 16384)؛ الافتراضي: 60.

للحصول على التفاصيل، راجع آلية RRRF Ranker.

100

تم تصميم RRRF Ranker خصيصًا لعمليات البحث الهجين التي تجمع بين حقول متجهات متعددة. إليك كيفية استخدامه في البحث الهجين:

from pymilvus import MilvusClient, AnnSearchRequest

# Connect to Milvus server
milvus_client = MilvusClient(uri="http://localhost:19530")

# Assume you have a collection setup

# Define text vector search request
text_search = AnnSearchRequest(
    data=["modern dining table"],
    anns_field="text_vector",
    param={},
    limit=10
)

# Define image vector search request
image_search = AnnSearchRequest(
    data=[image_embedding],  # Image embedding vector
    anns_field="image_vector",
    param={},
    limit=10
)

# Apply RRF Ranker to product hybrid search
# The smoothing parameter k controls the balance
hybrid_results = milvus_client.hybrid_search(
    collection_name,
    [text_search, image_search],  # Multiple search requests
    ranker=ranker,  # Apply the RRF ranker
    limit=10,
    output_fields=["product_name", "price", "category"]
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.AnnSearchReq;
import io.milvus.v2.service.vector.request.HybridSearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;
import io.milvus.v2.service.vector.request.data.FloatVec;

MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
        .uri("http://localhost:19530")
        .build());
        
List<AnnSearchReq> searchRequests = new ArrayList<>();
searchRequests.add(AnnSearchReq.builder()
        .vectorFieldName("text_vector")
        .vectors(Collections.singletonList(new EmbeddedText("\"modern dining table\"")))
        .limit(10)
        .build());
searchRequests.add(AnnSearchReq.builder()
        .vectorFieldName("image_vector")
        .vectors(Collections.singletonList(new FloatVec(imageEmbedding)))
        .limit(10)
        .build());
        
HybridSearchReq hybridSearchReq = HybridSearchReq.builder()
                .collectionName(COLLECTION_NAME)
                .searchRequests(searchRequests)
                .ranker(ranker)
                .limit(10)
                .outputFields(Arrays.asList("product_name", "price", "category"))
                .build();
SearchResp searchResp = client.hybridSearch(hybridSearchReq);
import { MilvusClient, FunctionType } from "@zilliz/milvus2-sdk-node";

const milvusClient = new MilvusClient({ address: "http://localhost:19530" });

const text_search = {
    data: ["modern dining table"],
    anns_field: "text_vector",
    param: {},
    limit: 10,
};

const image_search = {
  data: [image_embedding],
  anns_field: "image_vector",
  param: {},
  limit: 10,
};

const ranker = {
  name: "weight",
  input_field_names: [],
  function_type: FunctionType.RERANK,
  params: {
    reranker: "weighted",
    weights: [0.1, 0.9],
    norm_score: true,
  },
};

const search = await milvusClient.search({
  collection_name: collection_name,
  data: [text_search, image_search],
  output_fields: ["product_name", "price", "category"],
  limit: 10,
  rerank: ranker,
});
// go
# restful

لمزيد من المعلومات عن البحث الهجين، راجع البحث الهجين متعدد المتجهات.

جرب Managed Milvus مجاناً

Zilliz Cloud خالي من المتاعب، ويعمل بواسطة Milvus ويعمل بسرعة 10 أضعاف.

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

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