TATECHATLAS
◎ हिन्दी
कृत्रिम बुद्धिमत्ता

एज़ुर AI सर्च में वेक्टर और पाठ क्षेत्रों के साथ हाइब्रिड सर्च कॉन्फ़िगर करना

एज़ुर AI सर्च में इंडेक्स बनाना, एम्बेडिंग्स उत्पन्न करना, और पूर्ण पाठ और वेक्टर सर्च के संयोजन के साथ हाइब्रिड क्वेरी के निष्पादन के लिए चरण-दर-चरण मार्गदर्शिका।

इस पृष्ठ पर

हाइब्रिड सर्च कॉन्फ़िगर करने के लिए, इंडेक्स स्कीमा में वेक्टर क्षेत्रों को जोड़ा जाता है, पाठिक सामग्री के लिए एम्बेडिंग्स बनाए जाते हैं, और सर्च और वेक्टरक्वेरी पैरामीटर्स के साथ एक क्वेरी बनाई जाती है। परिणाम RRF (Reciprocal Rank Fusion) द्वारा मर्ज किए जाते हैं, और वैकल्पिक रूप से एक सेमेंटिक रिरैंकर सक्षम किया जा सकता है। मुख्य कदम: इंडेक्स स्कीमा परिभाषा, एम्बेडिंग उत्पादन, k और ओवरसैम्पलिंग कॉन्फ़िगरेशन, सर्च के साथ फ़िल्टर और फेसेट्स के साथ क्वेरी निर्माण, वैकल्पिक सेमेंटिक रिरैंकर के समावेश, परीक्षण, और क्वोटा और लागत का निगरानी करना।

1. वेक्टर और पाठ क्षेत्रों के साथ इंडेक्स स्कीमा परिभाषा

शुरुआत में, एक एज़ुर AI सर्च इंडेक्स बनाया जाता है जिसमें पूर्ण-पाठ सर्च के लिए सामान्य पाठ क्षेत्र और सेमेंटिक सर्च के लिए वेक्टर क्षेत्र होते हैं। वेक्टर क्षेत्र पाठिक सामग्री से निकाले गए संख्यात्मक एम्बेडिंग्स को संग्रहित करते हैं। इंडेक्स में कम से कम एक खोजने योग्य पाठ क्षेत्र और एक वेक्टर क्षेत्र होना चाहिए। जब इंडेक्स को पोर्टल या REST API के माध्यम से बनाया जाता है, तो वेक्टर क्षेत्र को 'Edm.Single' प्रकार और 'searchable': true गुण के साथ घोषित किया जाता है, लेकिन वे सामान्य पूर्ण-पाठ सर्च के लिए उपयोग नहीं किए जाते; उनका कार्य वेक्टर समानता है।

माइक्रोसॉफ्ट लर्न दस्तावेज़ में एक हाइब्रिड क्वेरी का उदाहरण दिया गया है जिसमें सर्च पैरामीटर को DescriptionVector और Description_frVector क्षेत्रों के साथ vectorQueries के साथ जोड़ा जाता है। यह एक एकल क्वेरी को शब्द सर्च और सेमेंटिक सर्च के लिए उपयोग करने की अनुमति देता है, जिसके परिणाम RRF एल्गोरिदम द्वारा मर्ज किए जाते हैं।

महत्वपूर्ण: वेक्टर क्षेत्र को फ़िल्टर में सीधे उपयोग नहीं किया जा सकता है। मेटाडेटा (उदाहरण के लिए, श्रेणी, भूगोल) के लिए, एक अलग पाठ या संख्यात्मक क्षेत्र की आवश्यकता होती है जिस पर filterable और/या facetable गुण लगाए जाते हैं।

POST https://my-service.search.windows.net/indexes/hotels-vector-quickstart/docs/search?api-version=2026-04-01\ncontent-type: application/JSON\n{\n  "count": true,\n  "search": "historic hotel walk to restaurants and shopping",\n  "select": "HotelId, HotelName, Category, Description, Address/City, Address/StateProvince",\n  "filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",\n  "vectorFilterMode": "postFilter",\n  "facets": ["Address/StateProvince"],\n  "vectorQueries": [{\n    "kind": "vector",\n    "vector": [0.1,0.2,…],\n    "k": 50,\n    "fields": "DescriptionVector",\n    "exhaustive": true,\n    "oversampling": 20\n  }],\n  "skip": 0,\n  "top": 10,\n  "queryType": "semantic",\n  "queryLanguage": "en-us",\n  "semanticConfiguration": "my-semantic-config"\n}

