تحسين النماذج اللغوية الكبيرة: كيفية استفادة Vertex AI من النماذج اللغوية الكبيرة إلى المستوى التالي

الضبط الدقيق للنماذج اللغوية الكبيرة:
كيف تنقل Vertex AI النماذج اللغوية الكبيرة إلى المستوى التالي

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: مايو 2, 2024
account_circleتأليف: Author: Abirami Sukumaran, Editor: Muthu Ganesh

1. مقدمة

أهمية التحسين

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

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

يُحسِّن الضبط الخاضع للإشراف أداء النموذج من خلال تعليم مهارة جديدة. وتُستخدَم البيانات التي تحتوي على مئات الأمثلة المصنّفة لتعليم النموذج تقليد سلوك أو مهمة مطلوبة. سنوفّر مجموعة بيانات مصنّفة للنص الذي يتم إدخاله (الطلب) والنص الذي يتم عرضه (الردّ) لتعليم النموذج كيفية تخصيص الردود لحالة الاستخدام المحدّدة.

يمكنك الاطّلاع على مزيد من المعلومات حول تخصيص النماذج هنا.

التطبيق الذي ستصممه

حالة الاستخدام: إنشاء عناوين للمقالات الإخبارية

لنفترض أنّك تريد إنشاء عناوين تلقائيًا للمقالات الإخبارية. باستخدام Vertex AI، يمكنك تحسين نموذج تعلُّم لغوي كبير (LLM) ينشئ عنوانًا ملخّصًا مناسبًا بنمط معيّن ويخصّصه وفقًا لإرشادات القناة الإخبارية.

في هذا الدليل التعليمي حول الرموز البرمجية، ستنفِّذ ما يلي:

  • استخدِم BBC FULLTEXT DATA (المتاحة من خلال مجموعة البيانات العامة bigquery-public-data.bbc_news.fulltext في BigQuery).
  • حسِّن نموذجًا لغويًا كبيرًا (text-bison@002) إلى نموذج جديد محسَّن يُسمى "bbc-news-summary-tuned"، وقارِن النتيجة بالردّ من النموذج الأساسي. يتوفّر نموذج لملف JSONL في هذا الدليل التعليمي للترميز في المستودع. يمكنك تحميل الملف إلى حزمة Cloud Storage وتنفيذ خطوات التحسين التالية:
  • إعداد بياناتك: ابدأ بمجموعة بيانات تتضمّن مقالات إخبارية وعناوين الأخبار المقابلة لها، مثل مجموعة بيانات BBC News المستخدَمة في مثال الرمز البرمجي.
  • تحسين نموذج تم تدريبه مسبقًا: اختَر نموذجًا أساسيًا مثل "text-bison@002" وحرِّره باستخدام بيانات الأخبار باستخدام حزمة Vertex AI SDK لبرنامج Python.
  • تقييم النتائج: قارِن أداء النموذج الذي تم تحسينه بالنموذج الأساسي لمعرفة التحسين في جودة إنشاء العناوين.
  • نشر النموذج واستخدامه: يمكنك إتاحة النموذج المحسّن من خلال نقطة نهاية واجهة برمجة التطبيقات والبدء في إنشاء عناوين للمقالات الجديدة تلقائيًا.

2. قبل البدء

  1. في Google Cloud Console، في صفحة أداة اختيار المشاريع، اختَر مشروعًا على Google Cloud أو أنشِئه.
  2. تأكَّد من تفعيل الفوترة لمشروعك على Google Cloud. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
  3. افتح دفتر ملاحظات Colab وسجِّل الدخول إلى الحساب نفسه المستخدَم في حسابك الحالي والنشط على Google Cloud.

3. تحسين نموذج لغوي كبير

يستخدم هذا الدرس التطبيقي حول الترميز حزمة تطوير البرامج (SDK) Vertex AI لبرنامج Python لتحسين النموذج. يمكنك إجراء تحسين دقيق باستخدام الخيارات الأخرى أيضًا، مثل HTTP وأمر CURL وJava SDK وConsole.

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

4. الخطوة 1: تثبيت التبعيات واستيرادها

!pip install google-cloud-aiplatform
!pip install --user datasets
!pip install --user google-cloud-pipeline-components

اتّبِع بقية الخطوات كما هو موضّح في ملف ‎ .ipynb في المستودع. تأكَّد من استبدال PROJECT_ID وBUCKET_NAME ببيانات الاعتماد الخاصة بك.

