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

مصنف التعزيزCompatible with Milvus v2.6.2+

بدلًا من الاعتماد فقط على التشابه الدلالي المحسوب على أساس المسافات المتجهة، يتيح لك Boost Rankers التأثير على نتائج البحث بطريقة مفيدة. وهي مثالية لتعديل نتائج البحث بسرعة باستخدام تصفية البيانات الوصفية.

عندما يشتمل طلب البحث على دالة Boost Ranker، يستخدم Milvus شرط التصفية الاختياري داخل الدالة للعثور على التطابقات بين الكيانات المرشحة لنتائج البحث ويعزز درجات تلك التطابقات من خلال تطبيق الوزن المحدد، مما يساعد على ترقية أو تخفيض تصنيف الكيانات المتطابقة في النتيجة النهائية.

متى تستخدم أداة تعزيز التصنيف

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

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

أمثلة

لماذا يعمل مصنف التعزيز بشكل جيد

تحديد أولويات المحتوى القائم على الأعمال التجارية

  • إبراز المنتجات المتميزة في نتائج بحث التجارة الإلكترونية

  • زيادة ظهور المحتوى ذي مقاييس المشاركة العالية للمستخدمين (مثل المشاهدات والإعجابات والمشاركات)

  • رفع مستوى المحتوى الحديث في تطبيقات البحث الحساسة للوقت

  • إعطاء الأولوية للمحتوى من المصادر الموثوقة أو التي تم التحقق منها

  • تعزيز النتائج التي تطابق العبارات الدقيقة أو الكلمات المفتاحية ذات الصلة العالية

من دون الحاجة إلى إعادة إنشاء الفهارس أو تعديل نماذج تضمين المتجهات - وهي عمليات قد تستغرق وقتاً طويلاً - يمكنك على الفور ترقية عناصر محددة أو خفض مرتبتها في نتائج البحث من خلال تطبيق مرشحات بيانات التعريف الاختيارية في الوقت الفعلي. تتيح هذه الآلية تصنيفات بحث مرنة وديناميكية تتكيف بسهولة مع متطلبات العمل المتطورة.

خفض التصنيف الاستراتيجي للمحتوى

  • تقليل بروز العناصر ذات المخزون المنخفض دون إزالتها بالكامل

  • خفض رتبة المحتوى الذي يحتوي على مصطلحات يُحتمل أن تكون مرفوضة دون رقابة

  • خفض رتبة الوثائق القديمة مع إبقائها متاحة في عمليات البحث التقنية

  • تقليل ظهور المنتجات المنافسة بشكل غير ملحوظ في عمليات البحث في السوق

  • تقليل ملاءمة المحتوى مع مؤشرات الجودة المنخفضة (مثل مشكلات التنسيق والطول القصير وما إلى ذلك)

يمكنك أيضًا الجمع بين العديد من مصنفات التعزيز لتنفيذ استراتيجية تصنيف أكثر ديناميكية وقوة قائمة على الوزن.

آلية مُصنِّف التعزيز

يوضح الرسم البياني التالي سير العمل الرئيسي لمصنفي التعزيز.

Boost Ranker Mechanism آلية مصنف المعزز المعزز

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

قبل وضع اللمسات الأخيرة على النتائج، يعالج ميلفوس هؤلاء المرشحين باستخدام مصنف التعزيز على النحو التالي:

  1. يطبق تعبير التصفية الاختياري المحدد في Boost Ranker لتحديد الكيانات التي تطابق التعبير.

  2. يطبق الوزن المحدد في Boost Ranker لتعزيز درجات الكيانات المحددة.

لا يمكنك استخدام Boost Ranker كمرتب معزز كمرتب في بحث مختلط متعدد النواقل. ومع ذلك، يمكنك استخدامه كمرتب في أي من طلباته الفرعية (AnnSearchRequest).

أمثلة على Boost Ranker

