वेक्टर खोज क्वेरी पैटर्न लागू करें
वैक्टर संग्रहीत और चुनी गई खोज रणनीति के साथ, आप प्रश्न लिखने के लिए तैयार हैं। यह इकाई टी-एसक्यूएल कार्यों को कवर करती है जो वेक्टर खोज को शक्ति प्रदान करती है और आपको दिखाती है कि उन्हें प्रभावी ढंग से कैसे संयोजित किया जाए।
वेक्टर खोज क्वेरी एक सामान्य पैटर्न का पालन करती हैं: क्वेरी वेक्टर उत्पन्न करें या पुनर्प्राप्त करें, संग्रहीत वैक्टर की दूरी की गणना करें, और निकटतम मिलान वापस करें। SQL सर्वर चार फ़ंक्शंस प्रदान करता है जो इस पैटर्न का समर्थन करने के लिए एक साथ काम करते हैं: VECTOR_DISTANCE, , VECTOR_SEARCHVECTOR_NORMALIZE, और VECTORPROPERTY.
VECTOR_DISTANCE के साथ दूरियों की गणना करें
VECTOR_DISTANCE फ़ंक्शन आपके द्वारा निर्दिष्ट मीट्रिक का उपयोग करके दो वैक्टर के बीच की दूरी की गणना करता है। यह फ़ंक्शन सटीक निकटतम पड़ोसी खोज करता है, प्रत्येक योग्यता पंक्ति की दूरी की गणना करता है। व्यावहारिक रूप से, यह आपकी खोज एम्बेडिंग की तुलना प्रत्येक संग्रहीत एम्बेडिंग से करता है ताकि यह पता लगाया जा सके कि कौन से सबसे समान हैं, जैसे कि सर्वोत्तम मिलान खोजने के लिए कैटलॉग में प्रत्येक उत्पाद की जाँच करना।
VECTOR_DISTANCE(metric, vector1, vector2)
मीट्रिक होना 'cosine'चाहिए , , 'euclidean'या .'dot' दोनों वैक्टर में आयामों की संख्या समान होनी चाहिए।
विवरण एम्बेडिंग के आधार पर समान उत्पादों को खोजने के लिए यहां एक विशिष्ट पैटर्न दिया गया है:
-- Generate an embedding for the user's search phrase
DECLARE @searchVector VECTOR(1536);
SELECT @searchVector = AI_GENERATE_EMBEDDINGS('lightweight hiking boots' USE MODEL MyEmbeddingModel);
SELECT TOP 10
ProductID,
Name,
VECTOR_DISTANCE('cosine', @searchVector, DescriptionVector) AS Distance
FROM dbo.Products
ORDER BY Distance;
यह क्वेरी दो चरणों में काम करती है। सबसे पहले, यह खोज वाक्यांश "लाइटवेट हाइकिंग बूट्स" को उसी मॉडल का उपयोग करके एम्बेडिंग में परिवर्तित करता है जिसने संग्रहीत DescriptionVector मान बनाए थे। दूसरा, यह प्रत्येक पंक्ति DescriptionVectorके बीच @searchVector और कोसाइन दूरी की गणना करता है।
ORDER BY Distance खंड परिणामों को सबसे छोटी दूरी (सबसे समान) से सबसे बड़ी तक क्रमबद्ध करता है, और TOP 10 केवल पहली 10 पंक्तियों को लौटाता है। चूंकि छोटी दूरी का मतलब अधिक समान वैक्टर है, इसलिए यह संयोजन आपको 10 उत्पादों को "हल्के लंबी पैदल यात्रा के जूते" से संबंधित देता है।
आप एक विशिष्ट दूरी सीमा के भीतर सभी वैक्टर को खोजने के लिए WHERE क्लॉज में भी उपयोग कर VECTOR_DISTANCE सकते हैं:
SELECT ProductID, Name
FROM dbo.Products
WHERE VECTOR_DISTANCE('cosine', @searchVector, DescriptionVector) < 0.3
ORDER BY VECTOR_DISTANCE('cosine', @searchVector, DescriptionVector);
यह दृष्टिकोण एक निश्चित गणना वापस करने के बजाय सभी उत्पादों को एक समानता सीमा के भीतर पाता है। यहां 0.3 मान सिर्फ एक उदाहरण है। कोसाइन दूरी 0 (समान वैक्टर) से 2 (पूरी तरह से विपरीत) तक होती है, लेकिन "पर्याप्त समान" के रूप में क्या मायने रखता है यह पूरी तरह से आपके डेटा और एम्बेडिंग मॉडल पर निर्भर करता है। सही सीमा खोजने के लिए, परीक्षण क्वेरी चलाएं, अपने परिणामों में दूरी मानों की जांच करें, और पहचानें कि प्रासंगिक परिणाम कहां रुकते हैं और शोर शुरू होता है। इस पैटर्न का उपयोग तब करें जब आप चाहते हैं कि सब कुछ एक निश्चित संख्या में परिणामों के बजाय एक गुणवत्ता बार से मिले।
अनुमानित पुनर्प्राप्ति के लिए VECTOR_SEARCH का उपयोग करें
जब आपकी तालिका हजारों पंक्तियों से आगे बढ़ती है, तो प्रत्येक पंक्ति की दूरी की गणना धीमी हो जाती है।
VECTOR_SEARCH फ़ंक्शन निकटतम पड़ोसियों को जल्दी से खोजने के लिए एक वेक्टर इंडेक्स का उपयोग करता है।
VECTOR_SEARCH(
TABLE = object AS alias,
COLUMN = vector_column,
SIMILAR_TO = query_vector,
METRIC = 'cosine' | 'euclidean' | 'dot',
TOP_N = k
)
यह फ़ंक्शन एक परिणाम सेट लौटाता है जिसमें स्रोत तालिका और एक distance स्तंभ से सभी स्तंभ होते हैं. यहां बताया गया है कि आप इसका उपयोग कैसे करेंगे:
DECLARE @searchVector VECTOR(1536);
SELECT @searchVector = AI_GENERATE_EMBEDDINGS('lightweight hiking boots' USE MODEL MyEmbeddingModel);
SELECT t.ProductID, t.Name, s.distance
FROM VECTOR_SEARCH(
TABLE = dbo.Products AS t,
COLUMN = DescriptionVector,
SIMILAR_TO = @searchVector,
METRIC = 'cosine',
TOP_N = 10
) AS s
ORDER BY s.distance;
फ़ंक्शन लगभग 10 निकटतम पड़ोसियों को लौटाता है। यदि एक ही मीट्रिक के साथ एक मिलान वेक्टर सूचकांक मौजूद है DescriptionVector , VECTOR_SEARCH तो तेजी से पुनर्प्राप्ति के लिए इसका उपयोग करता है। एक सूचकांक के बिना, यह सटीक खोज पर वापस आ जाता है और एक चेतावनी उठाता है।
पोस्ट-फ़िल्टरिंग को सावधानी से संभालें
VECTOR_SEARCH निकटतम पड़ोसियों को खोजने के बाद किसी भी WHERE खंड की शर्तों को लागू करता है, पहले नहीं। इस प्रश्न पर विचार करें:
SELECT t.ProductID, t.Name, s.distance
FROM VECTOR_SEARCH(
TABLE = dbo.Products AS t,
COLUMN = DescriptionVector,
SIMILAR_TO = @searchVector,
METRIC = 'cosine',
TOP_N = 10
) AS s
WHERE t.CategoryID = 5
ORDER BY s.distance;
यह क्वेरी पहले सभी श्रेणियों में 10 निकटतम वैक्टर ढूंढती है, फिर केवल श्रेणी 5 में फ़िल्टर करती है। यदि 10 निकटतम उत्पादों में से कोई भी श्रेणी 5 में नहीं है, तो आपको कोई परिणाम नहीं मिलता है। इस मुद्दे को हल करने के लिए, अपनी आवश्यकता से अधिक उम्मीदवारों का अनुरोध करें:
SELECT TOP 10 t.ProductID, t.Name, s.distance
FROM VECTOR_SEARCH(
TABLE = dbo.Products AS t,
COLUMN = DescriptionVector,
SIMILAR_TO = @searchVector,
METRIC = 'cosine',
TOP_N = 50
) AS s
WHERE t.CategoryID = 5
ORDER BY s.distance;
50 उम्मीदवारों से अनुरोध VECTOR_SEARCH करके और फिर फ़िल्टर करने के बाद शीर्ष 10 लेने से, आपके लक्ष्य श्रेणी में पर्याप्त परिणाम होने की अधिक संभावना है।
लगातार तुलना के लिए वैक्टर को सामान्य करें
विभिन्न एम्बेडिंग मॉडल अलग-अलग लंबाई (परिमाण) के साथ वैक्टर का उत्पादन करते हैं। कई स्रोतों से वैक्टर की तुलना करते समय या जब आपका मॉडल आउटपुट को सामान्य नहीं करता है, तो आप वैक्टर को इकाई लंबाई तक स्केल करने के लिए उपयोग कर VECTOR_NORMALIZE सकते हैं।
VECTOR_NORMALIZE(vector, norm_type)
हो norm_type सकता है:
-
'norm2': यूक्लिडियन मानदंड (सबसे आम) -
'norm1': निरपेक्ष मूल्यों का योग -
'norminf': अधिकतम निरपेक्ष मान
DECLARE @v VECTOR(3) = '[3, 4, 0]';
SELECT VECTOR_NORMALIZE(@v, 'norm2') AS NormalizedVector;
-- Returns: [0.6, 0.8, 0.0]
सामान्यीकरण यह सुनिश्चित करता है कि कोसाइन दूरी और डॉट उत्पाद लगातार व्यवहार करते हैं। अधिकांश आधुनिक एम्बेडिंग मॉडल (जैसे OpenAI से) सामान्यीकृत वैक्टर उत्पन्न करते हैं, इसलिए आपको अक्सर इस चरण की आवश्यकता नहीं होती है। लेकिन अगर आप उन मॉडलों से एम्बेडिंग के साथ काम कर रहे हैं जो सामान्य नहीं होते हैं, तो भंडारण या तुलना करने से पहले आवेदन करना VECTOR_NORMALIZE लगातार समानता स्कोर सुनिश्चित करता है।
आप संबंधित VECTOR_NORM फ़ंक्शन का उपयोग करके वेक्टर के परिमाण की गणना कर सकते हैं:
DECLARE @v VECTOR(3) = '[3, 4, 0]';
SELECT VECTOR_NORM(@v, 'norm2') AS Magnitude;
-- Returns: 5.0
VECTORPROPERTY के साथ वैक्टर का निरीक्षण करें
फ़ंक्शन किसी वेक्टर के बारे में मेटाडेटा लौटाता है VECTORPROPERTY . यह मेटाडेटा डेटा को मान्य करने या आयाम बेमेल को डीबग करने के लिए उपयोगी है।
VECTORPROPERTY(vector, property)
दो गुण समर्थित हैं:
-
'Dimensions': पूर्णांक के रूप में आयामों की संख्या लौटाता है -
'BaseType': डेटा प्रकार का नाम लौटाता है (वर्तमान में हमेशाfloat)
DECLARE @v VECTOR(1536) = '[0.1, 0.2, ...]';
SELECT VECTORPROPERTY(@v, 'Dimensions') AS Dims;
-- Returns: 1536
यह फ़ंक्शन क्वेरीज़ का समस्या निवारण करते समय मदद करता है जहाँ वैक्टर के आयाम बेमेल हो सकते हैं—एक सामान्य समस्या जब विभिन्न एम्बेडिंग मॉडल का उपयोग किया जाता है।
अपने परिदृश्य के लिए सही फ़ंक्शन चुनें
प्रत्येक फ़ंक्शन वेक्टर खोज में एक अलग उद्देश्य प्रदान करता है:
| परिदृश्य | फ़ंक्शन | कब उपयोग करें |
|---|---|---|
| छोटे डेटासेट या फ़िल्टर किए गए क्वेरीज़ | VECTOR_DISTANCE |
50,000 वैक्टर के तहत, या जब एक WHERE क्लॉज उम्मीदवारों को काफी कम कर देता है |
| वेक्टर इंडेक्स के साथ बड़ा डेटासेट | VECTOR_SEARCH |
सैकड़ों हजारों या अधिक, जब गति मायने रखती है |
| विभिन्न मॉडलों से वैक्टर की तुलना करना | VECTOR_NORMALIZE |
जब एम्बेडिंग स्रोत अलग-अलग होते हैं या मॉडल सामान्यीकृत वैक्टर का उत्पादन नहीं करता है |
| वेक्टर डेटा को मान्य करना | VECTORPROPERTY |
समस्या निवारण या डेटा सत्यापन के दौरान आयामों की जाँच करना |
चाबी छीन लेना
SQL में वेक्टर खोज क्वेरी एक पूर्वानुमानित पैटर्न का पालन करती हैं: एक क्वेरी वेक्टर तैयार करें, या तो VECTOR_DISTANCE (सटीक) या ( VECTOR_SEARCH अनुमानित) का उपयोग करके पड़ोसियों को ढूंढें, और दूरी के आधार पर ऑर्डर करें।
VECTOR_NORMALIZE और VECTORPROPERTY डेटा गुणवत्ता और स्थिरता का समर्थन करें। याद रखें कि निकटतम VECTOR_SEARCH पड़ोसियों को खोजने के बाद फ़िल्टर लागू होते हैं, इसलिए WHERE क्लॉज के साथ संयोजन करते समय अपनी आवश्यकता से अधिक उम्मीदवारों का अनुरोध करें। अगली इकाई में, आप सीखेंगे कि हाइब्रिड क्वेरी में पूर्ण-पाठ खोज के साथ वेक्टर खोज को कैसे संयोजित किया जाए।