Hugging Face RankerCompatible with Milvus v2.6.20+

يقوم البحث المتجهي بترتيب النتائج حسب المسافة المتجهة، ولكن الترتيب الأولي قد لا يعكس مدى ملاءمة نص كل مرشح للاستعلام. يقوم Hugging Face Ranker بإرسال الاستعلام والنص المرشح إلى مزودي الاستدلال Hugging Face المستضافين ويستخدم درجات " sentence-similarity " لإعادة ترتيب المرشحين الذين أعادهم Milvus.

يستخدم هذا التكامل جهاز التوجيه (router) المستضاف من Hugging Face. لإعادة الترتيب باستخدام خدمة استدلال تضمين النصوص (TEI) التي تم نشرها بشكل منفصل، راجع TEI Ranker.

القيود

  • يجب أن تشير الدالة إلى حقل واحد فقط غير قابل للفراغ من حقول « VARCHAR » في « input_field_names ».
  • يجب أن يكون عدد السلاسل في queries مساوياً لعدد استعلامات البحث (nq).

كيفية العمل

Hugging Face Ranker workflow سير عمل Hugging Face Ranker

يتم تشغيل Hugging Face Ranker بعد البحث المتجهي الأولي:

  1. استرجاع الكيانات المرشحة. يقوم Milvus بالبحث في حقل المتجهات المُهيأ ويجمع الكيانات المرشحة.
  2. تحضير النص لإعادة الترتيب. تقرأ الدالة نص الاستعلام من params.queries والنص المرشح من الحقل VARCHAR المحدد في input_field_names.
  3. طلب درجات التشابه. يرسل Milvus الاستعلام كـ source_sentence والنصوص المرشحة كـ sentences عبر hf-inference إلى مسار Hugging Face sentence-similarity.
  4. إعادة ترتيب النصوص المرشحة. يعرض Hugging Face درجة واحدة لكل نص مرشح. يقوم Milvus بترتيب النصوص المرشحة من أعلى درجة إلى أدنى درجة ويعرض النتائج بعد إعادة الترتيب.

كيفية حساب درجات التشابه

How Hugging Face Ranker calculates similarity scores كيف يحسب Hugging Face Ranker درجات التشابه

يحسب نموذج Hugging Face الدرجات على ثلاث مراحل:

  1. تحضير مدخلات النص. يقرأ Ranker نص الاستعلام من params.queries ونص المرشح من الحقل VARCHAR الذي تم تكوينه.
  2. إنشاء تمثيلات منفصلة للنموذج. يرسل Milvus الاستعلام على أنه source_sentence والنصوص المرشحة على أنها sentences. يقوم النموذج داخليًا بترميز الاستعلام وكل مرشح على حدة.
  3. قارن النتائج وأعد الدرجات. يقارن النموذج تمثيل الاستعلام مع كل تمثيل مرشح ويعيد درجة تشابه واحدة لكل مرشح.

تعد التضمينات أو التمثيلات التي يستخدمها نموذج Hugging Face معالجة نموذجية وسيطة. يعرض Hugging Face الدرجات، وليس المتجهات. وبالتالي، يستخدم استرجاع المتجهات الأولي وإعادة ترتيب النموذج تمثيلات منفصلة وقد يستخدمان نماذج مختلفة.

قبل البدء

قبل استخدام Hugging Face Ranker، تأكد من توفر ما يلي:

  • Milvus 2.6.20 أو إصدار أحدث من سلسلة الإصدارات 2.6.
  • PyMilvus 2.6.16 أو أحدث.
  • رمز وصول مستخدم Hugging Face يمكنه استدعاء مزودي الاستدلال.
  • نموذج يتم تقديمه حاليًا بواسطة hf-inference لـ sentence-similarity المهمة.
  • مجموعة تخزن النص المرشح في حقل VARCHAR غير قابل للقيمة الفارغة.

