1. ভূমিকা
পাঠ্য সংক্ষিপ্তকরণ হল গুরুত্বপূর্ণ তথ্য সংরক্ষণ করার সময় একটি পাঠ্য নথির একটি সংক্ষিপ্ত সংস্করণ তৈরি করার প্রক্রিয়া। এই প্রক্রিয়াটি একটি দীর্ঘ নথি দ্রুত স্কিম করতে, একটি নিবন্ধের সারাংশ পেতে, বা ব্যবহারকারীদের সাথে একটি সারাংশ ভাগ করতে ব্যবহার করা যেতে পারে। যদিও একটি ছোট অনুচ্ছেদের সারসংক্ষেপ করা একটি অ-তুচ্ছ কাজ, আপনি যদি একটি বড় নথির সারসংক্ষেপ করতে চান তবে কিছু চ্যালেঞ্জ অতিক্রম করতে হবে। উদাহরণস্বরূপ, একাধিক পৃষ্ঠা সহ একটি পিডিএফ ফাইল।
এই কোডল্যাবে, আপনি শিখবেন কিভাবে আপনি বড় নথির সারসংক্ষেপ করতে জেনারেটিভ মডেল ব্যবহার করতে পারেন।
আপনি কি নির্মাণ করবেন
এই টিউটোরিয়ালে, আপনি নিম্নলিখিত পদ্ধতিগুলির মাধ্যমে কাজ করে পাঠ্য থেকে তথ্য সংক্ষিপ্ত করার জন্য জেনারেটিভ মডেলগুলি কীভাবে ব্যবহার করবেন তা শিখবেন:
- স্টাফিং
- MapReduce
- ওভারল্যাপিং অংশগুলির সাথে MapReduce
- রোলিং সারাংশ সহ MapReduce
2. প্রয়োজনীয়তা
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্রকল্প৷
3. খরচ
এই টিউটোরিয়ালটি Google ক্লাউডের বিলযোগ্য উপাদান হিসাবে Vertex AI জেনারেটিভ AI স্টুডিও ব্যবহার করে।
Vertex AI প্রাইসিং , জেনারেটিভ AI প্রাইসিং সম্পর্কে জানুন এবং আপনার প্রজেক্টেড ব্যবহারের উপর ভিত্তি করে একটি খরচ অনুমান তৈরি করতে প্রাইসিং ক্যালকুলেটর ব্যবহার করুন।
4. শুরু করা
- নিম্নোক্ত কমান্ড ব্যবহার করে 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)
- ভার্টেক্স এআই ওয়ার্কবেঞ্চের জন্য আপনি উপরের বোতামটি ব্যবহার করে টার্মিনালটি পুনরায় চালু করতে পারেন।
- নিম্নলিখিত উপায়ে আপনার নোটবুকের পরিবেশকে প্রমাণীকরণ করুন:
- Colab-এর জন্য, নিচের সেলটিতে মন্তব্য করুন।
from google.colab import auth
auth.authenticate_user()
- ভার্টেক্স এআই ওয়ার্কবেঞ্চের জন্য, সেটআপ নির্দেশাবলী দেখুন।
- 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")
- মডেল আমদানি করুন যেখানে আপনি টেক্সট-বাইসন@001 নামক প্রাক-প্রশিক্ষিত পাঠ্য প্রজন্মের মডেল লোড করেন।
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
- ডেটা ফাইলগুলি প্রস্তুত করুন যেখানে আপনি সংক্ষিপ্ত কাজগুলির জন্য একটি PDF ফাইল ডাউনলোড করেন৷
# 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)
এখানে আপনি কিভাবে ডাউনলোড করা PDF ফাইলের কয়েকটি পৃষ্ঠা দেখতে পারেন।
# 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
5. স্টাফিং পদ্ধতি
একটি ভাষার মডেলে ডেটা পাস করার সহজ উপায় হল প্রম্পটে প্রম্পটে "স্টাফ" করা। এটি প্রম্পটে এবং আপনি যে মডেলটিকে প্রক্রিয়া করতে চান সেই ক্রমে সমস্ত প্রাসঙ্গিক তথ্য অন্তর্ভুক্ত করে৷
- PDF ফাইলে শুধুমাত্র পৃষ্ঠা 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 ব্যবহার করুন৷ মনে রাখবেন যে 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 অনুরোধে একটি অবৈধ যুক্তি রয়েছে কারণ নিষ্কাশন করা পাঠ্যটি জেনারেটিভ মডেলটির প্রক্রিয়া করার জন্য খুব দীর্ঘ৷
এই সমস্যাটি এড়াতে, আপনাকে নিষ্কাশিত পাঠ্যের একটি অংশ ইনপুট করতে হবে, উদাহরণস্বরূপ, প্রথম 30,000 শব্দ।
# 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
আপনি স্ক্রিনশট নিম্নলিখিত ফলাফল দেখতে হবে:
সারাংশ
যদিও সম্পূর্ণ পাঠ্যটি মডেলটির জন্য খুব বড়, আপনি মডেলটি ব্যবহার করে PDF এর একটি অংশ থেকে সবচেয়ে গুরুত্বপূর্ণ তথ্যের একটি সংক্ষিপ্ত, বুলেটেড তালিকা তৈরি করতে পেরেছেন।
সুবিধা
- এই পদ্ধতিটি মডেলটিতে শুধুমাত্র একটি কল করে।
- টেক্সট সংক্ষিপ্ত করার সময়, মডেলের একবারে সমস্ত ডেটাতে অ্যাক্সেস থাকে। এটি ফলাফল আরও ভাল করে তোলে।
অসুবিধা
- বেশিরভাগ মডেলের একটি প্রসঙ্গ দৈর্ঘ্য আছে। বড় নথিগুলির (বা অনেক নথির) জন্য এটি কাজ করে না কারণ এটি প্রসঙ্গ দৈর্ঘ্যের চেয়ে বড় প্রম্পটে পরিণত হয়।
- এই পদ্ধতিটি শুধুমাত্র ডেটার ছোট অংশে কাজ করে এবং বড় নথির জন্য উপযুক্ত নয়।
6. MapReduce পদ্ধতি
বড় নথিগুলির জন্য এটি সমাধানের সমস্যা সমাধানের জন্য, আমরা MapReduce পদ্ধতিটি দেখব। এই পদ্ধতিটি প্রথমে বড় ডেটাকে ছোট ছোট টুকরোগুলিতে বিভক্ত করে, তারপর প্রতিটি টুকরোতে একটি প্রম্পট চালায়। সংক্ষিপ্তকরণ কাজের জন্য, প্রথম প্রম্পটের আউটপুট হল সেই অংশের সারাংশ। একবার সমস্ত প্রাথমিক আউটপুট তৈরি হয়ে গেলে, তাদের একত্রিত করার জন্য একটি ভিন্ন প্রম্পট চালানো হয়।
এই পদ্ধতির বাস্তবায়নের বিশদ বিবরণের জন্য এই github লিঙ্কটি পড়ুন।
7. অভিনন্দন
অভিনন্দন! আপনি সফলভাবে একটি দীর্ঘ নথির সারসংক্ষেপ করেছেন। আপনি তাদের সুবিধা এবং অসুবিধা সহ দীর্ঘ নথির সংক্ষিপ্তসারের জন্য 2টি পদ্ধতি শিখেছেন। বড় নথির সারসংক্ষেপ করার জন্য কয়েকটি পদ্ধতি রয়েছে। 2টি অন্যান্য পদ্ধতির জন্য দেখুন - ওভারল্যাপিং অংশগুলির সাথে MapReduce এবং অন্য কোডল্যাবে রোলিং সারাংশ সহ MapReduce৷
একটি দীর্ঘ নথির সারসংক্ষেপ করা চ্যালেঞ্জিং হতে পারে। এর জন্য আপনাকে নথির মূল পয়েন্টগুলি সনাক্ত করতে হবে, তথ্য সংশ্লেষিত করতে হবে এবং এটি একটি সংক্ষিপ্ত এবং সুসংগত উপায়ে উপস্থাপন করতে হবে। ডকুমেন্ট জটিল বা প্রযুক্তিগত হলে এটি কঠিন হতে পারে। উপরন্তু, একটি দীর্ঘ নথির সারসংক্ষেপ করা সময়সাপেক্ষ হতে পারে কারণ সারাংশটি সঠিক এবং সম্পূর্ণ কিনা তা নিশ্চিত করার জন্য আপনাকে মনোযোগ সহকারে পাঠ্যটি পড়তে এবং বিশ্লেষণ করতে হবে।
যদিও এই পদ্ধতিগুলি আপনাকে LLMগুলির সাথে ইন্টারঅ্যাক্ট করতে এবং নমনীয় উপায়ে দীর্ঘ নথির সংক্ষিপ্তসারের অনুমতি দেয়, আপনি কখনও কখনও বুটস্ট্র্যাপিং বা পূর্ব-নির্মিত পদ্ধতিগুলি ব্যবহার করে প্রক্রিয়াটিকে দ্রুত করতে চাইতে পারেন। এখানেই ল্যাংচেইনের মতো লাইব্রেরি ব্যবহার করা হয়। Vertex AI-তে LangChain সমর্থন সম্পর্কে আরও জানুন।