১. ভূমিকা
টেক্সট সামারাইজেশন হলো কোনো টেক্সট ডকুমেন্টের গুরুত্বপূর্ণ তথ্য অক্ষুণ্ণ রেখে সেটির একটি সংক্ষিপ্ত সংস্করণ তৈরি করার প্রক্রিয়া। এই প্রক্রিয়াটি একটি দীর্ঘ ডকুমেন্ট দ্রুত চোখ বুলিয়ে নিতে, কোনো প্রবন্ধের মূলভাব বুঝতে, অথবা ব্যবহারকারীদের সাথে একটি সারাংশ শেয়ার করতে ব্যবহার করা যেতে পারে। যদিও একটি ছোট অনুচ্ছেদের সারাংশ তৈরি করা একটি গুরুত্বপূর্ণ কাজ, তবে একটি বড় ডকুমেন্টের সারাংশ তৈরি করতে চাইলে কিছু প্রতিবন্ধকতা অতিক্রম করতে হয়। উদাহরণস্বরূপ, একাধিক পৃষ্ঠা সম্বলিত একটি পিডিএফ ফাইল।
এই কোডল্যাবে আপনি শিখবেন, কীভাবে জেনারেটিভ মডেল ব্যবহার করে বড় আকারের ডকুমেন্ট সংক্ষিপ্ত করা যায়।
আপনি যা তৈরি করবেন
এই টিউটোরিয়ালে, আপনি নিম্নলিখিত পদ্ধতিগুলো অনুসরণ করে জেনারেটিভ মডেল ব্যবহার করে টেক্সট থেকে তথ্য সংক্ষিপ্ত করার উপায় শিখবেন:
- স্টাফিং
- ম্যাপরিডিউস
- ওভারল্যাপিং চাঙ্ক সহ ম্যাপরিডিউস
- রোলিং সামারি সহ ম্যাপরিডিউস
২. প্রয়োজনীয়তা
- ক্রোম বা ফায়ারফক্সের মতো একটি ব্রাউজার
- বিলিং সক্ষম একটি গুগল ক্লাউড প্রজেক্ট
৩. খরচ
এই টিউটোরিয়ালে গুগল ক্লাউডের বিলযোগ্য উপাদান হিসেবে ভার্টেক্স এআই জেনারেটিভ এআই স্টুডিও ব্যবহার করা হয়েছে।
Vertex AI-এর মূল্য ও Generative AI-এর মূল্য সম্পর্কে জানুন এবং আপনার প্রত্যাশিত ব্যবহারের উপর ভিত্তি করে খরচের একটি আনুমানিক হিসাব তৈরি করতে প্রাইসিং ক্যালকুলেটর ব্যবহার করুন।
৪. শুরু করা
- নিম্নলিখিত কমান্ড ব্যবহার করে Vertex AI SDK, অন্যান্য প্যাকেজ এবং তাদের নির্ভরতাগুলি ইনস্টল করুন:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
- Colab- এর ক্ষেত্রে, কার্নেল পুনরায় চালু করতে নিম্নলিখিত সেলটি আনকমেন্ট করুন।
# # Automatically restart kernel after installs so that your environment can access the new packages
import IPython
app = IPython.Application.instance()
app.kernel.do_shutdown(True)
- Vertex AI Workbench- এর ক্ষেত্রে, আপনি উপরের বাটনটি ব্যবহার করে টার্মিনালটি পুনরায় চালু করতে পারেন।
- নিম্নলিখিত উপায়গুলির মধ্যে যেকোনো একটি ব্যবহার করে আপনার নোটবুক পরিবেশটি প্রমাণীকরণ করুন:
- Colab- এর জন্য, নিম্নলিখিত সেলটি আনকমেন্ট করুন।
from google.colab import auth
auth.authenticate_user()
- Vertex AI Workbench-এর জন্য, সেটআপ নির্দেশাবলী দেখুন।
- Vertex AI SDK চালু করার জন্য লাইব্রেরিগুলো ইম্পোর্ট করুন।
- Colab-এর জন্য, নিচের সেলটি আনকমেন্ট করে লাইব্রেরিগুলো ইম্পোর্ট করুন।
import vertexai
PROJECT_ID = "[your-project-id]" # @param {type:"string"}
vertexai.init(project=PROJECT_ID, location="us-central1")
import re
import urllib
import warnings
from pathlib import Path
import backoff
import pandas as pd
import PyPDF2
import ratelimit
from google.api_core import exceptions
from tqdm import tqdm
from vertexai.language_models import TextGenerationModel
warnings.filterwarnings("ignore")
- যেখানে আপনি text-bison@001 নামক প্রি-ট্রেইনড টেক্সট জেনারেশন মডেলটি লোড করবেন, সেই মডেলগুলো ইম্পোর্ট করুন।
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
- সারসংক্ষেপ তৈরির কাজের জন্য পিডিএফ ফাইল ডাউনলোড করে ডেটা ফাইলগুলো প্রস্তুত করুন।
# Define a folder to store the files
data_folder = "data"
Path(data_folder).mkdir(parents=True, exist_ok=True)
# Define a pdf link to download and place to store the download file
pdf_url = "https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf"
pdf_file = Path(data_folder, pdf_url.split("/")[-1])
# Download the file using `urllib` library
urllib.request.urlretrieve(pdf_url, pdf_file)
ডাউনলোড করা পিডিএফ ফাইলটির কয়েকটি পৃষ্ঠা যেভাবে দেখতে পারবেন, তা এখানে দেওয়া হলো।
# Read the PDF file and create a list of pages
reader = PyPDF2.PdfReader(pdf_file)
pages = reader.pages
# Print three pages from the pdf
for i in range(3):
text = pages[i].extract_text().strip()
print(f"Page {i}: {text} \n\n")
#text contains only the text from page 2
৫. পুর ভরার পদ্ধতি
ল্যাঙ্গুয়েজ মডেলে ডেটা পাঠানোর সবচেয়ে সহজ উপায় হলো, সেটিকে কনটেক্সট হিসেবে প্রম্পটের মধ্যে ঢুকিয়ে দেওয়া। এর ফলে প্রম্পটের সমস্ত প্রাসঙ্গিক তথ্য সেই ক্রমেই থাকে, যে ক্রমে আপনি মডেলটিকে তা প্রসেস করাতে চান।
- পিডিএফ ফাইলটির শুধুমাত্র ২ নং পৃষ্ঠা থেকে লেখাটি বের করুন।
# Entry string that contains the extacted text from page 2
print(f"There are {len(text)} characters in the second page of the pdf")
- একটি প্রম্পট টেমপ্লেট তৈরি করুন যা পরবর্তীতে নোটবুকে ব্যবহার করা যাবে।
prompt_template = """
Write a concise summary of the following text.
Return your response in bullet points which covers the key points of the text.
```{text}```
BULLET POINT SUMMARY:
"""
- নিষ্কাশিত টেক্সটগুলো সংক্ষিপ্ত করতে এপিআই (API)-এর মাধ্যমে এলএলএম (LLM) ব্যবহার করুন। উল্লেখ্য যে, এলএলএম-এর বর্তমানে একটি ইনপুট টেক্সট সীমা রয়েছে এবং অতিরিক্ত বড় ইনপুট টেক্সট গ্রহণ করা নাও হতে পারে। কোটা এবং সীমা সম্পর্কে আরও জানতে, ‘কোটা এবং সীমা’ দেখুন।
নিম্নলিখিত কোডটি একটি ব্যতিক্রম ঘটায়।
# Define the prompt using the prompt template
prompt = prompt_template.format(text=text)
# Use the model to summarize the text using the prompt
summary = generation_model.predict(prompt=prompt, max_output_tokens=1024).text
print(summary)
- মডেলটি একটি ত্রুটি বার্তা দিয়েছে: 400 অনুরোধটিতে একটি অবৈধ আর্গুমেন্ট রয়েছে, কারণ নিষ্কাশিত পাঠ্যটি জেনারেটিভ মডেলের প্রক্রিয়াকরণের জন্য অনেক দীর্ঘ।
এই সমস্যা এড়ানোর জন্য, আপনাকে নিষ্কাশিত পাঠ্যের একটি অংশ, যেমন প্রথম ৩০,০০০ শব্দ, ইনপুট করতে হবে।
# Define the prompt using the prompt template
prompt = prompt_template.format(text=text[:30000])
# Use the model to summarize the text using the prompt
summary = generation_model.predict(prompt=prompt, max_output_tokens=1024)
summary
স্ক্রিনশটে আপনি নিম্নলিখিত ফলাফলটি দেখতে পাবেন:

সারসংক্ষেপ
যদিও সম্পূর্ণ লেখাটি মডেলটির জন্য অনেক বড়, তবুও আপনি মডেলটি ব্যবহার করে পিডিএফ-এর একটি অংশ থেকে সবচেয়ে গুরুত্বপূর্ণ তথ্যের একটি সংক্ষিপ্ত, বুলেট-চিহ্নিত তালিকা তৈরি করতে সক্ষম হয়েছেন।
সুবিধাগুলি
- এই পদ্ধতিটি মডেলকে শুধুমাত্র একবার কল করে।
- কোনো টেক্সট সংক্ষিপ্ত করার সময়, মডেলটি একবারে সমস্ত ডেটা অ্যাক্সেস করতে পারে। এর ফলে ফলাফল আরও ভালো হয়।
অসুবিধা
- বেশিরভাগ মডেলে একটি কনটেক্সট লেংথ থাকে। বড় ডকুমেন্টের (বা অনেকগুলো ডকুমেন্টের) ক্ষেত্রে এটি কাজ করে না, কারণ এর ফলে কনটেক্সট লেংথের চেয়ে বড় একটি প্রম্পট তৈরি হয়।
- এই পদ্ধতিটি শুধুমাত্র ছোট আকারের ডেটার ক্ষেত্রে কাজ করে এবং বড় ডকুমেন্টের জন্য উপযুক্ত নয়।
৬. ম্যাপরিডিউস পদ্ধতি
বড় আকারের ডকুমেন্টের ক্ষেত্রে এই সমস্যার সমাধান করতে, আমরা MapReduce পদ্ধতিটি দেখব। এই পদ্ধতিটি প্রথমে বিশাল ডেটাকে ছোট ছোট অংশে বিভক্ত করে, তারপর প্রতিটি অংশের উপর একটি প্রম্পট চালায়। সারসংক্ষেপ তৈরির কাজের জন্য, প্রথম প্রম্পটের আউটপুটটি হলো সেই অংশের একটি সারাংশ। একবার সমস্ত প্রাথমিক আউটপুট তৈরি হয়ে গেলে, সেগুলোকে একত্রিত করার জন্য একটি ভিন্ন প্রম্পট চালানো হয়।
এই পদ্ধতির বাস্তবায়ন সংক্রান্ত বিস্তারিত তথ্যের জন্য এই গিটহাব লিঙ্কটি দেখুন।
৭. অভিনন্দন
অভিনন্দন! আপনি সফলভাবে একটি দীর্ঘ ডকুমেন্টের সারসংক্ষেপ তৈরি করেছেন। আপনি দীর্ঘ ডকুমেন্টের সারসংক্ষেপ করার দুটি পদ্ধতি এবং সেগুলোর সুবিধা ও অসুবিধা সম্পর্কে শিখেছেন। বড় ডকুমেন্টের সারসংক্ষেপ করার কয়েকটি পদ্ধতি রয়েছে। অন্য একটি কোডল্যাবে আরও দুটি পদ্ধতি—MapReduce with overlapping chunks এবং MapReduce with rolling summary—সম্পর্কে জেনে নিন।
একটি দীর্ঘ নথির সারসংক্ষেপ করা বেশ কঠিন হতে পারে। এর জন্য আপনাকে নথিটির মূল বিষয়গুলো চিহ্নিত করতে, তথ্যগুলোকে সংশ্লেষণ করতে এবং সেটিকে সংক্ষিপ্ত ও সুসংহতভাবে উপস্থাপন করতে হয়। নথিটি জটিল বা প্রযুক্তিগত হলে এই কাজটি আরও কঠিন হয়ে উঠতে পারে। এছাড়াও, একটি দীর্ঘ নথির সারসংক্ষেপ করা সময়সাপেক্ষ হতে পারে, কারণ সারসংক্ষেপটি নির্ভুল ও সম্পূর্ণ কিনা তা নিশ্চিত করার জন্য আপনাকে মনোযোগ সহকারে লেখাটি পড়তে ও বিশ্লেষণ করতে হয়।
যদিও এই পদ্ধতিগুলো আপনাকে নমনীয়ভাবে এলএলএম (LLM)-এর সাথে কাজ করতে এবং দীর্ঘ নথি সংক্ষিপ্ত করতে সাহায্য করে, তবুও কখনও কখনও আপনি বুটস্ট্র্যাপিং বা আগে থেকে তৈরি পদ্ধতি ব্যবহার করে প্রক্রিয়াটিকে আরও দ্রুত করতে চাইতে পারেন। এখানেই ল্যাংচেইন (LangChain)-এর মতো লাইব্রেরিগুলো কাজে আসে। ভার্টেক্স এআই (Vertex AI)-তে ল্যাংচেইন সাপোর্ট সম্পর্কে আরও জানুন।