يوضح المثال التالي استخدام مصنف Boost Ranker في بحث أحادي الناقل يتطلب إرجاع الكيانات الخمسة الأولى الأكثر صلة وإضافة أوزان إلى درجات الكيانات ذات نوع المستند المجرد.

  1. جمع نتائج البحث المرشحة في شرائح.

    يفترض الجدول التالي أن ميلفوس يوزع الكيانات في شريحتين(0001 و 0002)، حيث تقوم كل شريحة بإرجاع خمسة مرشحين.

    المعرف

    نوع المستند

    الدرجة

    الرتبة

    شريحة

    117

    مجردة

    0.344

    1

    0001

    89

    ملخص

    0.456

    2

    0001

    257

    الجسم

    0.578

    3

    0001

    358

    العنوان

    0.788

    4

    0001

    168

    الجسم

    0.899

    5

    0001

    46

    الجسم

    0.189

    1

    0002

    48

    الجسم

    0265

    2

    0002

    561

    ملخص

    0.366

    3

    0002

    344

    ملخص

    0.444

    4

    0002

    276

    ملخص

    0.845

    5

    0002

  2. قم بتطبيق تعبير التصفية المحدد في بووست رانكر (doctype='abstract').

    كما هو مبين في الحقل DocType في الجدول التالي، سيضع ميلفوس علامة على جميع الكيانات التي تم تعيين doctype على abstract لمزيد من المعالجة.

    المعرف

    نوع المستند

    الدرجة

    الرتبة

    الجزء

    117

    مجردة

    0.344

    1

    0001

    89

    ملخص

    0.456

    2

    0001

    257

    الجسم

    0.578

    3

    0001

    358

    العنوان

    0.788

    4

    0001

    168

    الجسم

    0.899

    5

    0001

    46

    الجسم

    0.189

    1

    0002

    48

    الجسم

    0265

    2

    0002

    561

    ملخص

    0.366

    3

    0002

    344

    ملخص

    0.444

    4

    0002

    276

    ملخص

    0.845

    5

    0002

  3. تطبيق الوزن المحدد في Boost Ranker (weight=0.5).

    سيتم ضرب جميع الكيانات المحددة في الخطوة السابقة بالوزن المحدد في Boost Ranker، مما يؤدي إلى تغييرات في رتبها.

    المعرف

    نوع المستند

    الدرجة

    الدرجة المرجحة

    (= الدرجة × الوزن)

    الرتبة

    الشريحة

    117

    ملخص

    0.344

    0.172

    1

    0001

    89

    ملخص

    0.456

    0.228

    2

    0001

    257

    الجسم

    0.578

    0.578

    3

    0001

    358

    العنوان

    0.788

    0.788

    4

    0001

    168

    الجسم

    0.899

    0.899

    5

    0001

    561

    ملخص

    0.366

    0.183

    1

    0002

    46

    الجسم

    0.189

    0.189

    2

    0002

    344

    ملخص

    0.444

    0.222

    3

    0002

    48

    الجسم

    0.265

    0.265

    4

    0002

    276

    ملخص

    0.845

    0.423

    5

    0002

    يجب أن يكون الوزن رقمًا عائمًا تختاره أنت. في حالات مثل المثال أعلاه، حيث تشير الدرجة الأصغر إلى أهمية أكبر، استخدم وزنًا أقل من 1. خلاف ذلك، استخدم وزنًا أكبر من 1.

  4. قم بتجميع المرشحين من جميع الشرائح بناءً على الدرجات الموزونة لوضع النتائج النهائية.

    المعرف

    نوع المستند

    الدرجة

    الدرجة المرجحة

    الرتبة

    الجزء

    117

    ملخص

    0.344

    0.172

    1

    0001

    561

    ملخص

    0.366

    0.183

    2

    0002

    46

    الجسم

    0.189

    0.189

    3

    0002

    344

    ملخص

    0.444

    0.222

    4

    0002

    89

    ملخص

    0.456

    0.228

    5

    0001

