اے آئی ٹیکسٹ خلاصہ کرنا

مختلف بڑے زبان ماڈلز (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]]

شروع کرنا

لمبے متن کا خلاصہ کرنے کا سب سے آسان طریقہ ہے کہ LangChain فراہم کرتا ہے load_summarize_chain تسک کو برداشت کرنے کیلئے۔

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

LangChain کی فراہم کردہ متن کے خلاصے کو استعمال کرنا آسان ہے۔ تاہم، اگر آپ کچھ پیرامیٹرز کو فائن ٹیون کرنا چاہتے ہیں تو براہ کرم ذیل کونٹینٹ سے رجوع کریں۔ مثال کے طور پر، اوپر دی گئی مثال میں ایک تیار پرومپٹ ورڈ ٹیمپلیٹ کا استعمال ہوا ہے، جو چائنیز کے لئے دوستانہ نہیں ہوسکتا ہے۔ آپ اسے اپنے خود کے پرامیٹر ورڈ ٹیمپلیٹ پر تبدیل کرسکتے ہیں وغیرہ۔

chain_type پیرامیٹر کی وضاحت

LangChain نے چین ٹاسک کی پرومپٹ الفاظ کی لمبائی کی حد سے زیادہ ہونے کی صورت میں ان کا سامنا کرنے کے لئے 4 ہینڈلنگ میتھڈز ترتیب دی ہیں۔

chain_type کی چار اقسام یہ ہیں:

  • stuff
  • map_reduce
  • refine
  • map_rerank

stuff قسم

یہ LangChain کا دیفالٹ ٹائپ ہے، جو تمام دستاویز کا مواد ایک ساتھ LLM ماڈل کو خلاصہ کرنے کے لیے بھیجتا ہے۔ لہذا، اسے stuffing موڈ کہا جاتا ہے۔ اگر دستاویز کا مواد بہت زیادہ ہو، تو یقیناً LLM کی ٹوکن لمبائی کی حد سے تجاویز کرے گا۔

map_reduce قسم

یہ میتھڈ سب سے پہلے ہر ڈاکیومنٹ ٹکڑے کو ال ایل ایم ماڈل کو بھیج کر انفرادی طور پر خلاصہ کیا جاتا ہے، پھر تمام خلاصے کو ملا کر آخر کار کل خلاصہ فراہم کیا جاتا ہے، جو کہ بہت سی پروگرامنگ زبانوں کی میں پرچالہ کتابخانوں کے تصور کے مطابق ہوتا ہے۔

refine قسم

یہ میتھڈ خلاصہ کرنے کا ایک طریقہ فراہم کرتا ہے۔ یہ پہلے داکیومنٹ کے مواد کو llm ماڈل کو خلاصہ کرنے کے لیے بھیجتا ہے، پھر پہلے داکیومنٹ کے خلاصہ کے مواد + دوسرے داکیومنٹ کے مواد کو llm ماڈل کو خلاصہ کرنے کے لیے بھیجتا ہے، وغیرہ کرتا ہے، طویج کے لئے ایک طویل متن کا اختتامی خلاصہ حاصل کرنے کے لئے۔

map_rerank قسم

یہ سوال جواب کرنے کے تاسک میں استعمال ہوتا ہے۔ یہ سوال کے ساتھ بہترین تعلق ہونے والے داکیومنٹ ٹکڑوں کو منتخب کرتا ہے اور پھر انہیں llm ماڈل کو سوال کا جواب دینے کے لئے بھیجتا ہے۔

stuff ٹاسک کا مثال

یہاں stuff ٹاظک کا ایک مثال ہے، جو LLM کی ٹوکن لمبائی حد سے زیادہ نہیں ہونے والے مضامین کے لیے مناسب ہے۔

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

اپنے آپ کے پرومپٹ الفاظ

براہ کرم، stuff قسم کے لیے یہاں ایک مثال ہے:

prompt_template = """Nیچے دی گئی مواد کا خلاصہ کریں:

{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)

ریفائن ٹاسک کا کسٹم پرامپٹ ورڈز ٹیمپلیٹ

ریفائن ٹاسک کے لئے کسٹم پرامپٹ ورڈز کا ایک مثال یہ ہے:

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)