مصنف التعزيزCompatible with Milvus v2.6.2+
بدلًا من الاعتماد فقط على التشابه الدلالي المحسوب على أساس المسافات المتجهة، يتيح لك Boost Rankers التأثير على نتائج البحث بطريقة مفيدة. وهي مثالية لتعديل نتائج البحث بسرعة باستخدام تصفية البيانات الوصفية.
عندما يشتمل طلب البحث على دالة Boost Ranker، يستخدم Milvus شرط التصفية الاختياري داخل الدالة للعثور على التطابقات بين الكيانات المرشحة لنتائج البحث ويعزز درجات تلك التطابقات من خلال تطبيق الوزن المحدد، مما يساعد على ترقية أو تخفيض تصنيف الكيانات المتطابقة في النتيجة النهائية.
متى تستخدم أداة تعزيز التصنيف
على عكس مصنفات التصنيف الأخرى التي تعتمد على نماذج التشفير المتقاطع أو خوارزميات الدمج، يقوم مصنف التعزيز بإدخال قواعد اختيارية تعتمد على البيانات الوصفية مباشرةً في عملية التصنيف، مما يجعله أكثر ملاءمة في السيناريوهات التالية.
حالة الاستخدام |
أمثلة |
لماذا يعمل مصنف التعزيز بشكل جيد |
|---|---|---|
تحديد أولويات المحتوى القائم على الأعمال التجارية |
|
من دون الحاجة إلى إعادة إنشاء الفهارس أو تعديل نماذج تضمين المتجهات - وهي عمليات قد تستغرق وقتاً طويلاً - يمكنك على الفور ترقية عناصر محددة أو خفض مرتبتها في نتائج البحث من خلال تطبيق مرشحات بيانات التعريف الاختيارية في الوقت الفعلي. تتيح هذه الآلية تصنيفات بحث مرنة وديناميكية تتكيف بسهولة مع متطلبات العمل المتطورة. |
خفض التصنيف الاستراتيجي للمحتوى |
|
يمكنك أيضًا الجمع بين العديد من مصنفات التعزيز لتنفيذ استراتيجية تصنيف أكثر ديناميكية وقوة قائمة على الوزن.
آلية مُصنِّف التعزيز
يوضح الرسم البياني التالي سير العمل الرئيسي لمصنفي التعزيز.
آلية مصنف المعزز المعزز
عندما تقوم بإدراج البيانات، يقوم ميلفوس بتوزيعها عبر شرائح. أثناء البحث، يقوم كل مقطع بإرجاع مجموعة من المرشحين، ويقوم Milvus بترتيب هؤلاء المرشحين من جميع المقاطع للحصول على النتائج النهائية. عندما يتضمن طلب البحث مصنفًا معززًا، يطبقه Milvus على النتائج المرشحة من كل شريحة لمنع فقدان الدقة المحتمل وتحسين الاستدعاء.
قبل وضع اللمسات الأخيرة على النتائج، يعالج ميلفوس هؤلاء المرشحين باستخدام مصنف التعزيز على النحو التالي:
يطبق تعبير التصفية الاختياري المحدد في Boost Ranker لتحديد الكيانات التي تطابق التعبير.
يطبق الوزن المحدد في Boost Ranker لتعزيز درجات الكيانات المحددة.
لا يمكنك استخدام Boost Ranker كمرتب معزز كمرتب في بحث مختلط متعدد النواقل. ومع ذلك، يمكنك استخدامه كمرتب في أي من طلباته الفرعية (AnnSearchRequest).
أمثلة على Boost Ranker
يوضح المثال التالي استخدام مصنف Boost Ranker في بحث أحادي الناقل يتطلب إرجاع الكيانات الخمسة الأولى الأكثر صلة وإضافة أوزان إلى درجات الكيانات ذات نوع المستند المجرد.
جمع نتائج البحث المرشحة في شرائح.
يفترض الجدول التالي أن ميلفوس يوزع الكيانات في شريحتين(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
قم بتطبيق تعبير التصفية المحدد في بووست رانكر (
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
تطبيق الوزن المحدد في 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.
قم بتجميع المرشحين من جميع الشرائح بناءً على الدرجات الموزونة لوضع النتائج النهائية.
المعرف
نوع المستند
الدرجة
الدرجة المرجحة
الرتبة
الجزء
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
المعلمة |
مطلوب؟ |
الوصف |
القيمة/مثال |
|---|---|---|---|
|
نعم |
المعرف الفريد لهذه الوظيفة |
|
|
نعم |
قائمة بالحقول المتجهة لتطبيق الدالة عليها (يجب أن تكون فارغة لمصنف التعزيز) |
|
|
نعم |
نوع الدالة المراد استدعاؤها؛ استخدم |
|
|
نعم |
تحديد نوع أداة إعادة الترتيب. يجب ضبطه على |
|
|
نعم |
يحدد الوزن الذي سيتم ضربه في درجات أي كيانات مطابقة في نتائج البحث الأولية. يجب أن تكون القيمة رقمًا ذا فاصلة عائمة.
|
|
|
لا |
تحديد تعبير عامل التصفية الذي سيتم استخدامه لمطابقة الكيانات بين كيانات نتائج البحث. يمكن أن يكون أي تعبير تصفية أساسي صالح مذكور في شرح التصفية. ملاحظة: استخدم فقط العوامل الأساسية، مثل |
|
|
لا يوجد |
يحدد الدالة العشوائية التي تولد قيمة بين
|
|
البحث باستخدام مصنف معزز واحد
بمجرد أن تصبح دالة 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.
المعلمة |
مطلوب؟ |
الوصف |
القيمة/مثال |
|---|---|---|---|
|
نعم |
تحديد أسماء المصنفين المستهدفين في قائمة. |
|
|
لا يوجد |
يحدد كيفية تأثير الأوزان المحددة على درجات أي كيانات مطابقة. القيم الممكنة هي:
|
|
|
لا يوجد |
يحدد كيفية معالجة القيم الموزونة من مختلف مصنفات التعزيز المختلفة. القيم الممكنة هي:
|
|