2. पाठ क्षेत्रों के लिए एम्बेडिंग्स उत्पन्न करना या आयात करना

एम्बेडिंग्स को दो तरीकों से उत्पन्न किया जा सकता है: एज़ुर AI सर्च की इंट्रिन्सिक क्षमताओं का उपयोग करके (इंडेक्सर पाइपलाइन के साथ एज़ुर ओपनAI) या बाहरी मॉडल (ओपनAI एम्बेडिंग्स, SBERT, आदि) का उपयोग करके, और फिर सीधे इंडेक्स में वेक्टर लोड किए जाते हैं। पहले मामले में, एक स्किल्सेट कॉन्फ़िगर किया जाता है जो पाठ को छोटे टुकड़ों में बाँटता है और एम्बेडिंग मॉडल को कॉल करता है। दूसरे मामले में, वेक्टर बाहरी तरीके से बनाए जाते हैं और डॉक्यूमेंट के निर्माण या अपडेट के समय API के माध्यम से पास किए जाते हैं।

दस्तावेज़ में एज़ुर ओपनAI का उपयोग एम्बेडिंग उत्पादन के लिए सुझाया गया है, विशेष रूप से text-embedding-ada-002 मॉडल। एम्बेडिंग्स की आयाम समान होनी चाहिए (उदाहरण के लिए, Ada के लिए 1536), और यह मान वेक्टर क्षेत्र के निर्माण के समय निर्धारित किया जाता है।

जब 'डेटा आयात' जादू के माध्यम से डेटा आयात किया जाता है, तो वेक्टरीकरण का एक विकल्प चुना जा सकता है, और सेवा लोड की गई सामग्री के लिए एम्बेडिंग्स को स्वचालित रूप से उत्पन्न करेगी यदि एक उपयुक्त डेटा स्रोत और स्किल्सेट कॉन्फ़िगर किया गया है।

/* Example call to Azure OpenAI for obtaining an embedding */\nPOST https://my-openai-resource.openai.azure.com/openai/deployments/text-embedding-ada-002/embeddings?api-version=2024-02-15\nHeaders: api-key: YOUR_API_KEY\n{\n  "input": "historic hotel walk to restaurants and shopping"\n}

3. वेक्टर सर्च पैरामीटर्स कॉन्फ़िगर करना (k, ओवरसैम्पलिंग, एक्सहाउसिव)

वेक्टरक्वेरी में k पैरामीटर निर्दिष्ट करता है कि प्रत्येक वेक्टर के लिए कितने सबसे करीबी पड़ोसी लौटाए जाएंगे। यदि सेमेंटिक रिरैंकर का उपयोग किया जाता है, तो k >= 50 के मान को सुझाया जाता है, ताकि उसके लिए पर्याप्त उम्मीदवार हों।

ओवरसैम्पलिंग पैरामीटर एक अतिरिक्त प्रतिशत उम्मीदवारों को निकालने के लिए निर्दिष्ट करता है, जो HNSW इंडेक्स का उपयोग करते समय परिणाम की गुणवत्ता को सुधारने में मदद करता है। सामान्य रूप से 10 से 50 तक के मान लैटेंसी और सटीकता के बीच एक अच्छा संतुलन प्रदान करते हैं।

एक्सहाउसिव पैरामीटर निर्दिष्ट करता है कि क्या निकटतम पड़ोसियों को ढूंढने के लिए पूर्ण स्कैन का उपयोग किया जाए। एक्सहाउसिव: true का सेट करना सच्चे k सबसे करीबी पड़ोसियों को ढूंढने की गारंटी देता है, लेकिन लैटेंसी बढ़ाता है। डिफ़ॉल्ट रूप से असत्य है, और अधिकांश स्थितियों में HNSW पर्याप्त है।

हाइब्रिड-सर्च-ओवरव्यू दस्तावेज़ में, दो वेक्टरक्वेरी का उदाहरण दिया गया है: एक जिसमें exhaustive=true और oversampling=20 है, दूसरा जिसमें exhaustive=false और oversampling=10 है। कॉन्फ़िगरेशन इंडेक्स के आकार और सम्बन्धितता की आवश्यकताओं पर निर्भर करता है।

नोट: k और ओवरसैम्पलिंग को बढ़ाना सटीकता को बढ़ाता है, लेकिन यह क्वेरी लैटेंसी को भी बढ़ाता है। हमेशा एक प्रतिनिधित्वात्मक डेटा नमूने पर मान का परीक्षण करें।

