AI পাঠ সারাংশকরণ
বিভিন্ন বড় ভাষার মডেল (LLM) মডেলের প্রবেশ প্রম্পট শব্দের জন্য বিভিন্ন দৈর্ঘ্যের সীমাবদ্ধতা রয়েছে। যদি আমাদের একটি দীর্ঘ নিবন্ধের সারাংশ দেয়া আবশ্যক হয়, তবে নিবন্ধের দৈর্ঘ্য মডেলের সর্বাধিক দৈর্ঘ্য সীমা অতিক্রম করলে আমরা এটি অবিরাম ভাবে AI মডেলে সরয় দিতে পারবো না। এই ধরনের অনুকরণে, 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 এ prompt word এর মামুলি ক্ষেত্রে LLM এর টোকেন দৈর্ঘ্য সীমা চেয়েছের মামুলি টাইপের 4টি হেন্ডলিং পদ্ধতি ডিজাইন করে।
4 টি chain_type হল:
- stuff
- map_reduce
- refine
- map_rerank
stuff টাইপ
এটি LangChain এর ডিফল্ট প্রকার, যা সকল ডকুমেন্টের সামগ্রিক সংক্ষেপ জন্য ডকুমেন্ট বিষয়বস্ত প্রম্পটকে একসঙ্গে LLM মডেলে পাঠায়। এবং যদি ডকুমেন্টের বিষয়বস্তটি খুব দীর্ঘ হয়, তবে অবশ্যই LLM এর টোকেন সীমাকে অতিক্রম করবে।
map_reduce টাইপ
এই পদ্ধতি প্রথমে প্রতিটি ডকুমেন্ট ফ্র্যাগমেন্টেকে বিভিন্ন সাংক্ষেপের জন্য এলএলএম মডেলে প্রেরণ করে, তারপর সমগ্র সংক্ষেপণ করে, আবশ্যক ক্ষেত্রে এখানে map-reduce ফাংশন লাইব্রেরিগুলির ধারণার মতো।
refine টাইপ
এই পদ্ধতি একটি সারাংশের মধ্যে টেক্সট সারাংশ প্রদান করে। এটা প্রথমে এলএলএম মডেলে প্রথম ডকুমেন্টের বিষয়বস্ত প্রেরণ করে, তারপর প্রথম ডকুমেন্টের সারাংশ বিষয়বস্ত + দ্বিতীয় ডকুমেন্টের বিষয় প্রেরণ করে, এবং পরে এই ধারণা মানে এক দীর্ঘ পাঠের জন্য একটি চেষ্টা করে।
map_rerank টাইপ
এটি প্রশ্ন-উত্তর করা কাজে ব্যবহৃত হয়। এটি প্রশ্নের সাথে সংবাদপত্রের স্থানান্তর শ্লষ্টর দ্রুত বেশিরভাগে উঠা ব্যাপন করে, তারপর এগুলি এলএলএম মডেলে প্রেরণ করে প্রশ্নের উত্তর দেওয়ার জন্য।
stuff
কাজের উদাহরণ
এখানে একটি প্রবন্ধ সারাংশ করা যায় 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)