إنشاء استعلام مختلط في Azure الذكاء الاصطناعي Search

يجمع البحث المختلط بين استعلامات كلمة أساسية واحدة أو أكثر مع استعلامات متجه واحد أو أكثر في طلب بحث واحد. يتم تنفيذ الاستعلامات بالتوازي. يتم دمج النتائج وإعادة ترتيبها بواسطة نتائج بحث جديدة، باستخدام Fusion Rank Fusion (RRF) لإرجاع مجموعة نتائج مصنفة واحدة.

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

لتعريف استعلام مختلط، استخدم REST API 2023-11-01 أو 2023-10-01-preview أو 2024-03-01-preview أو Search Explorer في مدخل Microsoft Azure أو إصدارات أحدث من Azure SDKs.

المتطلبات الأساسية

  • فهرس بحث يحتوي على الحقول المتجهة searchable وغير الوسيطة. راجع إنشاء فهرس وإضافة حقول متجه إلى فهرس بحث.

  • (اختياري) إذا كنت تريد الترتيب الدلالي، يجب أن تكون خدمة البحث الخاصة بك من المستوى الأساسي أو أعلى، مع تمكين الترتيب الدلالي.

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

تشغيل استعلام مختلط في Search Explorer

  1. في Search Explorer، تأكد من أن إصدار واجهة برمجة التطبيقات هو 2023-10-01-preview أو أحدث.

  2. ضمن عرض، حدد طريقة عرض JSON.

  3. استبدل قالب الاستعلام الافتراضي باستعلام مختلط، مثل الاستعلام الذي يبدأ في السطر 539 لمثال التشغيل السريع للمتجه. للإيجاز، يتم اقتطاع المتجه في هذه المقالة.

    يحتوي الاستعلام المختلط على استعلام نصي محدد في search، واستعلام متجه محدد ضمن vectorQueries.vector.

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

    {
        "count": true,
        "search": "historic hotel walk to restaurants and shopping",
        "select": "HotelId, HotelName, Category, Tags, Description",
        "top": 7,
        "vectorQueries": [
            {
                "vector": [0.01944167, 0.0040178085, -0.007816401 ... <remaining values omitted> ], 
                "k": 7,
                "fields": "DescriptionVector",
                "kind": "vector",
                "exhaustive": true
            }
        ]
    }
    
  4. حدد بحث.

طلب استعلام مختلط (REST API)

يجمع الاستعلام المختلط بين البحث عن النص والبحث عن المتجهات، حيث تأخذ المعلمة search سلسلة استعلام وتأخذ vectorQueries.vector استعلام المتجه. يقوم محرك البحث بتشغيل استعلامات النص الكامل والمتجه بالتوازي. يتم تقييم اتحاد جميع التطابقات من أجل الصلة باستخدام Fusion Rank متبادل (RRF) ويتم إرجاع مجموعة نتائج واحدة في الاستجابة.

يتم إرجاع النتائج في نص عادي، بما في ذلك المتجهات في الحقول التي تم وضع علامة عليها ك retrievable. نظرا لأن المتجهات الرقمية غير مفيدة في نتائج البحث، اختر الحقول الأخرى في الفهرس كوكيل لمطابقة المتجه. على سبيل المثال، إذا كان الفهرس يحتوي على حقلي "descriptionVector" و"descriptionText"، يمكن أن يتطابق الاستعلام على "descriptionVector" ولكن يمكن أن تظهر نتيجة البحث "descriptionText". استخدم المعلمة select لتحديد الحقول القابلة للقراءة من قبل الإنسان فقط في النتائج.

يوضح المثال التالي تكوين استعلام مختلط.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "vectorQueries": [{
        "vector": [
            -0.009154141,
            0.018708462,
            . . . 
            -0.02178128,
            -0.00086512347
        ],
        "fields": "DescriptionVector",
        "kind": "vector",
        "exhaustive": true,
        "k": 10
    }],
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelName, Description, Address/City",
    "top": "10"
}