استخدام بووست رانكر المعزز

في هذا القسم، سترى أمثلة على كيفية استخدام Boost Ranker للتأثير على نتائج بحث أحادي المتجه.

إنشاء مصنف معزز التصنيف

قبل تمرير بووست رانكر المعزّز كمعيد ترتيب لطلب بحث، يجب عليك تعريف بووست رانكر المعزّز كدالة إعادة ترتيب على النحو التالي:

from pymilvus import Function, FunctionType

ranker = Function(
    name="boost",
    input_field_names=[], # Must be an empty list
    function_type=FunctionType.RERANK,
    params={
        "reranker": "boost",
        "filter": "doctype == 'abstract'",
        "random_score": { 
            "seed": 126,
            "field": "id"
        },
        "weight": 0.5
    }
)
import io.milvus.v2.service.vector.request.ranker.BoostRanker;

BoostRanker ranker = BoostRanker.builder()
        .name("boost")
        .filter("doctype == \"abstract\"")
        .weight(5.0f)
        .randomScoreField("id")
        .randomScoreSeed(126)
        .build();
// go
import {FunctionType} from '@zilliz/milvus2-sdk-node';

const ranker = {
  name: "boost",
  input_field_names: [],
  type: FunctionType.RERANK,
  params: {
    reranker: "boost",
    filter: "doctype == 'abstract'",
    random_score: {
      seed: 126,
      field: "id",
    },
    weight: 0.5,
  },
};

# restful

المعلمة

مطلوب؟

الوصف

القيمة/مثال

name

نعم

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

"boost"

input_field_names

نعم

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

[]

function_type

نعم

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

FunctionType.RERANK

params.reranker

نعم

تحديد نوع أداة إعادة الترتيب.

يجب ضبطه على boost لاستخدام Boost Ranker المعزز.

"boost"

params.weight

نعم

يحدد الوزن الذي سيتم ضربه في درجات أي كيانات مطابقة في نتائج البحث الأولية.

يجب أن تكون القيمة رقمًا ذا فاصلة عائمة.

  • للتأكيد على أهمية الكيانات المطابقة، قم بتعيينه إلى قيمة تعزز الدرجات.

  • لتقليل أهمية الكيانات المطابقة، قم بتعيين هذه المعلمة بقيمة تقلل من درجاتها.

1

params.filter

لا

تحديد تعبير عامل التصفية الذي سيتم استخدامه لمطابقة الكيانات بين كيانات نتائج البحث. يمكن أن يكون أي تعبير تصفية أساسي صالح مذكور في شرح التصفية.

ملاحظة: استخدم فقط العوامل الأساسية، مثل == أو > أو أو <. سيؤدي استخدام العوامل المتقدمة، مثل text_match أو phrase_match ، إلى خفض أداء البحث.

"doctype == 'abstract'"

params.random_score

لا يوجد

يحدد الدالة العشوائية التي تولد قيمة بين 0 و 1 عشوائيًا. لها الوسيمتان الاختياريتان التاليتان:

  • seed (رقم) يحدد القيمة الأولية المستخدمة لبدء مولد الأرقام العشوائية الزائفة (PRNG).

  • field (سلسلة) يحدد اسم الحقل الذي سيتم استخدام قيمته كعامل عشوائي في توليد الرقم العشوائي. يكفي وجود حقل بقيم فريدة.

    يُنصح بتعيين كل من seed و field لضمان الاتساق عبر الأجيال باستخدام نفس البذرة وقيم الحقل.

{"seed": 126, "field": "id"}

البحث باستخدام مصنف معزز واحد

بمجرد أن تصبح دالة Boost Ranker جاهزة، يمكنك الإشارة إليها في طلب بحث. يفترض المثال التالي أنك قد أنشأت بالفعل مجموعة تحتوي على الحقول التالية: المعرف، والمتجه، والنوع.

