1. مقدمة
تلخيص النصوص هو عملية إنشاء نسخة أقصر من مستند نصي مع الحفاظ على المعلومات المهمة. يمكن استخدام هذه العملية لتصفّح مستند طويل بسرعة، أو فهم الفكرة الرئيسية لمقالة، أو مشاركة ملخّص مع المستخدمين. على الرغم من أنّ تلخيص فقرة قصيرة ليس مهمة بسيطة، هناك بعض التحديات التي يجب التغلّب عليها إذا أردت تلخيص مستند كبير. على سبيل المثال، ملف PDF يتضمّن عدة صفحات.
في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية استخدام النماذج التوليدية لتلخيص المستندات الكبيرة.
ما ستنشئه
في هذا البرنامج التعليمي، ستتعرّف على كيفية استخدام النماذج التوليدية لتلخيص المعلومات من النص من خلال الطرق التالية:
- حشوة
- MapReduce
- MapReduce with Overlapping Chunks
- MapReduce with Rolling Summary
2. المتطلبات
3- التكاليف
يستخدم هذا الدليل التوجيهي Vertex AI Generative AI Studio كعنصر قابل للفوترة في Google Cloud.
يمكنك الاطّلاع على أسعار Vertex AI وأسعار الذكاء الاصطناعي التوليدي واستخدام حاسبة الأسعار لإنشاء تقدير للتكلفة استنادًا إلى الاستخدام المتوقّع.
4. الخطوات الأولى
- ثبِّت حزمة تطوير البرامج (SDK) الخاصة بـ Vertex AI والحِزم الأخرى والملفات التابعة لها باستخدام الأمر التالي:
!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، اطّلِع على تعليمات الإعداد.
- استورِد المكتبات لبدء إعداد حزمة تطوير البرامج (SDK) الخاصة بمنصة 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")
- استيراد النماذج التي يتم فيها تحميل نموذج إنشاء النص المدرَّب مسبقًا باسم 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- طريقة الحشو
أبسط طريقة لنقل البيانات إلى نموذج لغوي هي "حشوها" في الطلب كمعلومات أساسية. ويشمل ذلك جميع المعلومات ذات الصلة في الطلب وبالترتيب الذي تريد أن يعالجها النموذج.
- استخرِج النص من الصفحة 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")
- أنشئ نموذج طلب يمكن استخدامه لاحقًا في دفتر الملاحظات.
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) من خلال واجهة برمجة التطبيقات لتلخيص النصوص المستخرَجة. يُرجى العِلم أنّ النماذج اللغوية الكبيرة (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. تهانينا
تهانينا! لقد تمكّنت من تلخيص مستند طويل بنجاح. تعرّفت على طريقتَين لتلخيص المستندات الطويلة، بالإضافة إلى مزايا وعيوب كل طريقة. هناك عدة طرق لتلخيص المستندات الكبيرة. يمكنك الاطّلاع على طريقتَين أخريَين، وهما MapReduce مع أجزاء متداخلة وMapReduce مع ملخّص متجدّد في برنامج تعليمي آخر.
قد يكون تلخيص مستند طويل أمرًا صعبًا. يتطلّب ذلك تحديد النقاط الرئيسية في المستند وتجميع المعلومات وتقديمها بطريقة موجزة ومتماسكة. قد يصبح ذلك صعبًا إذا كان المستند معقدًا أو تقنيًا. بالإضافة إلى ذلك، قد يستغرق تلخيص مستند طويل وقتًا طويلاً لأنّك تحتاج إلى قراءة النص وتحليله بعناية للتأكّد من أنّ الملخّص دقيق وكامل.
في حين تتيح لك هذه الطرق التفاعل مع النماذج اللغوية الكبيرة وتلخيص المستندات الطويلة بطريقة مرنة، قد تحتاج أحيانًا إلى تسريع العملية باستخدام طرق التمهيد أو الطرق المُنشأة مسبقًا. وهنا يأتي دور مكتبات مثل LangChain. مزيد من المعلومات حول إتاحة LangChain على Vertex AI