एआई पाठ संक्षेपण

विभिन्न बड़े भाषा मॉडलों (LLM) के लिए प्रविष्टि प्रोंप्ट शब्दों के लिए विभिन्न अधिकतम लंबाई की सीमाएँ होती हैं। यदि हम एक लंबे लेख का संक्षेपण करने की आवश्यकता होती है, लेकिन लेख की लंबाई मॉडल की अधिकतम लंबाई सीमा से अधिक होती है, तो हम सीधे पूरे लेख को एआई मॉडल को फीड नहीं कर सकते। इस तरह के स्थितियों में, LangChain स्ट्रैटेजीज और इनकाप्सुलेशन प्रदान करता है ताकि इसे संबोधित किया जा सके। इस अध्याय में मुख्य रूप से यह बताया गया है कि LangChain कैसे पाठ संक्षेपण को हल करता है।

डेटा पूर्वसंस्करण

सबसे पहले, हम टेस्ट डेटा को तैयार करते हैं। इस उदाहरण में, हम एक लंबे दस्तावेज को लोड करते हैं और फिर डस्तावेज को विभाजित करने के लिए डस्तावेज के कई छोटे भागों में विभाजित करते हैं।

  • नोट: यहां स्थानीय फ़ाइल डेटा लोड करना केवल चित्रण के लिए है। वास्तविक व्यवसायिक स्तर पर, आप अपने खुद के डेटाबेस से दस्तावेज़ डेटा लोड कर सकते हैं।
from langchain import OpenAI, PromptTemplate, LLMChain
from langchain.text_splitter import CharacterTextSplitter
from langchain.chains.mapreduce import MapReduceChain
from langchain.prompts import PromptTemplate

llm = OpenAI(temperature=0)

text_splitter = CharacterTextSplitter()
with open("../../state_of_the_union.txt") as f:
    state_of_the_union = f.read()
texts = text_splitter.split_text(state_of_the_union)
from langchain.docstore.document import Document

docs = [Document(page_content=t) for t in texts[:3]]

प्रारंभ करना

लंबे पाठ को संक्षेपित करने का सबसे सरल तरीका यह है कि लैंगचेन द्वारा प्रदान की गई load_summarize_chain कार्य कारी का उपयोग किया जाए।

from langchain.chains.summarize import load_summarize_chain
chain = load_summarize_chain(llm, chain_type="map_reduce")
chain.run(docs)

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

chain_type पैरामीटर की व्याख्या

लैंगचेन ने प्रविष्टि कार्य के प्रोंप्ट शब्द के जेट्टों की टोकन लंबाई सीमा से अधिक होने के मामले के लिए 4 हैंडलिंग विधियां डिज़ाइन की हैं।

4 प्रकार के chain_type निम्नलिखित हैं:

  • स्टफ
  • मैप_रीडयूस
  • संशोधित करना
  • मैप_रीरैंक

स्टफ प्रकार

यह लैंगचेन का डिफ़ॉल्ट प्रकार है, जो सभी दस्तावेज की सामग्री को एकसाथ LLM मॉडल को संक्षेपण के लिए भेज देता है। इसलिए, इसे एक भराई जाने वाली मोड कहा जाता है। यदि दस्तावेज सामग्री बहुत लंबी होती है, तो यह Nमॉडल की टोकन सीमा से निश्चित रूप से अधिक होगी।

मैप_रीडयूस प्रकार

इस विधि में, पहले हर दस्तावेज़ अंश को LLM मॉडल को व्यक्तिगत रूप से संक्षेपण के लिए भेजा जाता है, फिर सभी संक्षेपणों को जोड़ा जाता है, और अंत में AI को समग्र संक्षेपण प्रदान किया जाता है, जो कई प्रोग्रामिंग भाषाओं में मानचित्र कार्यों की अवधारणा के समकक्ष है।

संशोधित करना प्रकार