from pymilvus import MilvusClient

# Connect to the Milvus server
client = MilvusClient(
    uri="http://localhost:19530",
    token="root:Milvus"
)

# Assume you have a collection set up

# Conduct a similarity search using the created ranker
client.search(
    collection_name="my_collection",
    data=[[-0.619954382375778, 0.4479436794798608, -0.17493894838751745, -0.4248030059917294, -0.8648452746018911]],
    anns_field="vector",
    params={},
    output_field=["doctype"],
    ranker=ranker
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.FloatVec;

MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
        .uri("http://localhost:19530")
        .token("root:Milvus")
        .build());
        
SearchResp searchReq = client.search(SearchReq.builder()
        .collectionName("my_collection")
        .data(Collections.singletonList(new FloatVec(new float[]{-0.619954f, 0.447943f, -0.174938f, -0.424803f, -0.864845f})))
        .annsField("vector")
        .outputFields(Collections.singletonList("doctype"))
        .functionScore(FunctionScore.builder()
                .addFunction(ranker)
                .build())
        .build());
SearchResp searchResp = client.search(searchReq);
// go
import { MilvusClient } from '@zilliz/milvus2-sdk-node';

// Connect to the Milvus server
const client = new MilvusClient({
  address: 'localhost:19530',
  token: 'root:Milvus'
});

// Assume you have a collection set up

// Conduct a similarity search
const searchResults = await client.search({
  collection_name: 'my_collection',
  data: [-0.619954382375778, 0.4479436794798608, -0.17493894838751745, -0.4248030059917294, -0.8648452746018911],
  anns_field: 'vector',
  output_fields: ['doctype'],
  rerank: ranker,
});

console.log('Search results:', searchResults);
# restful

البحث مع عدة مصنفات معززة متعددة

يمكنك دمج العديد من مصنّفي Boost في بحث واحد للتأثير على نتائج البحث. للقيام بذلك، قم بإنشاء العديد من مصنفات Boost Rankers، وقم بالرجوع إليها في مثيل FunctionScore، واستخدم مثيل FunctionScore كمصنّف في طلب البحث.

يوضح المثال التالي كيفية تعديل درجات جميع الكيانات المحددة من خلال تطبيق وزن بين 0.8 و 1.2.

from pymilvus import MilvusClient, Function, FunctionType, FunctionScore

# Create a Boost Ranker with a fixed weight
fix_weight_ranker = Function(
    name="boost",
    input_field_names=[], # Must be an empty list
    function_type=FunctionType.RERANK,
    params={
        "reranker": "boost",
        "weight": 0.8
    }
)

# Create a Boost Ranker with a randomly generated weight between 0 and 0.4
random_weight_ranker = Function(
    name="boost",
    input_field_names=[], # Must be an empty list
    function_type=FunctionType.RERANK,
    params={
        "reranker": "boost",
        "random_score": {
            "seed": 126,
        },
        "weight": 0.4
    }
)

# Create a Function Score
ranker = FunctionScore(
    functions=[
        fix_weight_ranker, 
        random_weight_ranker
    ],
    params={
        "boost_mode": "Multiply",
        "function_mode": "Sum"
    }
)

# Conduct a similarity search using the created Function Score
client.search(
    collection_name="my_collection",
    data=[[-0.619954382375778, 0.4479436794798608, -0.17493894838751745, -0.4248030059917294, -0.8648452746018911]],
    anns_field="vector",
    params={},
    output_field=["doctype"],
    ranker=ranker
)
import io.milvus.common.clientenum.FunctionType;
import io.milvus.v2.service.collection.request.CreateCollectionReq;

CreateCollectionReq.Function fixWeightRanker = CreateCollectionReq.Function.builder()
                 .functionType(FunctionType.RERANK)
                 .name("boost")
                 .param("reranker", "boost")
                 .param("weight", "0.8")
                 .build();
                 
