सर्च एप्लिकेसन्स पाठमा, हामीले संक्षेपमा सिक्यौं कि कसरी आफ्नै डाटा लाई ठूलो भाषा मोडेलहरू (LLMs) मा एकीकृत गर्ने। यस पाठमा, हामी हाम्रो LLM एप्लिकेशनमा डाटा ग्राउन्डिङ गर्ने अवधारणाहरूमा अझ गहिरो जान्नेछौं, प्रक्रिया कसरी काम गर्छ र डाटा भण्डारण गर्ने विधिहरू जुन एम्बेडिङ्स र टेक्स्ट दुबैलाई समावेश गर्छन्।
भिडियो छिट्टै आउनेछ
यस पाठमा हामी तलका विषयहरू समेट्नेछौं:
-
RAG के हो र किन यसलाई AI (कृत्रिम बुद्धिमत्ता) मा प्रयोग गरिन्छ भन्ने परिचय।
-
भेक्टर डाटाबेसहरू के हुन् भन्ने बुझाइ र हाम्रो एप्लिकेशनका लागि एक सिर्जना गर्ने।
-
आरएजीलाई एप्लिकेशनमा कसरी एकीकृत गर्ने व्यावहारिक उदाहरण।
यस पाठ पूरा गरेपछि, तपाईं सक्षम हुनुहुनेछ:
-
डाटा पुन: प्राप्ति र प्रशोधनमा RAG को महत्त्व व्याख्या गर्ने।
-
RAG एप्लिकेशन सेटअप गर्ने र तपाईंको डाटालाई LLM मा ग्राउन्ड गर्ने।
-
LLM एप्लिकेशनहरूमा RAG र भेक्टर डाटाबेसहरूको प्रभावकारी एकीकरण गर्ने।
यस पाठका लागि, हामी हाम्रो आफ्नै नोटहरू शिक्षा स्टार्टअपमा थप्न चाहन्छौं, जसले च्याटबोटलाई विभिन्न विषयहरूमा थप जानकारी प्राप्त गर्न सक्षम बनाउँछ। हाम्रा नोटहरू प्रयोग गरेर, सिक्नेहरूले राम्ररी अध्ययन गर्न र विभिन्न विषयहरू बुझ्न सकून्, जसले उनीहरूको परीक्षा तयारीलाई सजिलो बनाउँछ। हाम्रो परिदृश्य सिर्जना गर्न हामीले प्रयोग गर्नेछौं:
-
Azure OpenAI:हामीले हाम्रो च्याटबोट बनाउन प्रयोग गर्ने LLM -
AI for beginners' lesson on Neural Networks:यसले हाम्रो LLM लाई ग्राउन्ड गर्ने डाटा हो -
Azure AI SearchरAzure Cosmos DB:हाम्रो डाटा भण्डारण गर्न र सर्च इन्डेक्स बनाउन भेक्टर डाटाबेस
प्रयोगकर्ताहरू आफ्ना नोटबाट अभ्यास क्विजहरू बनाउन, समीक्षा फ्ल्यास कार्डहरू बनाउन र सारांशलाई संक्षिप्त अवलोकनमा रूपान्तरण गर्न सक्षम हुनेछन्। सुरु गर्न, हामी हेर्नुहोस् RAG के हो र कसरी काम गर्छ:
एउटा LLM संचालित च्याटबोटले प्रयोगकर्ता प्रॉम्प्टहरूलाई प्रशोधन गरेर प्रतिक्रिया उत्पादन गर्दछ। यो अन्तरक्रियात्मक हुन डिजाइन गरिएको छ र प्रयोगकर्ताहरूलाई विभिन्न विषयहरूमा संवाद गर्न सक्षम बनाउँछ। तर यसको प्रतिक्रियाहरू उक्त सन्दर्भ र यसको मौलिक प्रशिक्षण डाटामा सीमित छन्। उदाहरणका लागि, GPT-4 को ज्ञान कटअफ सेप्टेम्बर २०२१ हो, जसको मतलब यसपछि भएका घटनाहरूको ज्ञान यसमा छैन। साथै, LLM प्रशिक्षणमा प्रयोग गरिएको डाटामा व्यक्तिगत नोटहरू वा कम्पनीको उत्पादन म्यानुअल जस्ता गोप्य जानकारी समावेश हुँदैन।
मानौं तपाईंले नोटहरूबाट क्विजहरू सिर्जना गर्ने च्याटबोट तैनाथ गर्न चाहनुहुन्छ, तपाईंलाई ज्ञान आधारसँग कनेक्शन चाहिन्छ। यहीं RAG सहयोगी हुन्छ। RAGs यसरी काम गर्छन्:
-
ज्ञान आधार: पुन: प्राप्ति अघि, यी दस्तावेजहरूलाई समाहित र पूर्व-प्रक्रिया गर्न आवश्यक हुन्छ, सामान्यतया ठुला दस्तावेजहरूलाई साना साना टुक्रामा पारिन्छ, तीलाई टेक्स्ट एम्बेडिङमा रूपान्तरण गरेर डेटाबेसमा संग्रह गरिन्छ।
-
प्रयोगकर्ता प्रश्न: प्रयोगकर्ताले प्रश्न सोध्छ।
-
पुन: प्राप्ति: प्रयोगकर्ताले प्रश्न सोधेपछि, एम्बेडिङ मोडेलले हाम्रो ज्ञान आधारबाट सम्बन्धित जानकारी खोज्छ जसले थप सन्दर्भ प्रदान गर्दछ र प्रॉम्प्टमा समावेश गरिन्छ।
-
वृद्धि गरिएको उत्पादन: LLM ले प्राप्त डाटाको आधारमा आफ्नो प्रतिक्रिया सुधार गर्दछ। यसले प्रतिक्रियालाई मात्र आंशिक रूपमा पूर्व-प्रशिक्षित डाटामा मात्र निर्भर नभई थप सन्दर्भबाट प्राप्त महत्त्वपूर्ण जानकारीमा आधारित बन्न अनुमति दिन्छ। प्राप्त जानकारीले LLM को उत्तरलाई वृद्धि गर्दछ। त्यसपछि LLM प्रयोगकर्ताको प्रश्नको जवाफ फर्काउँछ।
RAG को संरचना दुई भागहरू मिलेर बनेको ट्रान्सफर्मरमा आधारित हुन्छ: एक एन्कोडर र एक डिकोडर। उदाहरणका लागि, प्रयोगकर्ताले प्रश्न सोध्दा, इनपुट टेक्स्टलाई शब्दहरूको अर्थ समेट्दै भेक्टरहरूमा 'एनकोड' गरिन्छ र भेक्टरहरू हाम्रो दस्तावेज इन्डेक्समा 'डिकोड' भएर नयाँ टेक्स्ट उत्पन्न गर्छ जुन प्रयोगकर्ताको प्रश्नमा आधारित हुन्छ। LLM ले आउटपुट उत्पन्न गर्न दुवै एन्कोडर-डिकोडर मोडल प्रयोग गर्छ।
RAG कार्यान्वयन गर्दा प्रस्तावित पेपर अनुसार दुई विधि छन्: Retrieval-Augmented Generation for Knowledge intensive NLP Tasks :
-
RAG-Sequence: प्रयोगकर्ताको प्रश्नको लागि सबैभन्दा उत्तम सम्भावित उत्तर भविष्यवाणी गर्न प्राप्त दस्तावेजहरू प्रयोग गर्ने
-
RAG-Token: अर्को टोकन उत्पन्न गर्न दस्तावेजहरू प्रयोग गर्ने, त्यसपछि पुनः प्राप्त गरेर प्रयोगकर्ताको प्रश्नको उत्तर दिने
-
जानकारीको समृद्धि: टेक्स्ट प्रतिक्रियाहरू अद्यावधिक र वर्तमान हुने सुनिश्चित गर्दछ। यसले क्षेत्रगत विशिष्ट कार्यहरूमा प्रदर्शन सुधार गर्दछ किनभने यसले आन्तरिक ज्ञान आधारलाई पहुँच दिन्छ।
-
प्रामाणिक डेटा प्रयोग गरेर कल्पना कम गर्छ र प्रयोगकर्ताको प्रश्नका लागि सन्दर्भ प्रदान गर्छ।
-
LLM लाई फाइन-ट्युन गर्नेको तुलनामा यो लागत प्रभावकारी छ।
हाम्रो एप्लिकेशन हाम्रो व्यक्तिगत डाटा अर्थात् Neural Network पाठ AI For Beginners पाठ्यक्रममा आधारित छ।
परम्परागत डेटाबेसको विपरीत, भेक्टर डाटाबेसहरू विशिष्ट डाटाबेसहरू हुन् जुन एम्बेड गरिएको भेक्टरहरू भण्डारण, व्यवस्थापन र खोज गर्न डिजाइन गरिएका हुन्छन्। यसले दस्तावेजहरूको संख्यात्मक प्रतिनिधित्व भण्डारण गर्छ। डाटालाई संख्यात्मक एम्बेडिङमा तोड्दा हाम्रो AI प्रणालीलाई डाटा बुझ्न र प्रशोधन गर्न सजिलो हुन्छ।
हामी एम्बेडिङहरू भेक्टर डाटाबेसहरूमा संग्रह गर्छौं किनभने LLM हरूले स्वीकार गर्ने टोकनहरूको सीमित संख्या हुन्छ। सम्पूर्ण एम्बेडिङहरू LLM लाई पास गर्न सकिँदैन, त्यसैले हामीले तिनीहरूलाई टुक्रामा विभाजन गर्नुपर्छ र प्रयोगकर्ताले प्रश्न सोधेपछि, प्रश्नसँग सबैभन्दा मिल्ने एम्बेडिङहरू प्रॉम्प्टसँगै फर्काइन्छ। टुक्रा पार्दा LLM मार्फत पठाइने टोकनको सङ्ख्यामा पनि खर्च घट्छ।
प्रसिद्ध भेक्टर डाटाबेसहरूमा Azure Cosmos DB, Clarifyai, Pinecone, Chromadb, ScaNN, Qdrant र DeepLake छन्। तपाईं Azure CLI प्रयोग गरेर Azure Cosmos DB मोडेल निम्न आदेशद्वारा सिर्जना गर्न सक्नुहुन्छ:
az login
az group create -n <resource-group-name> -l <location>
az cosmosdb create -n <cosmos-db-name> -r <resource-group-name>
az cosmosdb list-keys -n <cosmos-db-name> -g <resource-group-name>हामी डाटा भण्डारण गर्नु अघि, यो डाटालाई भेक्टर एम्बेडिङमा रूपान्तरण गर्नुपर्छ। यदि तपाईं ठूलो दस्तावेजहरू वा लामो टेक्स्टहरूसँग काम गर्दै हुनुहुन्छ भने, तपाईंले अपेक्षित प्रश्नहरूको आधारमा तिनीहरूलाई टुक्रामा पार्न सक्नुहुन्छ। टुक्रा पार्ने कार्य वाक्य वा अनुच्छेदको स्तरमा गर्न सकिन्छ। किनभने टुक्रा पार्दा त्यस वरिपरिका शब्दहरूबाट अर्थ निकालिन्छ, तपाईं टुक्रामा केही अतिरिक्त सन्दर्भ थप्न सक्नुहुन्छ, जस्तै दस्तावेज शीर्षक वा टुक्रा अघि वा पछि केही टेक्स्ट समावेश गर्नुहोस्। तपाईं यसरी टुक्रा पार्न सक्नुहुन्छ:
def split_text(text, max_length, min_length):
words = text.split()
chunks = []
current_chunk = []
for word in words:
current_chunk.append(word)
if len(' '.join(current_chunk)) < max_length and len(' '.join(current_chunk)) > min_length:
chunks.append(' '.join(current_chunk))
current_chunk = []
# यदि अन्तिम टुक्राले न्यूनतम लम्बाइ पुर्याएन भने पनि यसलाई थप्नुहोस्
if current_chunk:
chunks.append(' '.join(current_chunk))
return chunksटुक्रा पारिसकेपछि, हामी हाम्रो टेक्स्टलाई विभिन्न एम्बेडिङ मोडलहरू प्रयोग गरेर एम्बेड गर्न सक्छौं। केही मोडलहरू जस्तै word2vec, OpenAI को ada-002, Azure कम्प्युटर भिजन र थप धेरै। प्रयोग गर्ने मोडल चयन गर्ने कुरा तपाईंको प्रयोग गर्ने भाषाहरू, कस्तो प्रकारको सामग्रीलाई एन्कोड गर्नु पर्ने हो (टेक्स्ट/छवि/अडियो), एन्कोड गर्न सक्ने इनपुट आकार र एम्बेडिङ आउटपुटको लम्बाइमा निर्भर गर्नेछ।
OpenAI को text-embedding-ada-002 मोडल प्रयोग गरेर एम्बेड गरिएको टेक्स्टको उदाहरण:
जब प्रयोगकर्ताले प्रश्न सोध्छ, पुन: प्राप्त गर्ने उपकरणले त्यो प्रश्नलाई क्वेरी एन्कोडर प्रयोग गरी भेक्टरमा परिणत गर्छ, त्यसपछि हाम्रो दस्तावेज सर्च इन्डेक्समा समान भेक्टरहरूको खोजी गर्छ जुन इनपुटसँग सम्बन्धित हुन्छ। त्यसपछि इनपुट भेक्टर र दस्तावेज भेक्टर दुवैलाई टेक्स्टमा रूपान्तरण गरी LLM मार्फत पठाइन्छ।
पुन: प्राप्ति त्यति बेला हुन्छ जब प्रणाली छिटो खोजी गरेर सर्च मापदण्ड पूरा गर्ने दस्तावेजहरू फेला पार्छ। पुन: प्राप्तकर्ताको उद्देश्य यस्ता दस्तावेजहरू ल्याउनु हो जुन सन्दर्भ प्रदान गर्न र LLM लाई तपाईंको डाटामा आधारित गर्न उपयोगी हुन्छ।
हाम्रो डाटाबेस भित्र खोज गर्ने विभिन्न तरिका छन् जस्तै:
-
कीवर्ड खोज - टेक्स्ट खोजका लागि प्रयोग
-
भेक्टर खोज - दस्तावेजहरूलाई एम्बेडिङ मोडलहरू प्रयोग गरी भेक्टरमा रूपान्तरण गर्ने, जसले शब्दहरूको अर्थमा आधारित सेमान्टिक खोज अनुमति दिन्छ। पुन: प्राप्ति तब गरिन्छ जब प्रयोगकर्ताको प्रश्नसँग सबैभन्दा नजिकको भेक्टर भएका दस्तावेजहरू खोजिँछन्।
-
हाइब्रिड - कीवर्ड र भेक्टर दुवै खोजको संयोजन।
पुन: प्राप्तिमा चुनौती तब आउँछ जब डाटाबेसमा प्रश्नसँग मिल्ने जवाफ हुँदैन, प्रणालीले अझ राम्रो जानकारी दिन्छ, तथापि, तपाईं प्रासंगिकताका लागि अधिकतम दूरी सेट गर्नुहोस् वा कीवर्ड-र-भेक्टर दुवै खोज मिलाउँदै हाइब्रिड विधि प्रयोग गर्न सक्नुहुन्छ। यस पाठमा हामी हाइब्रिड खोज प्रयोग गर्नेछौं जसले दुवै भेक्टर र कीवर्ड खोजलाई संयोजन गर्छ। हामी हाम्रो डाटालाई टुक्राहरू र एम्बेडिङ्स सहित स्तम्भहरू भएको डाटाफ्रेममा भण्डारण गर्नेछौं।
पुन: प्राप्त गर्ने उपकरणले ज्ञान डाटाबेसभित्र नजिक रहेका एम्बेडिङहरू खोज्छ, सबैभन्दा नजिकको छिमेकी जुन समान टेक्स्टहरू हुन्। परिदृश्यमा, प्रयोगकर्ताले प्रश्न सोध्दा यो पहिले एम्बेड गरिएको हुन्छ र समान एम्बेडिङहरूसँग मिलाइन्छ। सामान्य रूपमा प्रयोग गरिने मापन विधि कोसाइन समानता हो जुन दुई भेक्टरहरू बीचको कोणमा आधारित छ।
सादृश्य मापन गर्ने अन्य विकल्पहरू Euclidean दूरी हो जुन भेक्टरको अन्त्य बिन्दु बीचको सोझो रेखा हो र डट उत्पाद हो जसले दुई भेक्टरका समकक्ष तत्त्वहरूको गुणनफलको योग मापन गर्छ।
पुन: प्राप्ति गर्दा, हामीले हाम्रो ज्ञान आधारका लागि खोज इन्डेक्स निर्माण गर्नु आवश्यक हुन्छ। इन्डेक्सले एम्बेडिङहरू संग्रह गर्छ र ठूलो डाटाबेसमा पनि सबैभन्दा मिल्ने टुक्राहरू तुरुन्त फेला पार्न सक्छ। हामी हाम्रो इन्डेक्स स्थानीय रूपमा निम्न आदेश प्रयोग गरेर बनाउन सकिन्छ:
from sklearn.neighbors import NearestNeighbors
embeddings = flattened_df['embeddings'].to_list()
# खोज सूचकांक बनाउनूहोस्
nbrs = NearestNeighbors(n_neighbors=5, algorithm='ball_tree').fit(embeddings)
# सूचकांक सोध्नका लागि, तपाईंले kneighbors विधि प्रयोग गर्न सक्नुहुन्छ
distances, indices = nbrs.kneighbors(embeddings)डाटाबेस सोधपुछ गरेपछि, तपाईंले परिणामहरू सबैभन्दा प्रासंगिकभन्दा सुरु गरेर क्रमबद्ध गर्नुपर्ने हुन सक्छ। एउटा पुन:र्यांकिङ LLM ले मेसिन लर्निङको प्रयोग गरेर खोज परिणामहरूको प्रासंगिकता सुधार्छ। Azure AI Search प्रयोग गर्दा, पुन:र्यांकिङ स्वचालित रूपमा सेमान्टिक पुन:र्यांकरले गर्छ। नजिकका छिमेकीहरू प्रयोग गरेर कसरी पुन:र्यांकिङ काम गर्छ भन्ने उदाहरण:
# सबैभन्दा मिल्दोजुल्दो दस्तावेजहरू खोज्नुहोस्
distances, indices = nbrs.kneighbors([query_vector])
index = []
# सबैभन्दा मिल्दोजुल्दो दस्तावेजहरू मुद्रण गर्नुहोस्
for i in range(3):
index = indices[0][i]
for index in indices[0]:
print(flattened_df['chunks'].iloc[index])
print(flattened_df['path'].iloc[index])
print(flattened_df['distances'].iloc[index])
else:
print(f"Index {index} not found in DataFrame")अन्तिम चरणमा हाम्रो LLM लाई समावेश गरेर हामीलाई डाटामा आधारित प्रतिक्रियाहरू प्राप्त गर्न सक्षम बनाउनेछौं। यसलाई हामी तलका तरिकाले कार्यान्वयन गर्न सक्छौं:
user_input = "what is a perceptron?"
def chatbot(user_input):
# प्रश्नलाई क्वेरी भेक्टरमा परिवर्तन गर्नुहोस्
query_vector = create_embeddings(user_input)
# सबैभन्दा मिल्दो कागजातहरू खोज्नुहोस्
distances, indices = nbrs.kneighbors([query_vector])
# सन्दर्भ प्रदान गर्नका लागि कागजातहरूलाई क्वेरीमा थप्नुहोस्
history = []
for index in indices[0]:
history.append(flattened_df['chunks'].iloc[index])
# इतिहास र प्रयोगकर्ताको इनपुटलाई संयोजन गर्नुहोस्
history.append(user_input)
# एउटा सन्देश वस्तु सिर्जना गर्नुहोस्
messages=[
{"role": "system", "content": "You are an AI assistant that helps with AI questions."},
{"role": "user", "content": "\n\n".join(history) }
]
# प्रतिक्रिया उत्पन्न गर्न च्याट पूर्णता प्रयोग गर्नुहोस्
response = openai.chat.completions.create(
model="gpt-4",
temperature=0.7,
max_tokens=800,
messages=messages
)
return response.choices[0].message
chatbot(user_input)-
आपूर्तिकृत प्रतिक्रियाहरूको गुणस्तर, जसले प्राकृतिक, प्रवाहपूर्ण र मानव-जस्तै लाग्ने सुनिश्चित गर्दछ।
-
डाटाको ग्राउन्डिङ: प्रतिक्रियाले आपूर्ति गरिएका दस्तावेजहरूबाट आएको सुनिश्चित गर्ने।
-
प्रासंगिकता: प्रतिक्रिया सोधिएको प्रश्नसँग मेल खाने र सम्बन्धित हुने।
-
प्रवाहात्मकता - प्रतिक्रिया व्याकरणिक रूपमा सही छ कि छैन।
धेरै विभिन्न प्रयोग केसहरू छन् जहाँ फंक्शन कलहरूले तपाईंको एपमा सुधार ल्याउन सक्छन् जस्तै:
-
प्रश्न र उत्तर: तपाईंको कम्पनीको डाटा च्याटमा जोडेर कर्मचारीहरूले प्रश्न सोध्न सकून्।
-
सिफारिश प्रणालीहरू: यस्ता प्रणाली जहाँ सबैभन्दा मिल्ने मानहरू जस्तै चलचित्रहरू, रेस्टुरेन्टहरू आदिलाई मिलाउने।
-
च्याटबोट सेवा: च्याट इतिहास भण्डारण गर्ने र प्रयोगकर्ताको डाटामा आधारित वार्तालाप व्यक्तिगत बनाउने।
-
भेक्टर एम्बेडिङमा आधारित छवि खोज, छवि पहिचान र असामान्यता पत्ता लगाउन उपयोगी।
हामीले RAG को आधारभूत क्षेत्रहरू कभर गर्यौं — एप्लिकेशनमा डाटा थप्ने, प्रयोगकर्ता प्रश्न र आउटपुट। RAG सिर्जनालाई सरल बनाउन Semanti Kernel, Langchain वा Autogen जस्ता फ्रेमवर्कहरू प्रयोग गर्न सकिन्छ।
Retrieval Augmented Generation (RAG) सिकाइलाई अगाडि बढाउन, तपाईंले निम्न गर्न सक्नुहुन्छ:
-
आफना रोजाइको फ्रेमवर्क प्रयोग गरेर एप्लिकेशनको फ्रन्ट-एन्ड निर्माण गर्नुहोस्।
-
LangChain वा Semantic Kernel मध्ये कुनै फ्रेमवर्क प्रयोग गरेर आफ्नो एप्लिकेशन पुनःनिर्माण गर्नुहोस्।
पाठ पूरा गर्नुभएकोमा बधाई 👏।
यस पाठपछिको तपाईंको यात्रा जारी राख्न, हाम्रो Generative AI Learning collection हेर्नुस् र आफ्नो Generative AI ज्ञानलाई अझ उचाईमा पुर्याउनुहोस्!
अस्वीकरण:
यो दस्तावेज़ AI अनुवाद सेवा Co-op Translator प्रयोग गरी अनुवाद गरिएको हो। हामी शुद्धताका लागि प्रयास गर्छौं, तर कृपया ध्यान दिनुहोस् कि स्वतः अनुवादमा त्रुटि वा भ्रामकता हुनसक्छ। मूल दस्तावेज़ आफ्नै मातृभाषामा नै अधिकारिक स्रोत मानिनु पर्छ। महत्वपूर्ण सूचना लागि, व्यावसायिक मानव अनुवाद सिफारिस गरिन्छ। यस अनुवादको प्रयोगबाट उत्पन्न हुने कुनै पनि गलतफहमी वा व्याख्यामा हामी जिम्मेवार हुने छैनौं।



