۱. مقدمه
خلاصهسازی متن فرآیند ایجاد نسخه کوتاهتری از یک سند متنی است که در عین حال اطلاعات مهم را حفظ میکند. این فرآیند میتواند برای مرور سریع یک سند طولانی، درک اصل مطلب یک مقاله یا به اشتراک گذاشتن خلاصه با کاربران استفاده شود. اگرچه خلاصهسازی یک پاراگراف کوتاه کار سادهای است، اما اگر میخواهید یک سند بزرگ را خلاصه کنید، چند چالش وجود دارد که باید بر آنها غلبه کنید. به عنوان مثال، یک فایل PDF با چندین صفحه.
در این آزمایشگاه کد، یاد خواهید گرفت که چگونه میتوانید از مدلهای مولد برای خلاصهسازی اسناد بزرگ استفاده کنید.
آنچه خواهید ساخت
در این آموزش، شما یاد خواهید گرفت که چگونه با استفاده از روشهای زیر، از مدلهای مولد برای خلاصهسازی اطلاعات از متن استفاده کنید:
- چاشنی
- نگاشت-کاهش
- MapReduce با تکههای همپوشانی
- MapReduce با خلاصهسازی غلتان
۲. الزامات
۳. هزینهها
این آموزش از Vertex AI Generative AI Studio به عنوان جزء قابل پرداخت Google Cloud استفاده میکند.
درباره قیمتگذاری هوش مصنوعی Vertex ، قیمتگذاری هوش مصنوعی مولد اطلاعات کسب کنید و از ماشین حساب قیمتگذاری برای ایجاد یک تخمین هزینه بر اساس میزان استفاده پیشبینیشده خود استفاده کنید.
۴. شروع کار
- 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")
- فایلهای دادهای را آماده کنید که در آنها یک فایل 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 استخراج کنید.
# 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:
"""
- از LLM از طریق 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)
- مدل با یک پیام خطا پاسخ داد: درخواست ۴۰۰ شامل یک آرگومان نامعتبر است زیرا متن استخراج شده برای پردازش مدل مولد بسیار طولانی است.
برای جلوگیری از این مشکل، باید بخشی از متن استخراجشده، مثلاً ۳۰۰۰۰ کلمه اول، را وارد کنید.
# 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 ایجاد کنید.
مزایا
- این متد فقط یک فراخوانی برای مدل انجام میدهد.
- هنگام خلاصهسازی متن، مدل به تمام دادهها به طور همزمان دسترسی دارد. این امر نتیجه را بهتر میکند.
معایب
- بیشتر مدلها دارای طول زمینه هستند. برای اسناد بزرگ (یا اسناد زیاد) این روش کار نمیکند زیرا منجر به نمایش اعلانی بزرگتر از طول زمینه میشود.
- این روش فقط روی دادههای کوچکتر کار میکند و برای اسناد بزرگ مناسب نیست.
۶. روش نگاشت-کاهش
برای پرداختن به مشکل حل این مشکل برای اسناد بزرگ، به روش MapReduce نگاهی خواهیم انداخت. این روش ابتدا دادههای بزرگ را به قطعات کوچکتر تقسیم میکند، سپس روی هر قطعه یک prompt اجرا میکند. برای وظایف خلاصهسازی، خروجی prompt اول خلاصهای از آن قطعه است. پس از تولید تمام خروجیهای اولیه، prompt دیگری برای ترکیب آنها اجرا میشود.
برای جزئیات پیادهسازی این روش به این لینک گیتهاب مراجعه کنید.
۷. تبریک
تبریک! شما با موفقیت یک سند طولانی را خلاصه کردید. شما دو روش برای خلاصهسازی اسناد طولانی، به همراه مزایا و معایب آنها را یاد گرفتید. چند روش برای خلاصهسازی اسناد بزرگ وجود دارد. به دنبال دو روش دیگر باشید - MapReduce با تکههای همپوشانی و MapReduce با خلاصهسازی غلتان در یک آزمایشگاه کد دیگر.
خلاصه کردن یک سند طولانی میتواند چالش برانگیز باشد. این کار مستلزم آن است که شما نکات اصلی سند را شناسایی کنید، اطلاعات را ترکیب کنید و آن را به صورت مختصر و منسجم ارائه دهید. اگر سند پیچیده یا فنی باشد، این کار میتواند دشوار شود. علاوه بر این، خلاصه کردن یک سند طولانی میتواند زمانبر باشد زیرا باید متن را با دقت بخوانید و تجزیه و تحلیل کنید تا از دقیق و کامل بودن خلاصه اطمینان حاصل کنید.
اگرچه این روشها به شما امکان میدهند با LLMها تعامل داشته باشید و اسناد طولانی را به روشی انعطافپذیر خلاصه کنید، اما گاهی اوقات ممکن است بخواهید با استفاده از بوتاسترپ یا روشهای از پیش ساخته شده، روند کار را سرعت بخشید. اینجاست که کتابخانههایی مانند LangChain به کار میآیند. برای اطلاعات بیشتر در مورد پشتیبانی LangChain به Vertex AI مراجعه کنید.