यह विधि संक्षेपण रूप में पाठ उत्पन्न करती है। यह पहले दस्तावेज की सामग्री को llm मॉडल को संक्षेपण के लिए भेजती है, फिर पहले दस्तावेज के संक्षेपण की सामग्री + दूसरे दस्तावेज की सामग्री को llm मॉडल को संक्षेपण के लिए भेजती है, और आगे-आगे, एक लंबे पाठ के लिए एक अंतिम संक्षेपण प्राप्त करने के लिए।

मैप_रीरैंक प्रकार

यह सवाल-जवाब कार्यों में प्रयोग होता है। यह सवाल से संबंधित दस्तावेज़ के टुकड़े को चयन करता है और फिर उन्हें llm मॉडल को सवाल का जवाब देने के लिए भेजता है।

"stuff" कार्य का उदाहरण

यहां एक उदाहरण है कि 'स्टफ' प्रकार का उपयोग करके एक लेख का संक्षेपण कैसे किया जाता है, जो LLM की टोकन लंबाई सीमा से अधिक नहीं होने के लिए उपयुक्त है:

chain = load_summarize_chain(llm, chain_type="stuff")
chain.run(docs)

कस्टम प्रॉम्प्ट शब्द

"stuff" प्रकार के लिए, यहां कस्टम प्रॉम्प्ट शब्दों का एक उदाहरण है:

prompt_template = """निम्नलिखित सामग्री का संक्षेपण करें:

{text}

सारांश:"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["text"])
chain = load_summarize_chain(llm, chain_type="stuff", prompt=PROMPT)
chain.run(docs)

map_reduce कार्य का उदाहरण

map_reduce लेख का सारांश करता है, और बेशक, इस विधि से कई AI मॉडल कॉल होगी।

chain = load_summarize_chain(llm, chain_type="map_reduce")
chain.run(docs)

map_reduce कार्य के लिए अनुकूल प्रॉम्प्ट शब्द

prompt_template = """निम्नलिखित सामग्री का सारांश करें:

{text}

सारांश:"""
PROMPT = PromptTemplate(template=prompt_template, input_variables=["text"])
chain = load_summarize_chain(OpenAI(temperature=0), chain_type="map_reduce", return_intermediate_steps=True, map_prompt=PROMPT, combine_prompt=PROMPT)
chain({"input_documents": docs}, return_only_outputs=True)

refine कार्य का उदाहरण

बस chain_type पैरामीटर को refine में बदल दें।

chain = load_summarize_chain(llm, chain_type="refine")
chain.run(docs)

refine कार्य के लिए अनुकूल प्रॉम्प्ट शब्द टेम्पलेट

यहां refine कार्य के लिए अनुकूल प्रॉम्प्ट शब्दों का एक उदाहरण है:

prompt_template = """निम्नलिखित सामग्री का सारांश करें:

{text}

सारांश:"""

PROMPT = PromptTemplate(template=prompt_template, input_variables=["text"])

refine_template = (
    "आपका काम है एक अंतिम पाठ सारांश उत्पन्न करना\n"
    "यहां मौजूदा सारांश जानकारी है: {existing_answer}\n"
    "नई पृष्ठभूमि जानकारी के आधार पर मौजूदा सारांश को बढ़ावा दें\n"
    "पृष्ठभूमि जानकारी निम्नलिखित है\n"
    "------------\n"
    "{text}\n"
    "------------\n"
    "पृष्ठभूमि जानकारी के आधार पर मौजूदा सारांश को बढ़ावा दें\n"
    "यदि पृष्ठभूमि जानकारी उपयोगी नहीं है तो मौजूदा सारांश जानकारी वापस करें।"
)
refine_prompt = PromptTemplate(
    input_variables=["existing_answer", "text"],
    template=refine_template,
)
chain = load_summarize_chain(OpenAI(temperature=0), chain_type="refine", return_intermediate_steps=True, question_prompt=PROMPT, refine_prompt=refine_prompt)
chain({"input_documents": docs}, return_only_outputs=True)