శోధన అనువర్తనాలు పాఠంలో, మీ స్వంత డేటాను Large Language Models (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 లను శిక్షణ ఇచ్చే డేటా వ్యక్తిగత గమనికలు లేదా సంస్థ యొక్క ఉత్పత్తి మాన్యువల్ వంటి గోప్య సమాచారాన్ని మినహాయిస్తుంది.
మీ గమనికల నుండి క్విజ్లను సృష్టించే ఒక చాట్బాట్ను ఏర్పాటు చేయాలని అనుకోండి, మీరు జ్ఞాన భాండారంతో కనెక్షన్ అవసరం. ఇక్కడ RAG సహాయం చేస్తుంది. RAGలు ఇలా పనిచేస్తాయి:
-
జ్ఞాన భాండారం: రిట్రీవల్ ముందే, ఈ డాక్యుమెంట్లను తీసుకుని ప్రీప్రాసెస్ చేయాలి, సాధారణంగా పెద్ద డాక్యుమెంట్లను చిన్న చిన్న భాగాలుగా విభజించి, వాటిని టెక్స్ట్ ఎంబెడింగ్లుగా మార్చి డేటాబేసులో నిల్వచేస్తారు.
-
వినియోగదారు ప్రశ్న: వినియోగదారు ఒక ప్రశ్న అడుగుతాడు.
-
రిట్రీవల్: వినియోగదారు ప్రశ్న అడిగినప్పుడు, ఎంబెడింగ్ మోడల్ సంబంధిత సమాచారాన్ని మా జ్ఞాన భాండారానికి తీసుకువెళుతుంది, ఇది ప్రాంప్ట్లో చేర్చబడుతుంది.
-
ఆగ్మెంటెడ్ జనరేషన్: LLM తీసుకున్న సమాచారం ఆధారంగా దాని ప్రతిస్పందనను మెరుగుపరుస్తుంది. ఇది ప్రీ-ట్రెయిన్ చేసిన డేటా మాత్రమే కాకుండా చేర్చిన సందర్భం నుండి సంబంధిత సమాచారాన్ని కూడా ఉపయోగించి సమాదానం సృష్టిస్తుంది. రిట్రీవ్ చేసిన డేటాను LLM ప్రతిస్పందనలను పెంపొందించడానికి ఉపయోగిస్తారు. ఆపై LLM వినియోగదారు ప్రశ్నకు సమాధానం అందిస్తుంది.
RAGల ఆర్కిటెక్చర్ ట్రాన్స్ఫార్మర్స్ ఉపయోగించి అమలవుతుంది, ఇది రెండు భాగాల: ఒక ఎంకోడర్ మరియు ఒక డికోడర్. ఉదాహరణకు, వినియోగదారు ప్రశ్న అడిగితే, ఇన్పుట్ టెక్స్ట్ను పదాల అర్థాన్ని అందుకునే వెక్టార్లుగా "ఎంకోడ్" చేస్తారు, ఆ వెక్టార్లను మా డాక్యుమెంట్ సూచికలో "డికోడ్" చేసి వినియోగదారు ప్రశ్న ఆధారంగా కొత్త టెక్స్ట్ సృష్టిస్తుంది. LLM రెండు ఎంకోడర్-డికోడర్ మోడల్లను ఉపయోగించి అవుట్పుట్ను సృష్టిస్తుంది.
ప్రతిపాదించిన పేపర్ Retrieval-Augmented Generation for Knowledge intensive NLP (natural language processing software) Tasks ప్రకారం RAG అమలు చేసే రెండు విధానాలు:
-
RAG-Sequence: రిట్రీవ్ చేసిన డాక్యుమెంట్లను ఉపయోగించి వినియోగదారు ప్రశ్నకు ఉత్తమ సమాధానం సూచిస్తుంది
-
RAG-Token: డాక్యుమెంట్లను ఉపయోగించి తదుపరి టోకెన్ను ఉత్పత్తి చేసి, ఆ తర్వాత వాటిని తిరిగి రిట్రీవ్ చేసి ప్రశ్నకు సమాధానం ఇస్తుంది
-
సమాచార సంపద: టెక్స్ట్ ప్రతిస్పందనలు సమకాలీనంగా మరియు తాజాగా ఉంటాయని నిర్ధారిస్తుంది. అందువల్ల, ఇది డొమైన్-ప్రత్యేక పనుల్లో పెర్ఫార్మెన్స్ మెరుగుపరుస్తుంది, అంతర్గత జ్ఞాన భాండారానికి ప్రాప్యత కల్పించడం ద్వారా.
-
సృష్టి తగ్గిస్తుంది: పర్యవేక్షణా డేటాను వాడి వినియోగదారుల ప్రశ్నలకు పాసకన్సాస్ట్ വി ఇచ్చే సమాచారాన్ని అందిస్తుంది.
-
వ్యయrosse): LLM ని ఫైన్-ట్యూనింగ్ చేయడం కంటే ఇది మరింత ఆర్థికంగా ఉంటుంది
మా అనువర్తనం మా వ్యక్తిగత డేటాపైన ఆధారపడి ఉంటుంది అంటే, AI For Beginners పాఠ్యాంశంలోని Neural Network పాఠం.
పారంపరిక డేటాబేసుల కంటే విభిన్నంగా, వెక్టార్ డేటాబేస్లు ఎంబెడింగ్ వెక్టార్లను నిల్వ చేయడానికి, నిర్వహించడానికి మరియు శోధించడానికి ప్రత్యేకంగా రూపొందించిన డేటాబేస్లు. ఇవి డాక్యుమెంట్ల యొక్క సంఖ్యాత్మక ప్రాతినిధ్యాలను నిల్వచేస్తాయి. డేటాను సంఖ్యాత్మక ఎంబెడింగ్లలో విభజించడం మా AI వ్యవస్థకు డేటాను అర్థం చేసుకోవడానికి మరియు ప్రాసెస్ చేయడానికి సులభతరం చేస్తుంది.
LLMs ఒక నిర్ధిష్ట పరిమితి టోకెన్ల సంఖ్యను మాత్రమే ఇన్పుట్గా తీసుకునే కారణంగా, మా ఎంబెడింగ్లను వెక్టార్ డేటాబేస్లలో నిల్వచేస్తాము. అన్ని ఎంబెడింగ్లను 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 = []
# చివరి భాగం కనీస length కు చేరకపోయినా, దాన్ని చేర్చండి
if current_chunk:
chunks.append(' '.join(current_chunk))
return chunksతుక్కులయ్యాక, వేరు వేరు ఎంబెడింగ్ మోడల్స్ ఉపయోగించి మా టెక్స్ట్ను ఎంబెడ్ చేయవచ్చు. కొన్ని మోడల్స్: word2vec, OpenAI అందించే ada-002, Azure Computer Vision మరియు మరిన్నీ. ఎంచుకోవాల్సిన మోడల్ మీరు ఉపయోగిస్తున్న భాషలు, సంకేతీకృత కంటెంట్ (టెక్స్ట్/చిత్రాలు/ఆడియో), ఇన్పుట్ పరిమాణం మరియు ఎంబెడింగ్ అవుట్పుట్ పొడవు మీద ఆధారపడి ఉంటుంది.
OpenAI యొక్క text-embedding-ada-002 మోడల్ ఉపయోగించి తయారైన ఎంబెడింగ్ ఉదాహరణ:

వినియోగదారు ప్రశ్న అడిగినప్పుడు, రిట్రీవర్ దానిని query ఎంకోడర్ ఉపయోగించి ఒక వెక్టార్గా మార్చుతాడు, ఆ తర్వాత మా డాక్యుమెంట్ శోధన సూచికలో ఇన్పుట్కు సంబంధించి ఉన్న వెక్టార్లను శోధిస్తాడు. ఆ తరువాత, ఇన్పుట్ వెక్టర్ మరియు డాక్యుమెంట్ వెక్టార్లను టెక్స్ట్కి మార్చి LLM ద్వారా పాస్ చేస్తాడు.
రిట్రీవల్ అంటే శోధన క్రైటీరియాను సంతృప్తి చేసే డాక్యుమెంట్లను సూచిక నుండి త్వరగా కనుగొనడం. రిట్రీవర్ లక్ష్యం కంటెక్స్ట్ అందించే డాక్యుమెంట్లను తీసుకుని LLMకి భూమిక ఏర్పరచడం.
మా డేటాబేస్లో శోధన నిర్వహించడానికి పలు మార్గాలు ఉన్నాయి:
-
కీవర్డ్ శోధన - టెక్స్ట్ శోధనకు ఉపయోగిస్తారు
-
వెక్క్టర్ శోధన - డాక్యుమెంట్లను టెక్స్ట్ నుండి వెక్టార్ ప్రాతినిధ్యాలుగా మార్చి, పదాల అర్థం ఆధారంగా సెమాంటిక్ శోధన అనుమతిస్తుంది. వినియోగదారు ప్రశ్నకు దగ్గరగా ఉన్న వెక్టార్ ప్రాతినిధ్యాలను కలిగిన డాక్యుమెంట్లను శోధించడం.
-
హైబ్రిడ్ - కీవర్డ్ మరియు వెక్టార్ శోధనల కలయిక.
పరిష్కారంగా, డేటాబేస్లో ప్రశ్నకి సమానమైన స్పందన లేకపోతే, సిస్టమ్ అందుబాటులో ఉన్న ఉత్తమ సమాచారాన్ని ఇస్తుంది. మీరు ప్రమాణాలను సెట్ చేయవచ్చు లేదా హైబ్రిడ్ శోధనను ఉపయోగించవచ్చు. ఈ పాఠంలో మేము హైబ్రిడ్ శోధన ఉపయోగిస్తాము, అంటే వెక్టార్ మరియు కీవర్డ్ శోధనల కలయిక. డేటాను తుక్కులు మరియు ఎంబెడింగ్స్ కలిగిన కాలమ్స్ ఉన్న డేటాఫ్రేమ్గా నిల్వచేస్తాము.
రిట్రీవర్ జ్ఞాన డేటాబేస్లో సమీపంగా ఉన్న ఎంబెడింగ్లను శోధిస్తాడు, సమీప మిత్రులు, ఎందుకంటే ఇవి సారూప్యమైన టెక్స్ట్లు. వినియోగదారు ప్రశ్న అడిగితే, అది మొదట ఎంబెడ్ చేసి, సమానమైన ఎంబెడింగ్లతో సరిపోల్చబడుతుంది. వెక్టార్ల మధ్య సారూప్యతాకు సాధారణ మేయర్ గా కోసైన్ సమానత్వం ఉపయోగిస్తారు, ఇది రెండు వెక్టార్ల మధ్య కోణంపై ఆధారపడి ఉంటుంది.
మరొక ప్రత్యామ్నాయంగా ఉపయోగించగలవి: యూక్లిడియన్ దూరం (వెక్కార్ ఎండ్ పాయింట్ల మధ్య సరళి), డాట్ ప్రొడక్ట్ (రెండు వెక్టార్ల సమాన అంశాల ఉత్పత్తుల సమ్మతి).
రిట్రీవల్ చేసే ముందు, జ్ఞాన భాండారానికి శోధన సూచికను రూపొందించాలి. సూచిక మా ఎంబెడింగ్లను నిల్వ చేస్తుంది మరియు పెద్ద డేటాబేస్లో కూడా అత్యంత సమానమైన తుక్కులను త్వరగా తిరిగి ఇస్తుంది. సూచికను స్థానికంగా క్రింది విధంగా సృష్టించవచ్చు:
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ని ఈ మిశ్రమంలో చేర్చడం, మా డేటా ఆధారంగా grounded సమాధానాలు పొందడం. మేము దీన్ని ఇలా అమలు చేయవచ్చు:
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)-
సమాధానాల నాణ్యత: సహజంగాను, ప్రవాహంగా, మానవీయంగానే ఉండి ఉండాలి
-
డేటా గ్రౌండెడ్నెస్: అందించిన డాక్యుమెంట్ల నుంచి వచ్చిన సమాధానాలను మూల్యాంకనం
-
సంబంధితత: తీసుకొచ్చిన సమాధానం ప్రశ్నకి సరిపోతుందా, సంబంధం ఉన్నదా అని పరిశీలించడం
-
ప్రవాహం - లిప్యంతర బోధ్యత (grammatical) క్రమం అర్థం కావడం
ఫంక్షన్ కాల్స్ మీ అప్కు మార్గం సాదించగల వేర్వేరు ఉపయోగాలున్నాయి, ఉదాహరణలు:
-
ప్రశ్నలు మరియు సమాధానాలు: మీ కంపెనీ డేటాను చాట్కు గ్రౌండ్ చేయడం, ఉద్యోగులు ప్రశ్నలు అడగడానికి
-
సిఫార్సు వ్యవస్థలు: మీకు సరిపోయే విలువలను కనుగొనే వ్యవస్థను సృష్టించడం, ఉదా: సినిమాలు, రెస్టారెంట్లు మొదలయినవి
-
చాట్బాట్ సేవలు: చాట్ చరిత్రను నిల్వచేయడం మరియు వినియోగదారు డేటా ఆధారంగా సంభాషణను వ్యక్తిగతీకరించడం
-
వెక్టార్ ఎంబెడింగ్స్ ఆధారంగా చిత్రం శోధన, ఇది చిత్రం గుర్తింపు మరియు అసాధారణ గుర్తింపులో ఉపయోగకరంగా ఉంటుంది
RAG యొక్క పునాది అంశాలని మేము కవర్ చేసాము, డేటాను అనువర్తనంలో చేర్చటం, వినియోగదారు ప్రశ్న, అవుట్పుట్. RAG సృష్టింపును సులభతరం చేయడానికి, Semanti Kernel, Langchain లేదా Autogen వంటి ఫ్రేమ్వర్క్లను ఉపయోగించవచ్చు.
Retrieval Augmented Generation (RAG) పై మీ అనుభవాన్ని కొనసాగించడానికి:
-
మీ ఇష్టమైన ఫ్రేమ్వర్క్ను ఉపయోగించి అనువర్తనానికి ఫ్రంట్ ఎండ్ సృష్టించండి
-
LangChain లేదా Semantic Kernel లాంటి ఫ్రేమ్వర్క్ ఉపయోగించండి మరియు మీ అనువర్తనాన్ని మళ్ళీ సృష్టించండి.
ఈ పాఠం పూర్తి చేసినందుకు అభినందనలు 👏.
ఈ పాఠం పూర్తి చేసిన తర్వాత, Generative AI జ్ఞానాన్ని పెంచుకోవడానికి మా Generative AI Learning collection ను చూడండి!
వివరణాత్మక నోటీసు:
ఈ పత్రాన్ని AI అనువాద సేవ Co-op Translator ఉపయోగించి అనువదించబడింది. మేము సరైన అనువాదానికి ప్రయత్నిస్తూనే ఉన్నా, స్వయంచాలక అనువాదాల్లో తప్పులు లేదా అసత్యతలు ఉండవచ్చని దయచేసి గమనించండి. స్వదేశీ భాషలో ఉన్న అసలైన పత్రం ప్రామాణిక మూలంగా పరిగణించబడాలి. ముఖ్యమైన సమాచారానికి, ప్రొఫెషనల్ మానవ అనువాదాన్ని ఉపయోగించడం మంచిది. ఈ అనువాదం ఉపయోగంతో వచ్చిన ఏ సందేహాలు లేదా తప్పుదోవలకు మేము బాధ్యత వహించము.