"vectorQueries": [{\n    "kind": "vector",\n    "vector": <array> ,\n    "k": 50,\n    "fields": "DescriptionVector",\n    "exhaustive": true,\n    "oversampling": 20\n }]

4. सर्च और वेक्टरक्वेरी के साथ हाइब्रिड क्वेरी बनाना

एक हाइब्रिड क्वेरी सर्च पैरामीटर (पूर्ण-पाठ क्वेरी) और एक या अधिक वेक्टरक्वेरी का संयोजन है। अनुरोध को api-version=2026-04-01 (या वर्तमान संस्करण) के साथ इंडेक्स एंडपॉइंट पर एकल HTTP POST संदेश के रूप में भेजा जाता है।

सर्वर पूर्ण-पाठ और वेक्टर सर्च को समानांतर रूप से निष्पादित करता है, फिर RRF (Reciprocal Rank Fusion) एल्गोरिदम का उपयोग करके परिणामों को मर्ज करता है। RRF एक दस्तावेज़ को दोनों परिणाम सूची में स्थिति के आधार पर एक संयुक्त रैंक देता है, जिससे प्राकृतिक शब्द सर्च और सेमेंटिक समानता के लाभों का संयोजन किया जा सकता है।

क्वेरी में queryType: semantic को निर्दिष्ट करके सेमेंटिक रिरैंकर को सक्षम किया जा सकता है, जो RRF परिणामों पर मशीन रीडिंग का उपयोग करके उन्हें प्रश्न संदर्भ के आधार पर पुनः रैंक करता है। यह विचार के अनुसार प्रश्नों के लिए उपयोगी है जहां अर्थ शब्द संगति से अधिक महत्वपूर्ण है।

फ़िल्टर और फेसेट्स को वेक्टर क्षेत्रों के बजाय अन्य क्षेत्रों पर लागू किया जाता है। उदाहरण के लिए, भूगोलीय फ़िल्टर geo.distance या श्रेणी फ़िल्टर RRF के बाद मर्ज किए गए परिणाम पर काम करते हैं। यह महत्वपूर्ण है कि vectorFilterMode के व्यवहार का परीक्षण करें (preFilter vs postFilter), क्योंकि फ़िल्टर लागू करने का क्रम प्रदर्शन और लौटाए गए दस्तावेज़ सेट पर प्रभाव डालता है।

अधिकारी क्वेरी का उदाहरण अनुभाग 1 में प्रदान किया गया है और इसमें फेसेट्स, फ़िल्टर, वेक्टरक्वेरी और सेमेंटिककॉन्फ़िगरेशन शामिल हैं।

POST https://my-service.search.windows.net/indexes/hotels-vector-quickstart/docs/search?api-version=2026-04-01\ncontent-type: application/JSON\n{\n  "count": true,\n  "search": "historic hotel walk to restaurants and shopping",\n  "select": "HotelId, HotelName, Category, Description, Address/City, Address/StateProvince",\n  "filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",\n  "vectorFilterMode": "postFilter",\n  "facets": ["Address/StateProvince"],\n  "vectorQueries": [{\n    "kind": "vector",\n    "vector": [0.1,0.2,…],\n    "k": 50,\n    "fields": "DescriptionVector",\n    "exhaustive": true,\n    "oversampling": 20\n  }],\n  "skip": 0,\n  "top": 10,\n  "queryType": "semantic",\n  "queryLanguage": "en-us",\n  "semanticConfiguration": "my-semantic-config"\n}

5. गैर-वेक्टर क्षेत्रों पर फ़िल्टर और फेसेट्स का लागू करना

RRF मर्जिंग के बाद, फ़िल्टर और फेसेट्स अंतिम दस्तावेज़ सेट पर कार्य करते हैं। इसके द्वारा मौजूदा खोज कार्यक्षमता को बनाए रखा जा सकता है: ज्यामितीय फ़िल्टर, गुणधर्म फ़िल्टर, नेविगेशन के लिए फेसेट बकेट।

हाइब्रिड खोज में फ़िल्टर फुल-टेक्स्ट और वेक्टर खोज के उत्पादन के बाद लागू किए जाते हैं (प्रमुख पोस्टफ़िल्टर), लेकिन वेक्टर खोज से पहले दस्तावेज़ को बाहर करने के लिए vectorFilterMode: preFilter के रूप में कॉन्फ़िगर किया जा सकता है। परीक्षण दर्शाते हैं कि पोस्टफ़िल्टर अक्सर बेहतर प्रासंगिकता देता है, क्योंकि फ़िल्टर वेक्टर खोज से पहले उम्मीदवारों को सीमित नहीं करता है।