import os
os
.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
import warnings
warnings
.filterwarnings('ignore')
import vertexai
vertexai
.init(project=PROJECT_ID, location=REGION)
import kfp
import sys
import uuid
import json
import pandas as pd
from google.auth import default
from datasets import load_dataset
from google.cloud import aiplatform
from vertexai.preview.language_models import TextGenerationModel, EvaluationTextSummarizationSpec

5. الخطوة 2: إعداد بيانات التدريب وتحميلها

استبدِل YOUR_BUCKET بحزمة التخزين الخاصة بك وحمِّل ملف بيانات التدريب TRAIN.jsonl النموذجي إليها. تم توفير عيّنة البيانات لحالة الاستخدام هذه في الرابط المذكور أعلاه.

json_url = 'https://storage.googleapis.com/YOUR_BUCKET/TRAIN.jsonl'
df
= pd.read_json(json_url, lines=True)
print (df)

من المفترض أن تؤدي هذه الخطوة إلى ظهور ما يلي:

17274866af36a47c.png

6. الخطوة 3: تحسين نموذج لغوي كبير

يمكنك ضبط أي نموذج لغوي كبير في هذه المرحلة (استنادًا إلى مدى توفّر الدعم) . في المقتطف التالي، نضبط النموذج المعلَّم مسبقًا "text-bison@002" باستخدام إطار البيانات الذي يحتوي على بيانات التدريب التي حمّلناها في الخطوة السابقة:

model_display_name = 'bbc-finetuned-model' # @param {type:"string"}
tuned_model
= TextGenerationModel.from_pretrained("text-bison@002")
tuned_model
.tune_model(
training_data
=df,
train_steps
=100,
tuning_job_location
="europe-west4",
tuned_model_location
="europe-west4",
)

ستستغرق هذه الخطوة بضع ساعات. يمكنك تتبُّع مستوى تقدّم التحسين باستخدام رابط وظيفة مسار الإحالة الناجحة في النتيجة.

7. الخطوة 4: توقّع النتائج باستخدام النموذج الجديد المحسَّن

بعد اكتمال مهمة التحسين، ستتمكّن من إجراء التوقّعات باستخدام النموذج الجديد. للتنبؤ باستخدام النموذج الجديد الذي تم ضبطه:

response = tuned_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

من المفترض أن تظهر لك النتيجة التالية:

67061c36b7ba39b7.png

للتوقّع باستخدام النموذج الأساسي (text-bison@002) من أجل المقارنة، شغِّل الأوامر التالية:

base_model = TextGenerationModel.from_pretrained("text-bison@002")
response
= base_model.predict("Summarize this text to generate a title: \n Ever noticed how plane seats appear to be getting smaller and smaller? With increasing numbers of people taking to the skies, some experts are questioning if having such packed out planes is putting passengers at risk. They say that the shrinking space on aeroplanes is not only uncomfortable it it's putting our health and safety in danger. More than squabbling over the arm rest, shrinking space on planes putting our health and safety in danger? This week, a U.S consumer advisory group set up by the Department of Transportation said at a public hearing that while the government is happy to set standards for animals flying on planes, it doesn't stipulate a minimum amount of space for humans.")
print(response.text)

من المفترض أن تظهر لك النتيجة التالية:

22ec58e4261405d6.png

على الرغم من أنّ كلا العنوانَين المُنشَئَين يبدوان مناسبَين، إلا أنّ العنوان الأول (الذي تم إنشاؤه باستخدام النموذج المحسَّن) أكثر توافقًا مع أسلوب العناوين المستخدَمة في مجموعة البيانات المعنيّة.

تحميل النموذج المحسَّن

قد يكون من الأسهل تحميل نموذج عدّلته للتو. ولكن تذكَّر أنّه في الخطوة 3، يتمّ استدعاؤه في نطاق الرمز البرمجي نفسه حتى يظلّ يحتفظ بالنموذج المحسَّن في المتغيّر tuned_model. ولكن ماذا لو أردت استدعاء نموذج تم ضبطه في السابق؟

لإجراء ذلك، يمكنك استدعاء دالة get_tuned_model()‎ في النموذج اللغوي الكبير باستخدام عنوان URL الكامل لنقطة النهاية للنموذج المحسَّن الذي تم نشره من "سجلّ نماذج Vertex AI". يُرجى العِلم أنّه في هذه الحالة، يتم إدخال PROJECT_NUMBER وMODEL_NUMBER بدلاً من معرّفاتهما.