النقاط الرئيسية:

  • يتم تحديد سلسلة استعلام المتجه من خلال الخاصية vectorQueries.vector . يتم تنفيذ الاستعلام مقابل حقل "DescriptionVector". تعيين kind إلى "متجه" للإشارة إلى نوع الاستعلام. اختياريا، قم بتعيين exhaustive إلى true للاستعلام عن المحتويات الكاملة لحقل المتجه.

  • يتم تحديد البحث عن الكلمة الأساسية من خلال search الخاصية . ينفذ بالتوازي مع استعلام المتجه.

  • k يحدد عدد أقرب تطابقات جار يتم إرجاعها من استعلام المتجه وتوفيرها إلى مصنف RRF.

  • top يحدد عدد التطابقات التي يتم إرجاعها في الاستجابة بالكامل. في هذا المثال، تتضمن الاستجابة 10 نتائج، بافتراض وجود 10 تطابقات على الأقل في النتائج المدمجة.

بحث مختلط مع عامل تصفية

يضيف هذا المثال عامل تصفية، يتم تطبيقه على filterable الحقول غير الخاصة بفهرس البحث.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "vectorQueries": [
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "k": 10
        }
    ],
    "search": "historic hotel walk to restaurants and shopping",
    "vectorFilterMode": "postFilter",
    "filter": "ParkingIncluded",
    "top": "10"
}

النقاط الرئيسية:

  • يتم تطبيق عوامل التصفية على محتوى الحقول القابلة للتصفية. في هذا المثال، الحقل ParkingIncluded هو قيمة منطقية ويتم وضع علامة عليه كما filterable في مخطط الفهرس.

  • في الاستعلامات المختلطة، يمكن تطبيق عوامل التصفية قبل تنفيذ الاستعلام لتقليل سطح الاستعلام، أو بعد تنفيذ الاستعلام لاقتطاع النتائج. "preFilter" هو الافتراضي. لاستخدام postFilter، قم بتعيين وضع معالجة عامل التصفية كما هو موضح في هذا المثال.

  • عند نشر نتائج الاستعلام، قد يكون عدد النتائج أقل من top-n.

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

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "vectorQueries": [
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "k": 50
        }
    ],
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelName, Description, Tags",
    "queryType": "semantic",
    "semanticConfiguration": "my-semantic-config",
    "captions": "extractive",
    "answers": "extractive",
    "top": "50"
}

النقاط الرئيسية:

  • يقبل الترتيب الدلالي ما يصل إلى 50 نتيجة من الاستجابة المدمجة. قم بتعيين "k" و"top" إلى 50 للتمثيل المتساوي لكلا الاستعلامين.

  • مطلوب "queryType" و"semanticConfiguration".

  • "التسميات التوضيحية" و"الإجابات" اختيارية. يتم استخراج القيم من نص حرفي في النتائج. يتم إرجاع إجابة فقط إذا كانت النتائج تتضمن محتوى له خصائص الإجابة على الاستعلام.

البحث المختلط الدلالي باستخدام عامل التصفية

إليك آخر استعلام في المجموعة. إنه نفس الاستعلام المختلط الدلالي مثل المثال السابق، ولكن مع عامل تصفية.

POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/docs/search?api-version=2023-11-01
Content-Type: application/json
api-key: {{admin-api-key}}
{
    "vectorQueries": [
        {
            "vector": [
                -0.009154141,
                0.018708462,
                . . . 
                -0.02178128,
                -0.00086512347
            ],
            "fields": "DescriptionVector",
            "kind": "vector",
            "k": 50
        }
    ],
    "search": "historic hotel walk to restaurants and shopping",
    "select": "HotelName, Description, Tags",
    "queryType": "semantic",
    "semanticConfiguration": "my-semantic-config",
    "captions": "extractive",
    "answers": "extractive",
    "filter": "ParkingIsIncluded'",
    "vectorFilterMode": "postFilter",
    "top": "50"
}

