जब प्राकृतिक भाषा प्रसंस्करण (एनएलपी) और सूचना पुनर्प्राप्ति की बात आती है, तो प्रासंगिक जानकारी को कुशलतापूर्वक और सटीक रूप से पुनर्प्राप्त करने की क्षमता सर्वोपरि है। जैसे-जैसे क्षेत्र विकसित हो रहा है, पुनर्प्राप्ति प्रणालियों के प्रदर्शन को बढ़ाने के लिए नई तकनीकों और पद्धतियों का विकास किया जा रहा है, विशेष रूप से के संदर्भ में पुनर्प्राप्ति संवर्धित पीढ़ी (आरएजी)। ऐसी ही एक तकनीक, जिसे रीरैंकर्स के साथ दो-चरण पुनर्प्राप्ति के रूप में जाना जाता है, पारंपरिक पुनर्प्राप्ति विधियों की अंतर्निहित सीमाओं को संबोधित करने के लिए एक शक्तिशाली समाधान के रूप में उभरी है।
इस लेख में हम दो-चरण पुनर्प्राप्ति और पुनर्रैंकर्स की जटिलताओं पर चर्चा करते हैं, उनके अंतर्निहित सिद्धांतों, कार्यान्वयन रणनीतियों और आरएजी सिस्टम की सटीकता और दक्षता बढ़ाने में उनके द्वारा प्रदान किए जाने वाले लाभों की खोज करते हैं। हम अवधारणाओं को स्पष्ट करने और इस अत्याधुनिक तकनीक की गहरी समझ को सुविधाजनक बनाने के लिए व्यावहारिक उदाहरण और कोड स्निपेट भी प्रदान करेंगे।
पुनर्प्राप्ति संवर्धित पीढ़ी (आरएजी) को समझना
दो-चरण पुनर्प्राप्ति और पुनर्रैंकर्स की विशिष्टताओं में गोता लगाने से पहले, आइए संक्षेप में पुनर्प्राप्ति संवर्धित पीढ़ी (आरएजी) की अवधारणा पर दोबारा गौर करें। आरएजी एक ऐसी तकनीक है जो बड़े भाषा मॉडल (एलएलएम) को डेटाबेस या दस्तावेज़ संग्रह जैसे बाहरी सूचना स्रोतों तक पहुंच प्रदान करके उनके ज्ञान और क्षमताओं का विस्तार करती है। लेख से अधिक देखें "एलएलएम में पुनर्प्राप्ति संवर्धित पीढ़ी में एक गहन जानकारी".
विशिष्ट RAG प्रक्रिया में निम्नलिखित चरण शामिल होते हैं:
- प्रश्न: एक उपयोगकर्ता प्रश्न पूछता है या सिस्टम को निर्देश प्रदान करता है।
- बहाली: सिस्टम उपयोगकर्ता की क्वेरी से संबंधित जानकारी ढूंढने के लिए वेक्टर डेटाबेस या दस्तावेज़ संग्रह से पूछताछ करता है।
- वृद्धि: पुनर्प्राप्त जानकारी को उपयोगकर्ता की मूल क्वेरी या निर्देश के साथ जोड़ दिया जाता है।
- पीढ़ी: भाषा मॉडल संवर्धित इनपुट को संसाधित करता है और अपने आउटपुट की सटीकता और व्यापकता को बढ़ाने के लिए बाहरी जानकारी का लाभ उठाते हुए एक प्रतिक्रिया उत्पन्न करता है।
जबकि आरएजी एक शक्तिशाली तकनीक साबित हुई है, यह अपनी चुनौतियों से रहित नहीं है। प्रमुख मुद्दों में से एक पुनर्प्राप्ति चरण में है, जहां पारंपरिक पुनर्प्राप्ति विधियां सबसे प्रासंगिक दस्तावेजों की पहचान करने में विफल हो सकती हैं, जिससे भाषा मॉडल से इष्टतम या गलत प्रतिक्रियाएं हो सकती हैं।
दो-चरण पुनर्प्राप्ति और पुनर्रैंकर्स की आवश्यकता
पारंपरिक पुनर्प्राप्ति विधियां, जैसे कि कीवर्ड मिलान या वेक्टर स्पेस मॉडल पर आधारित, अक्सर प्रश्नों और दस्तावेजों के बीच सूक्ष्म अर्थ संबंधों को पकड़ने के लिए संघर्ष करती हैं। इस सीमा के परिणामस्वरूप उन दस्तावेज़ों की पुनर्प्राप्ति हो सकती है जो केवल सतही रूप से प्रासंगिक हैं या महत्वपूर्ण जानकारी छूट जाती है जो उत्पन्न प्रतिक्रिया की गुणवत्ता में काफी सुधार कर सकती है।
इस चुनौती से निपटने के लिए, शोधकर्ताओं और चिकित्सकों ने पुनर्रैंकर्स के साथ दो-चरणीय पुनर्प्राप्ति की ओर रुख किया है। इस दृष्टिकोण में दो-चरणीय प्रक्रिया शामिल है:
- प्रारंभिक पुनर्प्राप्ति: पहले चरण में, संभावित रूप से प्रासंगिक दस्तावेज़ों का एक अपेक्षाकृत बड़ा सेट एक तेज़ और कुशल पुनर्प्राप्ति विधि, जैसे वेक्टर स्पेस मॉडल या कीवर्ड-आधारित खोज का उपयोग करके पुनर्प्राप्त किया जाता है।
- पुनर्रैंकिंग: दूसरे चरण में, क्वेरी के लिए उनकी प्रासंगिकता के आधार पर प्रारंभ में पुनर्प्राप्त दस्तावेज़ों को पुन: व्यवस्थित करने के लिए एक अधिक परिष्कृत रीरैंकिंग मॉडल को नियोजित किया जाता है, जो प्रभावी रूप से सबसे प्रासंगिक दस्तावेज़ों को सूची के शीर्ष पर लाता है।
रीरैंकिंग मॉडल, अक्सर एक तंत्रिका नेटवर्क या ट्रांसफार्मर-आधारित आर्किटेक्चर, किसी दिए गए क्वेरी के लिए दस्तावेज़ की प्रासंगिकता का आकलन करने के लिए विशेष रूप से प्रशिक्षित किया जाता है। उन्नत प्राकृतिक भाषा समझ क्षमताओं का लाभ उठाकर, पुनर्रैंकर क्वेरी और दस्तावेज़ों के बीच अर्थ संबंधी बारीकियों और प्रासंगिक संबंधों को पकड़ सकता है, जिसके परिणामस्वरूप अधिक सटीक और प्रासंगिक रैंकिंग प्राप्त होती है।
दो-चरण पुनर्प्राप्ति और पुनर्रैंकर्स के लाभ
पुनर्रैंकर्स के साथ दो-चरण पुनर्प्राप्ति को अपनाने से आरएजी सिस्टम के संदर्भ में कई महत्वपूर्ण लाभ मिलते हैं:
- बेहतर शुद्धता: आरंभ में पुनर्प्राप्त दस्तावेज़ों को पुन: क्रमबद्ध करके और सबसे अधिक प्रासंगिक दस्तावेज़ों को शीर्ष पर प्रचारित करके, सिस्टम भाषा मॉडल को अधिक सटीक और सटीक जानकारी प्रदान कर सकता है, जिससे उच्च-गुणवत्ता वाली उत्पन्न प्रतिक्रियाएँ प्राप्त हो सकती हैं।
- डोमेन से बाहर की समस्याओं को कम किया गया: पारंपरिक पुनर्प्राप्ति के लिए उपयोग किए जाने वाले एंबेडिंग मॉडल को अक्सर सामान्य-उद्देश्य वाले टेक्स्ट कॉर्पोरा पर प्रशिक्षित किया जाता है, जो डोमेन-विशिष्ट भाषा और शब्दार्थ को पर्याप्त रूप से कैप्चर नहीं कर सकता है। दूसरी ओर, रीरैंकिंग मॉडल को डोमेन-विशिष्ट डेटा पर प्रशिक्षित किया जा सकता है, जिससे "डोमेन से बाहर" समस्या को कम किया जा सकता है और विशेष डोमेन के भीतर पुनर्प्राप्त दस्तावेज़ों की प्रासंगिकता में सुधार किया जा सकता है।
- अनुमापकता: दो-चरणीय दृष्टिकोण प्रारंभिक चरण में तेज और हल्के पुनर्प्राप्ति तरीकों का लाभ उठाकर कुशल स्केलिंग की अनुमति देता है, जबकि दस्तावेजों के एक छोटे उपसमूह के लिए अधिक कम्प्यूटेशनल रूप से गहन पुनर्रैंकिंग प्रक्रिया को आरक्षित करता है।
- लचीलापन: रीरैंकिंग मॉडल को प्रारंभिक पुनर्प्राप्ति विधि से स्वतंत्र रूप से स्वैप या अपडेट किया जा सकता है, जो सिस्टम की उभरती जरूरतों के लिए लचीलापन और अनुकूलनशीलता प्रदान करता है।
कोलबर्ट: कुशल और प्रभावी देर से बातचीत
पुनर्रैंकिंग के क्षेत्र में असाधारण मॉडलों में से एक है कोलबर्ट (बीईआरटी पर प्रासंगिक देर से बातचीत). कोलबीईआरटी एक दस्तावेज़ पुनर्रैंकर मॉडल है जो "लेट इंटरेक्शन" नामक एक नवीन इंटरेक्शन तंत्र की शुरुआत करते हुए बीईआरटी की गहरी भाषा समझ क्षमताओं का लाभ उठाता है।
कोलबर्ट: बीईआरटी पर प्रासंगिक देर से बातचीत के माध्यम से कुशल और प्रभावी मार्ग खोज
ColBERT में लेट इंटरेक्शन तंत्र पुनर्प्राप्ति प्रक्रिया के अंतिम चरण तक प्रश्नों और दस्तावेजों को अलग-अलग संसाधित करके कुशल और सटीक पुनर्प्राप्ति की अनुमति देता है। विशेष रूप से, ColBERT स्वतंत्र रूप से BERT का उपयोग करके क्वेरी और दस्तावेज़ को एन्कोड करता है, और फिर एक हल्का लेकिन शक्तिशाली इंटरैक्शन चरण नियोजित करता है जो उनकी सूक्ष्म समानता को मॉडल करता है। देरी करके लेकिन इस बारीक बातचीत को बनाए रखते हुए, कोलबर्ट गहरी भाषा मॉडल की अभिव्यक्ति का लाभ उठा सकता है, साथ ही साथ ऑफ़लाइन दस्तावेज़ प्रतिनिधित्व की पूर्व-गणना करने की क्षमता प्राप्त कर सकता है, जिससे क्वेरी प्रोसेसिंग में काफी तेजी आ सकती है।
कोलबर्ट का लेट इंटरेक्शन आर्किटेक्चर कई लाभ प्रदान करता है, जिसमें बेहतर कम्प्यूटेशनल दक्षता, दस्तावेज़ संग्रह आकार के साथ स्केलेबिलिटी और वास्तविक दुनिया के परिदृश्यों के लिए व्यावहारिक प्रयोज्यता शामिल है। इसके अतिरिक्त, ColBERT को डीनोइज़्ड पर्यवेक्षण और अवशिष्ट संपीड़न (ColBERTv2 में) जैसी तकनीकों के साथ आगे बढ़ाया गया है, जो प्रशिक्षण प्रक्रिया को परिष्कृत करते हैं और उच्च पुनर्प्राप्ति प्रभावशीलता को बनाए रखते हुए मॉडल के अंतरिक्ष पदचिह्न को कम करते हैं।
यह कोड स्निपेट दर्शाता है कि दस्तावेज़ों के संग्रह को अनुक्रमित करने के लिए jina-colbert-v1-en मॉडल को कैसे कॉन्फ़िगर और उपयोग किया जाए, जिससे लंबे संदर्भों को कुशलतापूर्वक संभालने की क्षमता का लाभ उठाया जा सके।
रीरैंकर्स के साथ दो-चरण पुनर्प्राप्ति को कार्यान्वित करना
अब जब हमें दो-चरण पुनर्प्राप्ति और पुनर्रैंकर्स के पीछे के सिद्धांतों की समझ हो गई है, तो आइए आरएजी प्रणाली के संदर्भ में उनके व्यावहारिक कार्यान्वयन का पता लगाएं। हम इन तकनीकों के एकीकरण को प्रदर्शित करने के लिए लोकप्रिय पुस्तकालयों और रूपरेखाओं का लाभ उठाएंगे।
पर्यावरण की स्थापना
इससे पहले कि हम कोड में उतरें, आइए अपना विकास परिवेश स्थापित करें। हम पायथन और कई लोकप्रिय एनएलपी लाइब्रेरी का उपयोग करेंगे, जिनमें हगिंग फेस ट्रांसफॉर्मर, सेंटेंस ट्रांसफॉर्मर और लांसडीबी शामिल हैं।
# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb
डेटा तैयारी
प्रदर्शन उद्देश्यों के लिए, हम हगिंग फेस डेटासेट्स से "एआई-आर्क्सिव-चंक्ड" डेटासेट का उपयोग करेंगे, जिसमें मशीन लर्निंग, प्राकृतिक भाषा प्रसंस्करण और बड़े भाषा मॉडल पर 400 से अधिक आर्क्सिव पेपर शामिल हैं।
from datasets import load_dataset
dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")
<pre>
इसके बाद, हम डेटा को प्रीप्रोसेस करेंगे और कुशल पुनर्प्राप्ति और प्रसंस्करण की सुविधा के लिए इसे छोटे हिस्सों में विभाजित करेंगे।
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)
प्रारंभिक पुनर्प्राप्ति चरण के लिए, हम अपने दस्तावेज़ों और प्रश्नों को सघन वेक्टर अभ्यावेदन में एन्कोड करने के लिए एक सेंटेंस ट्रांसफार्मर मॉडल का उपयोग करेंगे, और फिर LanceDB जैसे वेक्टर डेटाबेस का उपयोग करके अनुमानित निकटतम पड़ोसी खोज करेंगे।
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)
from sentence_transformers import SentenceTransformer
from lancedb import lancedb
# Load Sentence Transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())
# Index documents
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)
हमारे दस्तावेज़ों को अनुक्रमित करके, हम किसी दिए गए क्वेरी वेक्टर के निकटतम पड़ोसियों को ढूंढकर प्रारंभिक पुनर्प्राप्ति कर सकते हैं।
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")
def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts
chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)
पुनर्रैंकिंग
प्रारंभिक पुनर्प्राप्ति के बाद, हम क्वेरी के लिए उनकी प्रासंगिकता के आधार पर पुनर्प्राप्त दस्तावेज़ों को पुन: व्यवस्थित करने के लिए एक रीरैंकिंग मॉडल का उपयोग करेंगे। इस उदाहरण में, हम कोलबर्ट रीरैंकर का उपयोग करेंगे, जो एक तेज़ और सटीक ट्रांसफार्मर-आधारित मॉडल है जो विशेष रूप से दस्तावेज़ रैंकिंग के लिए डिज़ाइन किया गया है।
from lancedb.rerankers import ColbertReranker
reranker = ColbertReranker()
# Rerank initial documents
reranked_docs = reranker.rerank(query, initial_docs)
RSI reranked_docs
सूची में अब दस्तावेज़ों को क्वेरी से उनकी प्रासंगिकता के आधार पर पुन: व्यवस्थित किया गया है, जैसा कि कोलबर्ट रीरैंकर द्वारा निर्धारित किया गया है।
संवर्द्धन और सृजन
हाथ में पुन: रैंक किए गए और प्रासंगिक दस्तावेज़ों के साथ, हम आरएजी पाइपलाइन के संवर्द्धन और उत्पादन चरणों के लिए आगे बढ़ सकते हैं। अंतिम प्रतिक्रिया उत्पन्न करने के लिए हम हगिंग फेस ट्रांसफॉर्मर्स लाइब्रेरी से एक भाषा मॉडल का उपयोग करेंगे।
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")
# Augment query with reranked documents
augmented_query = query + " " + " ".join(reranked_docs[:3])
# Generate response from language model
input_ids = tokenizer.encode(augmented_query, return_tensors="pt")
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)
print(response)