روش‌های خلاصه‌سازی متن با استفاده از Vertex AI PalM API

1. مقدمه

خلاصه سازی متن فرآیند ایجاد یک نسخه کوتاهتر از یک سند متنی است و در عین حال اطلاعات مهم را حفظ می کند. از این فرآیند می توان برای مرور سریع یک سند طولانی، دریافت اصل مقاله یا اشتراک گذاری خلاصه با کاربران استفاده کرد. اگرچه خلاصه کردن یک پاراگراف کوتاه یک کار بی اهمیت است، اما اگر می خواهید یک سند بزرگ را خلاصه کنید، چند چالش وجود دارد که باید بر آنها غلبه کنید. به عنوان مثال، یک فایل PDF با چندین صفحه.

در این کد لبه یاد خواهید گرفت که چگونه می توانید از مدل های مولد برای خلاصه کردن اسناد بزرگ استفاده کنید.

چیزی که خواهی ساخت

در این آموزش، نحوه استفاده از مدل‌های تولیدی برای خلاصه کردن اطلاعات از متن را با استفاده از روش‌های زیر خواهید آموخت:

  • چاشنی
  • MapReduce
  • MapReduce با تکه های همپوشانی
  • MapReduce with Rolling Summary

2. الزامات

  • مرورگری مانند کروم یا فایرفاکس
  • یک پروژه Google Cloud با فعال کردن صورت‌حساب

3. هزینه ها

این آموزش از Vertex AI Generative AI Studio به عنوان جزء قابل پرداخت Google Cloud استفاده می کند.

درباره قیمت‌گذاری Vertex AI ، قیمت‌گذاری Generative AI اطلاعات کسب کنید و از محاسبه‌گر قیمت‌گذاری برای ایجاد برآورد هزینه بر اساس استفاده پیش‌بینی‌شده خود استفاده کنید.

4. شروع به کار

  1. 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 می توانید ترمینال را با استفاده از دکمه بالا راه اندازی مجدد کنید.
  1. محیط نوت بوک خود را به یکی از روش های زیر احراز هویت کنید:
  • برای Colab ، سلول زیر را لغو نظر کنید.
from google.colab import auth
auth.authenticate_user()
  1. کتابخانه ها را برای مقداردهی اولیه 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")
  1. مدل هایی را وارد کنید که در آن مدل تولید متن از پیش آموزش دیده به نام text-bison@001 را بارگیری می کنید.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. فایل های داده ای را در جایی که یک فایل 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. روش پر کردن

ساده ترین راه برای انتقال داده به یک مدل زبان این است که آن را به عنوان متن در اعلان قرار دهید. این شامل تمام اطلاعات مربوطه در اعلان و ترتیبی است که می خواهید مدل آن را پردازش کند.

  1. متن را فقط از صفحه 2 در فایل 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")
  1. یک الگوی اعلان ایجاد کنید که بتوان بعداً در نوت بوک از آن استفاده کرد.
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:
"""
  1. از 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)
  1. مدل با یک پیام خطا پاسخ داد: 400 Request حاوی یک آرگومان نامعتبر است زیرا متن استخراج شده برای پردازش مدل تولیدی بسیار طولانی است.

برای جلوگیری از این مشکل، باید یک تکه از متن استخراج شده را وارد کنید، به عنوان مثال، 30000 کلمه اول.

# 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

شما باید نتیجه زیر را در تصویر مشاهده کنید:

710efedd9f6dbc6d.png

خلاصه

اگرچه متن کامل برای مدل بسیار بزرگ است، اما شما با استفاده از مدل موفق شده‌اید فهرستی مختصر و گلوله‌ای از مهم‌ترین اطلاعات را از بخشی از PDF ایجاد کنید.

مزایا

  • این روش تنها یک فراخوانی به مدل می دهد.
  • هنگام خلاصه کردن متن، مدل به همه داده ها به طور همزمان دسترسی دارد. این باعث بهتر شدن نتیجه می شود.

معایب

  • اکثر مدل ها دارای طول زمینه هستند. برای اسناد بزرگ (یا بسیاری از اسناد) این کار نمی کند زیرا منجر به درخواست بزرگتر از طول متن می شود.
  • این روش فقط روی داده های کوچکتر کار می کند و برای اسناد بزرگ مناسب نیست.

6. روش MapReduce

برای رفع مشکل حل این مشکل برای اسناد بزرگ، به روش MapReduce نگاه می کنیم. این روش ابتدا داده های بزرگ را به قطعات کوچکتر تقسیم می کند، سپس روی هر قطعه یک دستور اجرا می کند. برای کارهای خلاصه‌سازی، خروجی اولین فرمان خلاصه‌ای از آن قطعه است. هنگامی که تمام خروجی های اولیه تولید شدند، یک اعلان متفاوت برای ترکیب آنها اجرا می شود.

برای جزئیات پیاده سازی این روش به این لینک github مراجعه کنید.

7. تبریک می گویم

تبریک می گویم! شما با موفقیت یک سند طولانی را خلاصه کردید. 2 روش برای خلاصه کردن اسناد طولانی به همراه مزایا و معایب آنها را یاد گرفته اید. چند روش برای خلاصه کردن اسناد بزرگ وجود دارد. به 2 روش دیگر توجه کنید - MapReduce با تکه های همپوشانی و MapReduce با خلاصه چرخشی در یک کد دیگر.

خلاصه کردن یک سند طولانی می تواند چالش برانگیز باشد. از شما می خواهد که نکات اصلی سند را شناسایی کنید، اطلاعات را ترکیب کنید و آن را به صورت مختصر و منسجم ارائه کنید. اگر سند پیچیده یا فنی باشد، ممکن است مشکل شود. علاوه بر این، خلاصه کردن یک سند طولانی می تواند زمان بر باشد، زیرا باید متن را به دقت بخوانید و تجزیه و تحلیل کنید تا از دقیق و کامل بودن خلاصه اطمینان حاصل کنید.

در حالی که این روش‌ها به شما امکان می‌دهند با LLM تعامل داشته باشید و اسناد طولانی را به روشی انعطاف‌پذیر خلاصه کنید، ممکن است گاهی بخواهید با استفاده از راه‌اندازی یا روش‌های از پیش ساخته شده، روند را تسریع کنید. اینجاست که کتابخانه هایی مانند LangChain مورد استفاده قرار می گیرند. درباره پشتیبانی LangChain در Vertex AI بیشتر بیاموزید.