طرق تلخيص النص باستخدام واجهة Vertex AI PaLM API

1. مقدمة

تلخيص النص هو عملية إنشاء نسخة أقصر من مستند نصي مع الحفاظ على المعلومات المهمة. يمكن استخدام هذه العملية لاستعراض مستند طويل بسرعة أو الاطّلاع على أبرز المعلومات أو مشاركة ملخص مع المستخدمين. على الرغم من أن تلخيص فقرة قصيرة هو مهمة غير تافهة، إلا أن هناك بعض التحديات التي يجب التغلب عليها إذا كنت تريد تلخيص مستند كبير. على سبيل المثال، ملف PDF يتضمّن عدة صفحات.

ستتعرّف في هذا الدرس التطبيقي على كيفية استخدام النماذج التوليدية لتلخيص المستندات الكبيرة.

ما الذي ستنشئه

ستتعلّم في هذا الدليل التوجيهي طريقة استخدام النماذج التوليدية لتلخيص المعلومات من النص من خلال اتّباع الطرق التالية:

  • حشوة
  • MapReduce
  • خفض الخريطة باستخدام أجزاء متداخلة
  • خفض الخريطة باستخدام الملخّص المتعاقب

2. المتطلبات

  • متصفح، مثل Chrome أو Firefox
  • مشروع على Google Cloud تم تفعيل الفوترة فيه

3- التكاليف

يستخدم هذا البرنامج التعليمي Vertex AI Generative AI Studio باعتباره مكوّنًا قابلاً للفوترة في Google Cloud.

تعرَّف على معلومات حول أسعار Vertex 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.
  • بالنسبة إلى 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. استخدِم النموذج اللغوي الكبير من خلال واجهة برمجة التطبيقات لتلخيص النصوص المُستخرجة. يُرجى العِلم أنّ النماذج اللغوية الكبيرة لديها حد أقصى لإدخال النص حاليًا، وبالتالي قد لا يُسمح بحشو نص إدخال كبير. لمزيد من المعلومات عن الحصص والحدود، يُرجى الاطّلاع على الحصص والحدود.

تتسبب التعليمة البرمجية التالية في استثناء.

# 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 على وسيطة غير صالحة لأن النص المستخرَج طويل جدًا بحيث لا يمكن للنموذج التوليدي معالجته.

لتجنب هذه المشكلة، تحتاج إلى إدخال مقطع من النص المستخرج، على سبيل المثال، أول 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- طريقة Mapتقليل

لمعالجة مشكلة حل هذه المشكلة في المستندات الكبيرة، سوف نلقي نظرة على طريقة Mapخفض. تقسم هذه الطريقة أولاً البيانات الكبيرة إلى أجزاء أصغر، ثم تقوم بتشغيل مطالبة على كل جزء. بالنسبة لمهام التلخيص، يكون ناتج المطالبة الأول هو ملخص لهذا الجزء. بعد إنشاء جميع النتائج الأولية، يتم تنفيذ طلب مختلف لدمجها.

يُرجى الرجوع إلى رابط GitHub هذا للاطّلاع على تفاصيل تنفيذ هذه الطريقة.

7. تهانينا

تهانينا! لقد لخصت مستندًا طويلاً بنجاح. لقد تعلمت طريقتين لتلخيص الوثائق الطويلة، إلى جانب مزاياها وعيوبها. هناك عدة طرق لتلخيص المستندات الكبيرة. يمكنك البحث عن طريقتَين أخريَين: استخدام أداة MapDetails باستخدام مقاطع متداخلة واستخدام الأداة Mapَّع مع الملخّص المتداول في درس تطبيقي آخر حول الترميز.

قد يكون تلخيص مستند طويل أمرًا صعبًا. يتطلب منك تحديد النقاط الرئيسية للمستند، وتجميع المعلومات، وتقديمها بطريقة موجزة ومترابطة. قد يكون هذا صعبًا إذا كان المستند معقدًا أو تقنيًا. بالإضافة إلى ذلك، يمكن أن يستغرق تلخيص مستند طويل وقتًا طويلاً حيث تحتاج إلى قراءة النص وتحليله بعناية للتأكد من أن الملخص دقيق وكامل.

تتيح لك هذه الطرق التفاعل مع النماذج اللغوية الكبيرة وتلخيص المستندات الطويلة بطريقة مرنة، إلا أنّه قد تحتاج أحيانًا إلى تسريع العملية باستخدام التمهيد أو الطرق المنشأة مسبقًا. وهنا يأتي دور المكتبات مثل LangChain. مزيد من المعلومات حول توافُق LangChain مع Vertex AI