एफएआई, लैंगचेन, पीवाईपीडीएफ और टिनिलामा -1.1 बी-चैट-वी 1.0 के साथ एक वार्तालाप सहायक बनाने के लिए कोडिंग का कार्यान्वयन

RAG -Powered संचार अनुसंधान सहायक सूचनाओं को पुनर्प्राप्त करने वाली प्रणालियों के संयोजन से पारंपरिक भाषा मॉडल की सीमाओं पर विचार करते हैं। सिस्टम आधार द्वारा विशेष Junowledge का पता लगाता है, प्रासंगिक जानकारी प्राप्त करता है, और इसे सही मात्रा के साथ संचार करता है। यह दृष्टिकोण निराशा को कम करता है, डोमेन-विशिष्ट Junowledge का प्रबंधन करता है, और RIE को पाठ प्राप्त करने का जवाब देता है। इस ट्यूटोरियल में, हम विजयन पेपर्स के बारे में सवालों के जवाब देने के लिए, चेहरे से ओपन-कॉटाल मॉडल टिनिलमा -1.1 बी-चैट-वी 10, मेट से एफएआई और लैंगचेन फ्रेमवर्क का उपयोग करके इस तरह के सहायक का निर्माण करेंगे।

सबसे पहले, आइए आवश्यक पुस्तकालयों को स्थापित करें:

!pip install langchain-community langchain pypdf sentence-transformers faiss-cpu transformers accelerate einops

अब, आइए आवश्यक पुस्तकालयों को आयात करें:

import os
import torch
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.vectorstores import FAISS
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.chains import ConversationalRetrievalChain
from langchain_community.llms import HuggingFacePipeline
from transformers import AutoTokenizer, AutoModelForCausalLM, pipeline
import pandas as pd 
from IPython.display import display, Markdown

हम अगले चरण में कागज को बचाने के लिए एक ड्राइव माउंट करेंगे:

from google.colab import drive
drive.mount('/content/drive')
print("Google Drive mounted")

हमारे Junowledge समर्थन के लिए, हम बढ़े हुए कागजात के पीडीएफ दस्तावेजों का उपयोग करेंगे। आइए इन दस्तावेजों को लोड और संसाधित करने के लिए एक फ़ंक्शन बनाएं:

def load_documents(pdf_folder_path):
    documents = ()


    if not pdf_folder_path:
        print("Downloading a sample paper...")
        !wget -q https://arxiv.org/pdf/1706.03762.pdf -O attention.pdf
        pdf_docs = ("attention.pdf")
    else:
        pdf_docs = (os.path.join(pdf_folder_path, f) for f in os.listdir(pdf_folder_path)
                   if f.endswith('.pdf'))


    print(f"Found {len(pdf_docs)} PDF documents")


    for pdf_path in pdf_docs:
        try:
            loader = PyPDFLoader(pdf_path)
            documents.extend(loader.load())
            print(f"Loaded: {pdf_path}")
        except Exception as e:
            print(f"Error loading {pdf_path}: {e}")


    return documents




documents = load_documents("")

अगला, हमें कुशल वसूली प्राप्त करने के लिए इन दस्तावेजों को छोटे हिस्से में विभाजित करने की आवश्यकता है:

def split_documents(documents):
    text_splitter = RecursiveCharacterTextSplitter(
        chunk_size=1000,
        chunk_overlap=200,
        length_function=len,
    )
    chunks = text_splitter.split_documents(documents)
    print(f"Split {len(documents)} documents into {len(chunks)} chunks")
    return chunks


chunks = split_documents(documents)

हम अपने दस्तावेज़ के हिस्से के लिए वेक्टर एम्बेडिंग बनाने के लिए लाइन-ट्रांसफ़ॉर्मर्स का उपयोग करेंगे:

def create_vector_store(chunks):
    print("Loading embedding model...")
    embedding_model = HuggingFaceEmbeddings(
        model_name="sentence-transformers/all-MiniLM-L6-v2",
        model_kwargs={'device': 'cuda' if torch.cuda.is_available() else 'cpu'}
    )


    print("Creating vector store...")
    vector_store = FAISS.from_documents(chunks, embedding_model)
    print("Vector store created successfully!")
    return vector_store


vector_store = create_vector_store(chunks)

अब, उत्तर देने के लिए एक ओपन सोर्स लैंग्वेज मॉडल लोड करें। हम तिनिलमा का उपयोग करेंगे, जो कि कोलाब पर चलने के लिए काफी छोटा है लेकिन यह अभी भी हमारे काम के लिए शक्तिशाली है:

def load_language_model():
    print("Loading language model...")
    model_id = "TinyLlama/TinyLlama-1.1B-Chat-v1.0"


    try:
        import subprocess
        print("Installing/updating bitsandbytes...")
        subprocess.check_call(("pip", "install", "-U", "bitsandbytes"))
        print("Successfully installed/updated bitsandbytes")
    except:
        print("Could not update bitsandbytes, will proceed without 8-bit quantization")


    from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig, pipeline
    import torch


    tokenizer = AutoTokenizer.from_pretrained(model_id)


    if torch.cuda.is_available():
        try:
            quantization_config = BitsAndBytesConfig(
                load_in_8bit=True,
                llm_int8_threshold=6.0,
                llm_int8_has_fp16_weight=False
            )


            model = AutoModelForCausalLM.from_pretrained(
                model_id,
                torch_dtype=torch.bfloat16,
                device_map="auto",
                quantization_config=quantization_config
            )
            print("Model loaded with 8-bit quantization")
        except Exception as e:
            print(f"Error with quantization: {e}")
            print("Falling back to standard model loading without quantization")
            model = AutoModelForCausalLM.from_pretrained(
                model_id,
                torch_dtype=torch.bfloat16,
                device_map="auto"
            )
    else:
        model = AutoModelForCausalLM.from_pretrained(
            model_id,
            torch_dtype=torch.float32,
            device_map="auto"
        )


    pipe = pipeline(
        "text-generation",
        model=model,
        tokenizer=tokenizer,
        max_length=2048,
        temperature=0.2,
        top_p=0.95,
        repetition_penalty=1.2,
        return_full_text=False
    )


    from langchain_community.llms import HuggingFacePipeline
    llm = HuggingFacePipeline(pipeline=pipe)
    print("Language model loaded successfully!")
    return llm


llm = load_language_model()

अब, आइए एक वेक्टर स्टोर और भाषा मॉडल को मिलाकर हमारे सहायक को बनाएं:

def format_research_assistant_output(query, response, sources):
    output = f"n{'=' * 50}n"
    output += f"USER QUERY: {query}n"
    output += f"{'-' * 50}nn"
    output += f"ASSISTANT RESPONSE:n{response}nn"
    output += f"{'-' * 50}n"
    output += f"SOURCES REFERENCED:nn"


    for i, doc in enumerate(sources):
        output += f"Source #{i+1}:n"
        content_preview = doc.page_content(:200) + "..." if len(doc.page_content) > 200 else doc.page_content
        wrapped_content = textwrap.fill(content_preview, width=80)
        output += f"{wrapped_content}nn"


    output += f"{'=' * 50}n"
    return output


import textwrap


research_assistant = create_research_assistant(vector_store, llm)


test_queries = (
    "What is the key idea behind the Transformer model?",
    "Explain self-attention mechanism in simple terms.",
    "Who are the authors of the paper?",
    "What are the main advantages of using attention mechanisms?"
)


for query in test_queries:
    response, sources = research_assistant(query, return_sources=True)
    formatted_output = format_research_assistant_output(query, response, sources)
    print(formatted_output)

इस ट्यूटोरियल में, हमने ओपन सोर्स मॉडल के साथ रिव्यू-अप-अप-पे जेनरेशन का उपयोग करके एक वार्तालाप अनुसंधान सहायक बनाया है। आरएजी दस्तावेज़, पुनर्प्राप्ति को एकीकृत करके, भ्रम को कम करके और डोमेन-विशिष्ट सटीकता सुनिश्चित करके भाषा मॉडल को बढ़ाते हैं। गाइड पर्यावरण की स्थापना, अद्वितीय कागजात के प्रसंस्करण, फिस और वाक्य ट्रांसफार्मर का उपयोग करके वेक्टर एम्बेडिंग बनाने और टिनिलामा जैसे एक खुले स्रोत भाषा मॉडल को एकीकृत करने से संचालित होता है। प्रासंगिक दस्तावेज़ का एक हिस्सा प्राप्त करता है और एक उद्धरण के साथ उत्तर का उत्पादन करता है। यह कार्यान्वयन उपयोगकर्ताओं को जुनोवेल्टेज आधार को क्वेरी करने की अनुमति देता है, जिससे ए-संचालित अनुसंधान डोमेन-विशिष्ट प्रश्नों का उत्तर देने के लिए अधिक विश्वसनीय और कुशल अनुसंधान करता है।


यहाँ है कोटिनी नोटबुक। इसके अलावा, हमें फॉलो करना न भूलें ट्विटर और हमसे जुड़ें टेलीग्राफिक मीडिया और लिंक्डइन जी.आर.सिर हिलाकर सहमति देना। हमसे जुड़ने के लिए मत भूलना 85 k+ ml सबमिटेड


ASIF Razzaq एक दूरदर्शी उद्यमी और इंजीनियर के रूप में मार्केटएकपोस्ट मीडिया इंक के सीईओ हैं, ASIF सामाजिक अच्छे के लिए कृत्रिम बुद्धिमत्ता की संभावना को बढ़ाने के लिए प्रतिबद्ध है। उनका सबसे हालिया प्रयास आर्टिफिशियल इंटेलिजेंस मीडिया प्लेटफॉर्म, मार्कटेकपोस्ट का उद्घाटन है, जो मशीन लर्निंग की गहराई के लिए और कवरेज की गहराई के लिए गहरी सीखने की खबर के लिए है। यह तकनीकी रूप से ध्वनि है और एक बड़े दर्शकों द्वारा आसानी से समझ में आता है। प्लेटफ़ॉर्म में 2 मिलियन से अधिक मासिक दृश्य हैं, जो दर्शकों के बीच अपनी लोकप्रियता दिखाते हैं।

Scroll to Top