फेसेट्स (facets) का उपयोग करके परिणामों को क्षेत्रों के आधार पर विभाजित किया जा सकता है, जैसे Address/StateProvince, जैसा कि उदाहरण में दिखाया गया है। फेसेट परिणाम मर्ज किए गए परिणामों के वितरण को प्रतिबिंबित करते हैं, न कि केवल एक खोज घटक के बीच।

यह ध्यान रखना महत्वपूर्ण है कि वेक्टर क्षेत्रों को सीधे फ़िल्टर नहीं किया जा सकता है। किसी भी मेटाडेटा द्वारा चयन की शर्तें अलग टेक्स्ट या संख्यात्मक क्षेत्रों पर निर्भर करती हैं, जिन्हें सूचिकरण के समय उपयुक्त गुणों के साथ चिह्नित किया जाना चाहिए।

"filter": "geo.distance(Location, geography'POINT(-77.03241 38.90166)') le 300",\n  "facets": ["Address/StateProvince"]

6. वैकल्पिक: सेमैंटिक रिरैंकर को सक्षम करना ताकि पुनर्व्यवस्था की जा सके

सेमैंटिक रिरैंकर को एक अनुरोध में queryType: semantic और semanticConfiguration को निर्दिष्ट करके उपलब्ध कराया जा सकता है। रिरैंकर मशीन रीडिंग का उपयोग करके मर्ज किए गए RRF परिणामों का विश्लेषण करता है और उन्हें खोज के प्रश्न के सेमैंटिक संगति के आधार पर पुनर्व्यवस्थित करता है।

यह ऐसे प्रश्नों के लिए खोज की गुणवत्ता को सुधारता है जहाँ अवधारणात्मक पास का महत्व है (उदाहरण के लिए, समानार्थी, बहुभाषी खोज)। प्रदर्शन दर्शाते हैं कि सेमैंटिक रिरैंकर के साथ हाइब्रिड खोज पाठ या वेक्टर खोज की तुलना में विश्वसनीयता में महत्वपूर्ण सुधार प्रदान करती है।

सेमैंटिक रिरैंकर कॉन्फ़िगरेशन सूचिकरण स्तर पर सेट किया जाता है (खंड "सेमैंटिक कॉन्फ़िगरेशन")। अनुरोध में, कॉन्फ़िगरेशन का नाम दिखाया जाता है, जैसे कि भाषा (queryLanguage)।

अगर सेमैंटिक रिरैंकर की आवश्यकता नहीं है, तो एक अनुरोध को queryType: semantic के बिना भेजा जा सकता है। इस मामले में परिणाम केवल RRF के आधार पर रैंक किए जाते हैं, जो BM25 (पाठ के लिए) और HNSW/eKNN (वेक्टर के लिए) का संयोजन है।

 "queryType": "semantic",\n  "queryLanguage": "en-us",\n  "semanticConfiguration": "my-semantic-config"

7. k, ओवरसैम्पलिंग और फ़िल्टर व्यवहार का परीक्षण और चक्र करना

निर्माण के बाद, आपके क्षेत्र के लिए स्पीड-एक्सेक्यूटिविटी अनुपात के लिए अनुकूलित करने के लिए k, ओवरसैम्पलिंग और फ़िल्टर व्यवहार का परीक्षण करना आवश्यक है।

एक प्रतिनिधित्वपूर्ण खोज नमूने पर विभिन्न k मान (उदाहरण के लिए, 10, 50, 100) और ओवरसैम्पलिंग (10, 20, 50) का परीक्षण करें। @search.rerankerScore और प्रतिक्रिया में दस्तावेज़ क्रम में परिवर्तन का ध्यान रखें।

सेमैंटिक रिरैंकर के साथ और बिना परिणामों की तुलना करें। अगर k बहुत छोटा है, तो सेमैंटिक रिरैंकर को पर्याप्त उम्मीदवार मिलेंगे नहीं, और पुनर्व्यवस्था कम प्रभावी होगी।