tuned_model_1 = TextGenerationModel.get_tuned_model("projects/<<PROJECT_NUMBER>>/locations/europe-west4/models/<<MODEL_NUMBER>>")
print(tuned_model_1.predict("YOUR_PROMPT"))

8. الخطوة 5: تقييم النموذج الجديد المحسَّن

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

  1. حمِّل مجموعة بيانات التقييم:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df
= pd.read_json(json_url, lines=True)
print (df)
  1. حدِّد مواصفات التقييم لمهمة تلخيص النص في النموذج المحسَّن.
task_spec = EvaluationTextSummarizationSpec(
 task_name
= "summarization",
 ground_truth_data
=df
)

سيستغرق إكمال هذه الخطوة بضع دقائق. يمكنك تتبُّع مستوى التقدّم باستخدام رابط وظيفة مسار الإحالة الناجحة في النتيجة. بعد اكتمال العملية، من المفترض أن تظهر لك نتيجة التقييم التالية:

387843d6c970e02.png

يحدِّد مقياس rougeLSum في نتيجة التقييم نتيجة ROUGE-L للملخّص. ‫ROUGE-L هو مقياس مستند إلى التذكر يقيس التداخل بين الملخّص والملخّص المرجعي. ويتم احتسابه من خلال أخذ أطول تسلسل فرعي مشترك (LCS) بين الملخصَين وتقسيمه على طول الملخّص المرجعي.

تبلغ درجة rougeLSum في التعبير المقدَّم 0.36600753600753694، ما يعني أنّ الملخّص يتداخل بنسبة% 36.6 مع الملخّص المرجعي.

إذا نفّذت خطوة التقييم على النموذج الأساسي، ستلاحظ أنّ النتيجة الإجمالية أعلى نسبيًا للنموذج المحسّن.

يمكنك العثور على نتائج التقييم في دليل الإخراج في Cloud Storage الذي حدّدته عند إنشاء مهمة التقييم. اسم الملف هو evaluation_metrics.json. بالنسبة إلى النماذج التي تم ضبطها، يمكنك أيضًا عرض نتائج التقييم في وحدة تحكّم Google Cloud في صفحة سجلّ النماذج في Vertex AI.

9. اعتبارات مهمة

  • توافق الطراز: تحقّق دائمًا من مستندات الطراز لمعرفة أحدث توافق.
  • التطوّر السريع: يتطوّر مجال LLM بسرعة. من المحتمل أن يحقّق نموذج أحدث وأكثر فعالية أداءً أفضل من نموذج محسَّن تم إنشاؤه على قاعدة قديمة. من الأخبار السارّة أنّه يمكنك تطبيق تقنيات التحسين هذه على النماذج الأحدث عندما تصبح هذه الميزة متاحة.
  • LoRA: هي تقنية لتحسين النماذج اللغوية الكبيرة بكفاءة. ويتم ذلك من خلال إدخال مصفوفات تحليل منخفضة الترتيب قابلة للتدريب في طبقات النموذج الحالي المُدرَّب مسبقًا. يمكنك الاطّلاع على مزيد من المعلومات حول هذا الموضوع هنا. بدلاً من تعديل جميع مَعلمات نموذج لغوي كبير، يتعلّم LoRA مصفوفات أصغر تُضاف إلى مصفوفات أوزان النموذج الأصلي أو تُضرب بها. ويؤدي ذلك إلى تقليل عدد المَعلمات الإضافية التي يتمّ تقديمها أثناء التحسين بشكلٍ كبير.

10. تَنظيم

لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدليل التعليمي، اتّبِع الخطوات التالية:

  1. في وحدة تحكّم Google Cloud، انتقِل إلى صفحة إدارة الموارد.
  2. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف.
  3. في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.
  4. بدلاً من ذلك، يمكنك الانتقال إلى Model Registry (سجلّ النماذج)، والانتقال إلى علامة التبويب "نشر النموذج واختباره" وإلغاء نشر نقطة النهاية وحذف النموذج المحسَّن الذي تم نشره.

11. تهانينا

تهانينا! لقد استخدمت Vertex AI بنجاح لتحسين نموذج لغوي كبير. إنّ التحسين الدقيق هو أسلوب فعّال يتيح لك تخصيص النماذج اللغوية الكبيرة لنطاقك ومهامك. باستخدام Vertex AI، تتوفّر لك الأدوات والموارد التي تحتاجها لتحسين نماذجك بكفاءة وفعالية.

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