النقاط الرئيسية:

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

  • يتم تطبيق التصفية المسبقة قبل تنفيذ الاستعلام. إذا قللت التصفية المسبقة منطقة البحث إلى 100 مستند، يتم تنفيذ استعلام المتجه عبر حقل "DescriptionVector" لتلك المستندات ال 100، مع إرجاع أفضل تطابقات k=50. ثم تمرر هذه المستندات المطابقة ال 50 إلى RRF للحصول على النتائج المدمجة، ثم إلى المصنف الدلالي.

  • يتم تطبيق Postfilter بعد تنفيذ الاستعلام. إذا قام k=50 بإرجاع 50 تطابقا على جانب استعلام المتجه، فسيتم تطبيق عامل التصفية اللاحق على 50 تطابقا، ما يقلل النتائج التي تفي بمعايير التصفية، مما يترك لك أقل من 50 مستندا لتمريرها إلى المصنف الدلالي

تكوين استجابة استعلام

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

الحقول في استجابة

تتكون نتائج البحث من retrievable حقول من فهرس البحث. والنتيجة هي إما:

  • كافة retrievable الحقول (افتراضي REST API).
  • الحقول المدرجة بشكل صريح في معلمة "تحديد" في الاستعلام.

استخدمت الأمثلة الواردة في هذه المقالة عبارة "select" لتحديد حقول النص (nonvector) في الاستجابة.

إشعار

لا يتم تصميم الخطوط المتجهة عكسيا في نص قابل للقراءة البشرية، لذا تجنب إرجاعها في الاستجابة. بدلا من ذلك، اختر الحقول غير الخاصة بالحقول التي تمثل مستند البحث. على سبيل المثال، إذا كان الاستعلام يستهدف حقل "DescriptionVector"، فسترجع حقلا نصيا مكافئا إذا كان لديك حقل ("الوصف") في الاستجابة.

عدد النتائج

قد يتطابق الاستعلام مع أي عدد من المستندات، مثل كل منها إذا كانت معايير البحث ضعيفة (على سبيل المثال "search=*" لاستعلام فارغ). نظرا لأنه نادرا ما يكون من العملي إرجاع نتائج غير مقيدة، يجب تحديد حد أقصى للاستجابة:

  • "k": n نتائج استعلامات المتجهات فقط
  • "top": n نتائج الاستعلامات المختلطة التي تتضمن معلمة "بحث"

كل من "k" و"top" اختيارية. غير محدد، العدد الافتراضي للنتائج في الاستجابة هو 50. يمكنك تعيين "أعلى" و"تخطي" إلى صفحة من خلال المزيد من النتائج أو تغيير الافتراضي.

إذا كنت تستخدم الترتيب الدلالي، فمن أفضل الممارسات تعيين كل من "k" و"top" إلى 50 على الأقل. يمكن أن يستغرق ترتيب الدلالي ما يصل إلى 50 نتيجة. بتحديد 50 لكل استعلام، تحصل على تمثيل متساو من كلا النظامين الفرعيين للبحث.

التصنيف

يتم إنشاء مجموعات متعددة للاستعلامات المختلطة، مع إعادة التشغيل الدلالي الاختياري أو بدونه. يتم حساب ترتيب النتائج بواسطة Fusion Rank (RRF).

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

بحث متجه واحد: @search.score للحصول على النتائج مرتبة بواسطة تشابه جيب التمام (دالة مسافة تشابه المتجه الافتراضي).

{
    "@search.score": 0.8399121,
    "HotelId": "49",
    "HotelName": "Old Carrabelle Hotel",
    "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
    "Category": "Luxury",
    "Address": {
    "City": "Arlington"
    }
}

البحث المختلط: @search.score للحصول على نتائج مختلطة مصنفة باستخدام Fusion Rank.

{
    "@search.score": 0.032786883413791656,
    "HotelId": "49",
    "HotelName": "Old Carrabelle Hotel",
    "Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
    "Category": "Luxury",
    "Address": {
    "City": "Arlington"
    }
}

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

كخطوة تالية، نوصي بمراجعة التعليمات البرمجية التجريبية ل Python أو C#‎ أو JavaScript.