தேடல் பயன்பாடுகள் பாடத்தில், உங்களுடைய சொந்த தரவை பெரிய மொழி மாதிரிகளுடன் (LLMs) எப்படி இணைப்பது என்பதைக் குறுந்தொகுப்பு செய்தோம். இந்த பாடத்தில், உங்கள் LLM பயன்பாட்டில் உங்கள் தரவை அடிப்படையாக வைக்கும் கருத்துக்கள், செயல்முறை இயந்திரவியல் மற்றும் தரவு சேமிப்புத் தொழில்நுட்பங்கள், உட்பட எம்பெட்டிங் மற்றும் உரை ஆகியவற்றை விரிவாகப் பார்ப்போம்.
வீடியோ விரைவில் வரும்
இந்த பாடத்தில் நாம் பின்வரும் விஷயங்களை கற்போம்:
-
RAG என்பது என்ன மற்றும் செயற்கைக் கூர்மையிலும் (AI) ஏன் பயன்படுத்தப்படுகிறது என்பது குறித்து அறிமுகம்.
-
வெக்டர் தரவுத்தளங்கள் என்ன என்பதையும் மற்றும் எவ்வாறு அவற்றை உருவாக்குவது என்பதையும் புரிந்துகொள்ளல்.
-
ஒரு பயன்பாட்டில் RAG ஐ எவ்வாறு இணைப்பது என்பது குறித்து நடைமுறை உதாரணம்.
இந்த பாடத்தை முடித்தவுடன், நீங்கள்:
-
தரவு மீட்டெடுப்பு மற்றும் செயலாக்கத்தில் 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 க்கு 2021 செப்டம்பர் வரை அறிவு இருப்பதால், அதன் பின் நிகழ்ந்த நிகழ்வுகளுக்கான அறிவை அதில் இல்லை. மேலும, LLM களை பயிற்சிசெய்ய பயன்படுத்தப்பட்ட தரவில் தனிப்பட்ட குறிப்புகள் அல்லது நிறுவனத்தின் தயாரிப்பு கையேடு போன்ற ரகசியத் தகவல்கள் அடங்கவில்லை.
உங்கள் குறிப்புகளிலிருந்து வினாடி வினாக்களை உருவாக்கும் சாட்பாட்டை (chatbot) வெளியிட விரும்பினால், அறிவுத் திரட்டை (knowledge base) இணைப்பை தேவையாகத் தீர்மானிக்க வேண்டும். இதோடு RAG உதவுகிறது. RAG கள் பின்வருமாறு செயல்படும்:
-
அறிவுத் திரட்டை: மீட்டெடுக்க முன், இந்த ஆவணங்கள் நுழைந்தளிக்கப்பட்டு மாதிரி செய்யப்பட வேண்டும், பொதுவாக பெரிய ஆவணங்களை சிறிய துண்டுகளாக்கி, அவற்றைப் பொருள் வடிவமான embedding ஆக மாற்றி தரவுத்தளத்தில் சேமிக்க வேண்டும்.
-
பயனர் கேள்வி: பயனர் ஒரு கேள்வியை கேட்கிறது
-
மீட்டெடுப்பு: பயனர் கேள்வி கேட்டதும், embedding மாடல் முன்பிருந்த அறிவுத் திரட்டிலிருந்து சம்பந்தப்பட்ட தகவல்களை திரட்டி மேலதிகத் தகவலுக்காக உட்பிராணர் பண்புருவுக்குள் சேர்க்கப்படும்.
-
மேம்படுத்தப்பட்ட உருவாக்கம்: LLM அதன் பதிலைப் பெற்று, புதிய தரவுகள் மூலம் மேம்படுத்தி முன்பிராணர் தரவுக்கு கூடுதல் சம்பந்தப்பட்ட தகவலை வைத்துப் பதில் தரும். RAG உடன் மீட்டெடுக்கப்பட்ட தரவு LLM பதில்களை மேம்படுத்த பயன்படுத்தப்படுகிறது. பின்னர் LLM பயனர் கேள்விக்கு பதில் அளிக்கும்.
RAG களுக்கான கட்டமைப்பு, இரண்டு பகுதிகளான எண்டோடர் மற்றும் டிகோடரை கொண்ட டிரான்ஸ்ஃபார்மர் மூலம் அமல்படுத்தப்பட்டுள்ளது. எடுத்துக்காட்டாக, பயனர் ஒரு கேள்வி கேட்கும் போது, உள்ளீட் உரை சொற்களின் பொருளை பிடிக்கும் வகையில் வெக்டர்களாக 'எண்ணிய' பிறகு, அந்த வெக்டர்கள் 'டிகோட்' செய்யப்படும்போது எங்கள் ஆவண குறியீட்டில் பொருத்தப்பட்டு புதிய உரையை உருவாக்குகிறது. LLM இன் வெளியீட்டு உருவாக்கம் encoder-decoder மாதிரியைப் பயன்படுத்துகிறது.
பண்புக் காக இதுவரை பரிந்துரைக்கப்பட்ட கட்டுரைப்படி RAG ஐ செயல்படுத்த இரண்டு முறைகள் உள்ளன: Retrieval-Augmented Generation for Knowledge intensive NLP Tasks
-
RAG-Sequence பயனர் கேள்விக்கான சிறந்த பதிலை முன்னறிவித்த ஆவணங்களைப் பயன்படுத்துவது
-
RAG-Token ஆவணங்களை அடுத்த டோக்கன் உருவாக்க பயன்படுத்தி பின்னர் அதை மீட்டெடுத்து பயனர் கேள்விக்குச் சுற்றுகை அளிப்பது
-
தகவல் வளம்: உரை பதில்களை புதுப்பித்தும் சமீபத்தியதாகவும் வைப்பதில் உதவுகிறது. இதனால் அது குறிப்பிட்ட துறை தொடர்பான வேலைகளில் உள்ள உட்பிராணர் அறிவுத்தொகையை அணுகுவதன் மூலம் திறன்களை மேம்படுத்தும்.
-
உண்மைத் தரவுகளை பயன்படுத்தி பதில் உருவாக்குவதன் மூலம் பொய்க்கதவமைந் குறைக்கும்.
-
ஒரு LLM ஐ சிறைப்படுத்தும் (fine-tuning) விட செலவு குறைவான முறையாகும்.
எங்கள் பயன்பாடு நம் சொந்த தரவைப் (Neural Network பாடம் AI For Beginners பாடத்திட்டத்தில் உள்ளதை) அடிப்படையாக்கியது.
வெக்டர் தரவுத்தளம், பாரம்பரிய தரவுத்தளங்களிலிருந்து வேறுபட்டு, உள்ளீட்டு வெக்டர்களை சேமித்து, நிர்வகித்து மற்றும் தேடுவதற்கான சிறப்பு தரவுத்தளம் ஆகும். இது ஆவணங்களின் எண் வடிவமைப்புகளைச் சேமிக்கிறது. தரவை எண் வடிவ மாற்றுவதால் எங்கள் AI அமைப்பு அதை சிறப்பாக புரிந்து செயல்படுகிறது.
எங்கள் embedding களை வெக்டர் தரவுத்தளங்களில் சேமிக்கிறோம் ஏனெனில் LLM களுக்கு அதிகமான டோக்கன்களை உட்படுத்த இயலாது. முழு embedding ஐ LLM க்கு அனுப்ப முடியாததால், அதை துண்டுகளாக பிரிக்க வேண்டும். பயனர் கேள்வி கேட்டால், கேள்விக்குத் தொடர்புடைய embedding களை prompt உடன் திருப்பிக் கொடுக்க வேண்டும். துண்டாக்கல் 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>எங்கள் தரவை சேமிப்பதற்கு முன் அதை வெக்டர் embedding ஆக மாற்ற வேண்டும். பெரிய ஆவணங்கள் அல்லது நீண்ட உரைகளுடன் வேலை செய்தால், எதிர்பார்க்கும் கேள்விகளின் அடிப்படையில் துண்டாக்க முடியும். துண்டாக்கலை句த்தொகுதிச் நிலை அல்லது பத்தி நிலை ஆகியவற்றில் செய்யலாம். துண்டாக்கும் போது அதன் சுற்றுவட்டார வார்த்தைகளின் பொருள் தெரியும் என்பதால், வளர்க்கும் துண்டுக்கு கூடுதலான சந்தர்ப்பங்களைச் சேர்க்கலாம், உதாரணமாக ஆவணம் தலைப்பு சேர்ப்பது அல்லது துண்டுக்கு முன்/பின் உரை ஆராய்ச்சி செய்வது. உதாரணமாக:
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துண்டாக்கப்பட்ட பிறகு, விருப்பமான embedding மாடல்களில் எம்பெடு செய்யலாம். பயன்படுத்தக்கூடிய சில மாடல்கள்: word2vec, OpenAI இன் ada-002, Azure Computer Vision மற்றும் இன்னும் பல. தேர்வு செய்தல் உங்கள் பயன்படுத்தும் மொழிகள், குறியாக்கப்பட்ட உள்ளடக்கம் (உரை/படங்கள்/ஆடியோ), உள்ளீட்டு அளவு மற்றும் embedding வெளியீட்டின் நீளம் போன்றவற்றுக்கு பொருந்தும்.
OpenAI இன் text-embedding-ada-002 மாதிரியில் உருவாக்கப்பட்ட embedding எடுத்துக்காட்டு:
பயனர் கேள்வி கேட்டால், retriever அதை query encoder மூலம் வெக்டராக மாற்றி, ஆவணத் தேடல் குறியீட்டில் அந்த பகுதியில் உள்ள பொருத்தமான வெக்டர்கள் தேடப்படுகின்றன. முடிந்ததும், உள்ளீடு வெக்டர் மற்றும் ஆவண வெக்டர்களை உரையாக மாற்றி LLM வழியாக அனுப்புகிறது.
மீட்டெடுப்பு என்பது தேடல் அடிப்படையில் பூர்த்தி செய்யும் ஆவணங்களை விரைவாக கண்டுபிடிக்கும் செயல்முறை. retriever இன் நோக்கம், அடிப்படையான ஆவணங்களைப் பெற்றுத் தருவதுடன், LLM ஐ அடிப்படையாக்க பயன்படும்.
எங்கள் தரவுத்தளத்தில் தேடல் செய்ய பல வழிகள் உள்ளன:
-
தேர்ச்சி வார்த்தை தேடல் – உரை தேடல்களுக்கு பயன்படுகிறது
-
வெக்டர் தேடல் – embedding மாடல்களைப் பயன்படுத்தி உரையை வெக்டர் வடிவில் மாற்றி அர்த்த தேடலை (semantic search) அனுமதி பெறுகிறது. retriever பின்வரும் ஆவணங்களை சந்திக்கின்றன, அதன் வெக்டர் வடிவுகள் பயனர் கேள்விக்கு மிக அருகிலுள்ளவை.
-
இணைவு (Hybrid) – தேர்ச்சி வார்த்தை மற்றும் வெக்டர் தேடலின் கலைச்சேர்க்கை.
ஒரு சவால் database இல் கேள்விக்கு பொருந்திய பதிலை கண்டுபிடிக்க முடியாவிடில், retriever மிக சிறந்த தகவலை தரும். அதிற்கான ஒருவேளை படிநிலை தொடர்பான தூரத்திற்கு வரம்பு அமைத்தல் அல்லது இணைவு தேடலை பயண்படுத்தலாம். இந்த பாடத்தில், நாம் இணைவு தேடலை பயண்படுத்துவோம், அதாவது வெக்டர் மற்றும் வார்த்தை தேடலை கலந்து. தரவை dataframe-ல் சேமித்து, துண்டுகள் மற்றும் embedding களைத் தரவாக வைத்துக்கொள்வோம்.
retriever அறிவுத் தரவுத்தளத்தில் அருகின embedding களைத் தேடும். அருகிலும் ஒத்துள்ளவை, ஏனெனில் அவை ஒரே மாதிரி உரைகள் ஆகும். பயனர் கேள்வி முதலில் embedding ஆகி, ஒத்துள்ள embedding களுடன் பொருந்தும். வெவ்வேறு வெக்டர்களின் ஒத்திசைவைக் கணக்கிட பொதுவாக கோசைன் ஒத்திசைவு (cosine similarity) பயன்படுத்தப்படுகிறது, இது இரண்டு வெக்டர்களுக்கு நடுவேயுள்ள கோணத்தைக் கணக்கிடும்.
மற்ற வழிமுறைகள்: யூக்ளிடியன் தூரம் (Euclidean distance) - வெக்டர்களின் மத்தியில் நேர்கோட்டுப் புள்ளி மற்றும் டாட் ப்ரொடக்ட் (dot product) - இரண்டு வெக்டர்களின் பொருத்த துணுக்குகளின் கூட்டுத்தொகை.
மீட்டெடுப்பு செய்வதற்கு முன், அறிவுத் தரவுத்தளத்துக்கான தேடல் குறியீட்டை கட்ட வேண்டும். குறியீடு embedding களைச் சேமித்து, பெரிய தரவுத்தளத்திலும் மிக அருகில்தானே துண்டுகளை விரைவில் மீட்டெடுக்க உதவும். உள்ளூர் முறையில் குறியீட்டை உருவாக்க:
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 இயந்திரக் கற்றலை (ML) பயன்படுத்தி தேடல் முடிவுகளை மிக பொருத்தமானவையாக ஒழுங்குபடுத்து. Azure AI Search இல் semantic reranker மூலம் இது தானாக இயங்கும். அடுத்தும் அருகாமையோர் உதவியுடன் மறுவரிசைப்படுத்தல் உதாரணம்:
# மிகவும் ஒப்புடைய ஆவணங்களை கண்டுபிடி
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)-
பதில்களின் தரம்: இயற்கையான, சரளமான மற்றும் மனிதத்தன்மையுடன் ஒத்ததாக இருக்கின்றது என்பதை உறுதி செய்தல்
-
தரவு அடிப்படைமை: வழங்கப்பட்ட ஆவணங்களிலிருந்து பதில் வந்ததா என்பதை மதிப்பிடல்
-
பொருத்தம்: கேள்விக்கு ஏற்ப பதில் பொருந்தியதா என்பதை மதிப்பிடல்
-
சுமார் பேச்சு திறன் (Fluency) - பதில் இலக்கண ரீதியாக பொருத்தமுள்ளதாக உள்ளதா என்பதன் மதிப்பீடு
பல்வேறு பயன்பாடுகள் உள்ளன, மேலும் செயல்படுத்துதலில் function calls இல் மேம்பாடு தருகின்றன:
-
கேள்வி மற்றும் பதில்: நிறுவன தரவை சார்ந்த சாட் செயலியை ஊழியர்கள் கேள்வி கேட்க பயன்படுத்தும்.
-
பரிந்துரை அமைப்புகள்: மிக அருகிலுள்ள மதிப்புகளை பொருத்தி அமைப்பை உருவாக்குதல், உதாரணமாக திரைப்படங்கள், உணவகங்கள் மற்றும் பல.
-
சாட்பாட் சேவைகள்: உரையாடல் வரலாறு சேமித்து, பயனர் தரவின் அடிப்படையில் உரையாடலை தனிப்பயனாக்கல்.
-
வெக்டர் embedding அடிப்படையிலான பட தேடல், பட அடையாளம் கண்டறிதல் மற்றும் விசித்திர நிலைகள் கண்டுபிடிப்புக்கு.
நாம் RAG இன் அடிப்படைக் கோணங்களை, எங்கள் தரவு சேர்ப்பது, பயனர் கேள்வியும் வெளியீட்டும் ஆகியவற்றை சென்றடைந்தோம். RAG உருவாக்கம் எளிதாக்க குழுக்கள் Semanti Kernel, Langchain அல்லது Autogen போன்றவற்றைப் பயன்படுத்தலாம்.
Retrieval Augmented Generation (RAG) பற்றிய உங்கள் கற்றலை தொடர:
-
உங்கள் விருப்பமான கட்டமைப்பைப் பயன்படுத்தி பயன்பாட்டிற்கு முன்னணி இடைமுகம் உருவாக்கவும்
-
LangChain அல்லது Semantic Kernel போன்ற கட்டமைப்பைப் பயன்படுத்தி உங்கள் பயன்பாட்டை மறுசெய்யவும்.
பாடத்தை முடித்தமைக்கு வாழ்த்துக்கள் 👏.
இந்த பாடத்தை முடித்த பிறகு, எங்கள் Generative AI கற்றல் சேகரிப்பைப் பார்க்கவும் மற்றும் உங்கள் Generative AI அறிவைப் மேம்படுத்திக் கொள்ளவும்!
பிரத்யேகத்தமிழ்: இந்த ஆவணம் AI மொழிபெயர்ப்பு சேவை Co-op Translator பயன்படுத்தி மொழிபெயர்க்கப்பட்டுள்ளது. நாங்கள் துல்லியத்திற்காக முயற்சி செய்கிறோம் என்றாலும், தானியங்கு மொழிபெயர்ப்புகளில் பிழைகள் அல்லது தவறுகள் உள்ளிருப்பதை தயவுசெய்து கவனத்தில் கொள்ளவும். இயல்புநிலையில் உள்ள ஆவணம் அதிசய மொழியில் அங்கீகாரம் பெற்ற ஆதாரமாகக் கருதல் வேண்டும். முக்கியமான தகவல்களுக்கு, தொழில்முறை மனித மொழிபெயர்ப்பு பரிந்துரை செய்யப்படுகிறது. இந்த மொழிபெயர்ப்பைப் பயன்படுத்தியதில் ஏற்படும் எந்தவொரு தவறுகளுக்கும் அல்லது தவறான புரிதலுக்கும் நாங்கள் பொறுப்பேற்க மாட்டோம்.