CreateCollectionReq.Function randomWeightRanker = CreateCollectionReq.Function.builder()
                 .functionType(FunctionType.RERANK)
                 .name("boost")
                 .param("reranker", "boost")
                 .param("weight", "0.4")
                 .param("random_score", "{\"seed\": 126}")
                 .build();

Map<String, String> params = new HashMap<>();
params.put("boost_mode","Multiply");
params.put("function_mode","Sum");     
FunctionScore ranker = FunctionScore.builder()
                 .addFunction(fixWeightRanker)
                 .addFunction(randomWeightRanker)
                 .params(params)
                 .build()

SearchResp searchReq = client.search(SearchReq.builder()
                 .collectionName("my_collection")
                 .data(Collections.singletonList(new FloatVec(new float[]{-0.619954f, 0.447943f, -0.174938f, -0.424803f, -0.864845f})))
                 .annsField("vector")
                 .outputFields(Collections.singletonList("doctype"))
                 .addFunction(ranker)
                 .build());
SearchResp searchResp = client.search(searchReq);
// go
import {FunctionType} from '@zilliz/milvus2-sdk-node';

const fix_weight_ranker = {
  name: "boost",
  input_field_names: [],
  type: FunctionType.RERANK,
  params: {
    reranker: "boost",
    weight: 0.8,
  },
};

const random_weight_ranker = {
  name: "boost",
  input_field_names: [],
  type: FunctionType.RERANK,
  params: {
    reranker: "boost",
    random_score: {
      seed: 126,
    },
    weight: 0.4,
  },
};

const ranker = {
  functions: [fix_weight_ranker, random_weight_ranker],
  params: {
    boost_mode: "Multiply",
    function_mode: "Sum",
  },
};

await client.search({
  collection_name: "my_collection",
  data: [[-0.619954382375778, 0.4479436794798608, -0.17493894838751745, -0.4248030059917294, -0.8648452746018911]],
  anns_field: "vector",
  params: {},
  output_field: ["doctype"],
  ranker: ranker
});

# restful

على وجه التحديد، هناك نوعان من مصنّفي التعزيز: أحدهما يطبّق وزنًا ثابتًا على جميع الكيانات التي تم العثور عليها، بينما يعيّن الآخر وزنًا عشوائيًا لها. بعد ذلك، نشير إلى هذين المصنفين في FunctionScore، والذي يحدد أيضًا كيفية تأثير الأوزان على درجات الكيانات التي تم العثور عليها.

يسرد الجدول التالي المعلمات المطلوبة لإنشاء مثيل FunctionScore.

المعلمة

مطلوب؟

الوصف

القيمة/مثال

functions

نعم

تحديد أسماء المصنفين المستهدفين في قائمة.

["fix_weight_ranker", "random_weight_ranker"]

params.boost_mode

لا يوجد

يحدد كيفية تأثير الأوزان المحددة على درجات أي كيانات مطابقة.

القيم الممكنة هي:

  • Multiply

    تشير إلى أن القيمة الموزونة تساوي الدرجة الأصلية للكيان المطابق مضروبة في الوزن المحدد.

    هذه هي القيمة الافتراضية.

  • Sum

    تشير إلى أن القيمة الموزونة تساوي مجموع الدرجة الأصلية للكيان المطابق والوزن المحدد

"Sum"

params.function_mode

لا يوجد

يحدد كيفية معالجة القيم الموزونة من مختلف مصنفات التعزيز المختلفة.

القيم الممكنة هي:

  • Multiply

    تشير إلى أن الدرجة النهائية للكيان المطابق تساوي حاصل ضرب القيم الموزونة من جميع مصنفات التصنيف المعززة.

    هذه هي القيمة الافتراضية.

  • Sum

    تشير إلى أن الدرجة النهائية للكيان المطابق تساوي مجموع القيم الموزونة من جميع مصنفات التصنيف المعززة.

"Sum"