प्रश्न लैटेंसी का निगरानी करें: k और ओवरसैम्पलिंग को बढ़ाना प्रतिक्रिया समय को बढ़ाता है। सेमैंटिक रिरैंकर का उपयोग करते समय अपनी स्वीकार्य प्रासंगिकता के लिए न्यूनतम k का पता लगाएं।

एज़ुर पोर्टल या REST API डिबगिंग टूल्स का उपयोग करें: parameter count: true के साथ कुल मिलाकर संख्या को देखा जा सकता है, और @search.rerankerScore क्षेत्र सेमैंटिक रिरैंकर का मूल्यांकन दिखाता है।

/* Example checking results with count */\n{\n  "count": true,\n  "search": "...",\n  "vectorQueries": [{"kind": "vector", "vector": [...], "k": 50, ...}],\n  "top": 10\n}

8. वेक्टर सूचिकरण क्वोटा और लागत की व्यवस्था और निगरानी

आपका खोज सेवा 2024 के अप्रैल 3 के बाद बनाई गई होनी चाहिए - ऐसी सेवाएं अधिक वेक्टर सूचिकरण क्वोटा प्रदान करती हैं। अगर सेवा पुरानी है, तो इसे अपडेट करके बड़े क्वोटा प्राप्त किए जा सकते हैं।

एज़ुर ओपन AI या अन्य मॉडलों के माध्यम से एम्बेडिंग उत्पन्न करना मॉडल प्रदाता के शुल्क का कारण बनता है। इन लागतों को डेटा आयतन और अपडेट आवृत्ति की योजना बनाते समय ध्यान में रखा जाना चाहिए।

वेक्टर सूचिकरण का उपयोग एज़ुर मॉनिटर मीट्रिक्स के माध्यम से निगरानी करें: वेक्टर क्षेत्रों की संख्या, आयाम, दस्तावेज़ की संख्या। क्वोटा के ऊपर जाने पर सूचिकरण या खोज की त्रुटियां हो सकती हैं।

हाइब्रिड खोज के लिए, प्रश्न लैटेंसी का निगरानी करें: बड़ा k और ओवरसैम्पलिंग लोड को बढ़ाता है। अगर लैटेंसी अस्वीकार्य हो जाती है, तो ओवरसैम्पलिंग को कम करें या HNSW कॉन्फ़िगरेशन को दोबारा जांचें।

इसके लिए क्वोटा अतिक्रमण के अलर्ट सेट करना और नियमित रूप से सूचिकरण की स्थिति की जांच करना सलाह दी जाती है, विशेष रूप से बड़े दस्तावेज़ बैच के बाद।

/* Checking service version and quotas */\nGET https://my-service.search.windows.net?api-version=2026-04-01\nHeaders: api-key: YOUR_API_KEY

क्या जाँचें

  • इंडेक्स में कम से कम एक खोजने योग्य पाठ क्षेत्र और एक वेक्टर क्षेत्र होना चाहिए, जिनकी एम्बेडिंग आयाम समान हों।
  • एम्बेडिंग्स उत्पन्न किए जाते हैं और वेक्टर क्षेत्रों में लोड किए जाते हैं (विंडोज़ इंडेक्सर या सीधे API के माध्यम से)।
  • हाइब्रिड क्वेरी में सर्च और वेक्टरक्वेरी के साथ सही k और क्षेत्र मान हों।
  • जब सेमेंटिक रिरैंकर का उपयोग किया जाता है, तो queryType: semantic और semanticConfiguration सेट किए जाते हैं।
  • फ़िल्टर और फेसेट्स पाठ/संख्यात्मक क्षेत्रों पर संदर्भ करते हैं, न कि वेक्टर क्षेत्रों पर सीधे।
  • सेवा संस्करण 2024 के अप्रैल 3 के बाद का नहीं होना चाहिए, जिससे वेक्टर क्वोटा बढ़ जाते हैं।
  • एम्बेडिंग्स और क्वेरी लैटेंसी के लिए लागत निगरानी सक्षम होनी चाहिए।

वेक्टर क्षेत्र को फ़िल्टर में सीधे उपयोग नहीं किया जा सकता है। मेटाडेटा (उदाहरण के लिए, श्रेणी, भूगोल) के लिए, एक अलग पाठ या संख्यात्मक क्षेत्र की आवश्यकता होती है जिस पर filterable और/या facetable गुण लगाए जाते हैं।

स्रोत

  1. Microsoft Learn: vector search ↗
  2. Microsoft Learn: hybrid search ↗
  3. scikit-learn: precision_score ↗
ऊपर जाएँ ↑