نظرة عامة على مصنف النماذجCompatible with Milvus 2.6.x
يصنّف البحث التقليدي عن المتجهات النتائج فقط من خلال التشابه الرياضي - أي مدى تطابق المتجهات في الفضاء عالي الأبعاد. على الرغم من كفاءة هذا النهج، إلا أنه غالبًا ما يغفل الصلة الدلالية الحقيقية. فكِّر في البحث عن "أفضل الممارسات لتحسين قاعدة البيانات": قد تتلقى مستندات ذات تشابه متجه عالٍ تذكر هذه المصطلحات بشكل متكرر، ولكنها لا توفر في الواقع استراتيجيات تحسين قابلة للتنفيذ.
يقوم نموذج التصنيف بتحويل بحث Milvus من خلال دمج نماذج لغوية متقدمة تفهم العلاقات الدلالية بين الاستعلامات والمستندات. وبدلاً من الاعتماد فقط على التشابه المتجه، يقوم بتقييم معنى المحتوى والسياق لتقديم نتائج أكثر ذكاءً وملاءمة.
الحدود
لا يمكن استخدام نماذج إعادة ترتيب النماذج مع عمليات البحث التجميعية.
يجب أن تكون الحقول المستخدمة لإعادة ترتيب النماذج من النوع النصي (
VARCHAR).يمكن لكل مصنف نماذج استخدام حقل واحد فقط
VARCHARفي كل مرة للتقييم.
كيف تعمل
يقوم مصنفو النماذج بدمج قدرات فهم النماذج اللغوية في عملية البحث في ميلفوس من خلال سير عمل محدد بشكل جيد:
نظرة عامة على مصنف النماذج
الاستعلام الأولي: يرسل التطبيق الخاص بك استعلامًا إلى ملفوس
البحث المتجه: يقوم ميلفوس بإجراء بحث متجه قياسي لتحديد المستندات المرشحة
استرجاع المستندات المرشحة: يحدد النظام المجموعة الأولية من المستندات المرشحة بناءً على تشابه المتجهات.
تقييم النموذج: تقوم وظيفة مصنف النماذج بمعالجة أزواج الاستعلام والمستندات:
يرسل الاستعلام الأصلي والوثائق المرشحة إلى خدمة نموذج خارجي
يقوم نموذج اللغة بتقييم الصلة الدلالية بين الاستعلام وكل مستند
يحصل كل مستند على درجة ملاءمة بناءً على الفهم الدلالي
إعادة الترتيب الذكي: يتم إعادة ترتيب المستندات بناءً على درجات الملاءمة التي تم إنشاؤها بواسطة النموذج
نتائج محسّنة: يتلقى تطبيقك نتائج مرتبة حسب الصلة الدلالية بدلاً من مجرد تشابه المتجهات
اختر مزود نموذج يناسب احتياجاتك
يدعم Milvus موفري خدمات النماذج التالية لإعادة الترتيب، ولكل منها خصائص مميزة:
المزود |
الأفضل ل |
الخصائص |
مثال لحالة الاستخدام |
|---|---|---|---|
vLLM |
التطبيقات المعقدة التي تتطلب فهماً دلالياً عميقاً وتخصيصاً عميقاً |
|
منصة البحث القانوني التي تنشر نماذج خاصة بالمجال الذي يفهم المصطلحات القانونية وعلاقات السوابق القضائية |
TEI |
تنفيذ سريع مع استخدام فعال للموارد |
|
نظام إدارة محتوى يحتاج إلى إمكانات إعادة ترتيب فعالة مع متطلبات قياسية |
الاتساق |
التطبيقات المؤسسية التي تعطي الأولوية للموثوقية وسهولة التكامل |
|
منصة تجارة إلكترونية تتطلب بحثًا عالي التوافر مع أداء متسق لواجهة برمجة التطبيقات وكتالوجات منتجات متعددة اللغات |
رحلة الذكاء الاصطناعي |
تطبيقات RAG ذات متطلبات أداء وسياق محددين |
|
قاعدة بيانات بحثية ذات أطوال مستندات متفاوتة تتطلب تحكمًا دقيقًا في الأداء وفهمًا دلاليًا متخصصًا |
سيليكون فلو |
تطبيقات معالجة المستندات الطويلة ذات الأولويات الفعالة من حيث التكلفة |
|
يعالج نظام البحث في الوثائق الفنية الكتيبات والأوراق المطولة التي تحتاج إلى تجزئة ذكية وتحكم ذكي في التداخل |
للحصول على معلومات مفصلة حول تنفيذ كل خدمة نموذجية، راجع الوثائق المخصصة:
التنفيذ
قبل تنفيذ مصنف النموذج، تأكد من أن لديك
مجموعة ميلفوس مع حقل
VARCHARيحتوي على النص المراد إعادة تصنيفهخدمة نموذج خارجي قيد التشغيل يمكن الوصول إليها من خلال مثيل ميلفوس الخاص بك
اتصال شبكي مناسب بين ميلفوس وخدمة النموذج الذي اخترته
تتكامل مصنفات النماذج بسلاسة مع كل من عمليات البحث المتجه القياسية وعمليات البحث المختلطة. يتضمن التنفيذ إنشاء كائن وظيفة يحدد تكوين إعادة الترتيب الخاص بك وتمريره إلى عمليات البحث.
إنشاء مصنف نموذج
لتنفيذ إعادة ترتيب النماذج، قم أولاً بتعريف كائن دالة مع التكوين المناسب. في هذا المثال، نستخدم TEI كمزود خدمة:
from pymilvus import MilvusClient, Function, FunctionType
# Connect to your Milvus server
client = MilvusClient(
uri="http://localhost:19530" # Replace with your Milvus server URI
)
# Create a model ranker function
model_ranker = Function(
name="semantic_ranker", # Function identifier
input_field_names=["document"], # VARCHAR field to use for reranking
function_type=FunctionType.RERANK, # Must be set to RERANK
params={
"reranker": "model", # Specify model reranker. Must be "model"
"provider": "tei", # Choose provider: "tei", "vllm", etc.
"queries": ["machine learning for time series"], # Query text
"endpoint": "http://model-service:8080", # Model service endpoint
# "maxBatch": 32 # Optional: batch size for processing
}
)
import io.milvus.v2.client.ConnectConfig;
import io.milvus.v2.client.MilvusClientV2;
import io.milvus.v2.service.vector.request.ranker.ModelRanker;
MilvusClientV2 client = new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.build());
ModelRanker ranker = ModelRanker.builder()
.name("semantic_ranker")
.inputFieldNames(Collections.singletonList("document"))
.provider("tei")
.queries(Collections.singletonList("machine learning for time series"))
.endpoint("http://model-service:8080")
.build();
// nodejs
// go
# restful
المعلمة |
مطلوب؟ |
الوصف |
القيمة / مثال |
|---|---|---|---|
|
نعم |
معرّف الدالة المستخدمة عند تنفيذ عمليات البحث. |
|
|
نعم |
اسم الحقل النصي المراد استخدامه لإعادة الترتيب. يجب أن يكون حقلاً من نوع |
|
|
نعم |
يحدد نوع الدالة التي يتم إنشاؤها. يجب تعيينه على |
|
|
نعم |
قاموس يحتوي على تكوين لدالة إعادة الترتيب المستندة إلى النموذج. تختلف المعلمات (المفاتيح) المتاحة اعتماداً على موفر الخدمة. |
|
|
نعم |
يجب تعيينها إلى |
|
|
نعم |
موفر خدمة النموذج المراد استخدامه لإعادة الترتيب. |
|
|
نعم |
قائمة بسلاسل الاستعلامات التي يستخدمها نموذج إعادة الترتيب لحساب درجات الملاءمة. يجب أن يتطابق عدد سلاسل الاستعلامات مع عدد الاستعلامات في عملية البحث (حتى عند استخدام ناقلات الاستعلامات بدلاً من النص)، وإلا سيتم الإبلاغ عن خطأ. |
|
|
نعم |
عنوان URL لخدمة النموذج. |
|
|
لا |
الحد الأقصى لعدد المستندات المطلوب معالجتها في دفعة واحدة. تزيد القيم الأكبر من الإنتاجية ولكنها تتطلب المزيد من الذاكرة. |
|
تطبيقه على البحث المتجه القياسي
بعد تحديد مصنف النموذج الخاص بك، يمكنك تطبيقه أثناء عمليات البحث عن طريق تمريره إلى معلمة المصنف:
# Use the model ranker in standard vector search
results = client.search(
collection_name,
data=[your_query_vector], # Number of query vectors must match that specified in model_ranker.params["queries"]
anns_field="vector_field",
limit=10,
output_fields=["document"], # Include the text field in outputs
ranker=model_ranker, # Apply the model ranker here
consistency_level="Bounded"
)
import io.milvus.v2.common.ConsistencyLevel;
import io.milvus.v2.service.vector.request.SearchReq;
import io.milvus.v2.service.vector.response.SearchResp;
import io.milvus.v2.service.vector.request.data.EmbeddedText;
SearchReq searchReq = SearchReq.builder()
.collectionName(COLLECTION_NAME)
.data(Collections.singletonList(new EmbeddedText("machine learning for time series")))
.annsField("vector_field")
.limit(10)
.outputFields(Collections.singletonList(document))
.functionScore(FunctionScore.builder()
.addFunction(ranker)
.build())
.consistencyLevel(ConsistencyLevel.BOUNDED)
.build();
SearchResp searchResp = client.search(searchReq);
// nodejs
// go
# restful