لا يتحكم Milvus في ما إذا كان نموذج Hugging Face سيظل متاحًا عبر hf-inference ، أو ما إذا كان النموذج يلبي متطلباتك من حيث الاستقرار وزمن الاستجابة وجودة المخرجات. تحقق من النموذج على Hugging Face وقم بتقييمه بالنسبة لحمل العمل الخاص بك قبل استخدامه في بيئة الإنتاج.

تستخدم الأمثلة sentence-transformers/all-MiniLM-L6-v2 فقط لتوضيح التكوين. ولا يُعد النموذج توصية أو اعتمادًا من Milvus.

تكوين بيانات الاعتماد

يمكنك تكوين رمز وصول مستخدم Hugging Face في milvus.yaml أو من خلال متغير بيئة.

ترتيب أولوية بيانات الاعتماد هو:

Function credential label -> provider credential label in milvus.yaml -> environment variable

الخيار 1: ملف التكوين

حدد الرمز في قسم credential ذي المستوى الأعلى، ثم وجه مزود تصنيف Hugging Face إلى تسمية بيانات الاعتماد:

# milvus.yaml
credential:
  huggingface_apikey:
    apikey: <YOUR_HUGGING_FACE_TOKEN>

function:
  rerank:
    model:
      providers:
        huggingface:
          credential: huggingface_apikey
          # url: https://router.huggingface.co

يمكن لمعلمة credential على مستوى الوظيفة أن تتجاوز التسمية على مستوى المزود. يجب أن تكون قيمتها تسمية بيانات اعتماد محددة في milvus.yaml ، وليس الرمز نفسه.

الخيار 2: متغير البيئة

إذا لم تحدد أي من وظيفة أو تكوين المزود تسمية بيانات الاعتماد، فقم بتعيين MILVUS_HUGGINGFACE_API_KEY في بيئة خدمة Milvus:

# docker-compose.yaml
standalone:
  environment:
    MILVUS_HUGGINGFACE_API_KEY: <YOUR_HUGGING_FACE_TOKEN>

استخدام Hugging Face Ranker

يتم تعريف Hugging Face Ranker وتطبيقه في وقت البحث. يمكنك تغيير أو حذف أداة الترتيب لكل عملية بحث دون تغيير مخطط المجموعة.

الخطوة 1: إعداد مجموعة

يُنشئ المثال التالي مجموعة تحتوي على حقل نصي لإعادة الترتيب وحقل متجه للاسترجاع الأولي:

from pymilvus import DataType, Function, FunctionType, MilvusClient

client = MilvusClient(uri="http://localhost:19530")

collection_name = "hugging_face_rerank_demo"
schema = client.create_schema()
schema.add_field("id", DataType.INT64, is_primary=True, auto_id=False)
schema.add_field("document", DataType.VARCHAR, max_length=1000)
schema.add_field("dense", DataType.FLOAT_VECTOR, dim=4)

index_params = client.prepare_index_params()
index_params.add_index(
    field_name="dense",
    index_type="AUTOINDEX",
    metric_type="COSINE",
)

client.create_collection(
    collection_name=collection_name,
    schema=schema,
    index_params=index_params,
)

client.insert(
    collection_name=collection_name,
    data=[
        {
            "id": 1,
            "document": "Recent renewable energy developments include improved solar efficiency.",
            "dense": [0.10, 0.20, 0.30, 0.40],
        },
        {
            "id": 2,
            "document": "Climate policy and carbon markets have evolved rapidly in recent years.",
            "dense": [0.11, 0.19, 0.28, 0.39],
        },
        {
            "id": 3,
            "document": "New battery technology helps stabilize wind and solar power generation.",
            "dense": [0.90, 0.10, 0.05, 0.02],
        },
        {
            "id": 4,
            "document": "Vector databases support similarity search for machine learning applications.",
            "dense": [0.01, 0.02, 0.03, 0.04],
        },
    ],
)

الخطوة 2: تعريف دالة إعادة الترتيب

قم بتعريف دالة إعادة الترتيب ( RERANK ) التي تقرأ النص المرشح من document وتستخدم نص الاستعلام الموجود في queries:

hugging_face_ranker = Function(
    name="hugging_face_semantic_ranker",
    input_field_names=["document"],
    function_type=FunctionType.RERANK,
    params={
        "reranker": "model",
        "provider": "huggingface",
        "model_name": "sentence-transformers/all-MiniLM-L6-v2",
        "hf_provider": "hf-inference",
        "queries": ["renewable energy developments"],
        "credential": "huggingface_apikey",
        "max_client_batch_size": 32,
    },
)

إذا كنت تستخدم فقط بيانات الاعتماد على مستوى المزود أو متغير البيئة، فاحذف credential من معلمات الدالة.

يصف الجدول التالي معلمات Hugging Face Ranker:

المعلمةمطلوب؟الوصف
rerankerنعمتنفيذ إعادة الترتيب. اضبط هذه القيمة على model.
providerنعممزود النموذج. اضبط هذه القيمة على huggingface.
model_nameنعممعرف نموذج Hugging Face الخاص بنموذج يتم تقديمه عبر hf-inference لمهمة sentence-similarity.
queriesنعمسلاسل الاستعلام المستخدمة لإعادة الترتيب. أدخل سلسلة واحدة فقط لكل استعلام بحث، حتى عندما يستخدم الاسترجاع الأولي متجهات الاستعلام.
hf_providerلامسار مزود الاستدلال (Inference Provider) الخاص بـ Hugging Face. القيمة الافتراضية والوحيدة المدعومة في Milvus 2.6.20 هي hf-inference.
credentialلاتسمية بيانات الاعتماد المحددة في قسم المستوى الأعلى credential في milvus.yaml. هذه القيمة ليست الرمز نفسه.
max_client_batch_sizeلاالحد الأقصى لعدد النصوص المرشحة المرسلة في طلب Hugging Face واحد. القيمة الافتراضية هي 32 ، ويجب أن تكون القيمة أكبر من 0.

الخطوة 3: البحث باستخدام أداة الترتيب

قم بتمرير الدالة عبر المعلمة ranker في search():

query_vector = [0.12, 0.21, 0.29, 0.41]

results = client.search(
    collection_name=collection_name,
    data=[query_vector],
    anns_field="dense",
    limit=3,
    output_fields=["document"],
    ranker=hugging_face_ranker,
    consistency_level="Strong",
)

print(results)

يقوم Milvus أولاً باسترداد المرشحين من dense ، ثم يستخدم نص الاستعلام الموجود في queries ونص المرشح الموجود في document لحساب درجات تشابه الجمل. يتم ترتيب المرشحين المعروضين وفقًا لدرجات Hugging Face.

استكشاف الأخطاء وإصلاحها

النموذج غير متاح لتشابه الجمل

افتح صفحة النموذج على Hugging Face وتحقق من قسم " Inference Providers " (مزودي الاستدلال). تأكد من أن hf-inference يقدم النموذج لـ sentence-similarity. إذا لم يكن الأمر كذلك، فاختر نموذجًا آخر يدعم هذه المهمة.

عدد سلاسل الاستعلام لا يتطابق مع طلب البحث

يجب أن يساوي عدد سلاسل الاستعلام في queries عدد استعلامات البحث (nq). للبحث باستخدام متجه استعلام واحد، أدخل سلسلة استعلام واحدة فقط.

النص المرشح مفقود أو قابل للفراغ

تأكد من أن input_field_names يحتوي على حقل واحد فقط غير قابل للفراغ VARCHAR وأن كل كيان مرشح يحتوي على نص في هذا الحقل.

يبلغ Milvus عن فقدان بيانات اعتماد Hugging Face

تأكد من وجود تسمية بيانات اعتماد الوظيفة في milvus.yaml ، وأن التسمية على مستوى المزود صالحة، أو أن MILVUS_HUGGINGFACE_API_KEY موجود في بيئة خدمة Milvus.

الخطوات التالية