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

1. مقدمة

أهمية الضبط الدقيق

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

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

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

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

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

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

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

في هذا الدرس التطبيقي، يمكنك تنفيذ ما يلي:

  • استخدِم BBC FULLTEXT DATA (متاحة من خلال مجموعة بيانات BigQuery العلنية bigquery-public-data.bbc_news.fulltext).
  • تحسين النموذج اللغوي الكبير (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 Notebook وسجِّل الدخول إلى الحساب نفسه المستخدَم في حسابك النشط على Google Cloud.

3- ضبط نموذج لغوي كبير

يستخدم هذا الدرس التطبيقي حول الترميز Vertex AI SDK للغة 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 في repo. تأكد من استبدال 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، أنها يتم استدعاءها في نطاق الرمز نفسه بحيث لا تزال تحتفظ بالنموذج الذي تم ضبطه في المتغير recognized_model. ولكن ماذا لو أردت استدعاء نموذج تم ضبطه في الماضي؟

لإجراء ذلك، يمكنك استدعاء طريقة get_tuned_model() في النموذج اللغوي الكبير (LLM) باستخدام عنوان URL الكامل في ENDPOINT للنموذج المعدَّل الذي تم نشره من Vertex AI Model Registry. لاحظ أنه في هذه الحالة، ستُدخل 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. الخطوة الخامسة: تقييم النموذج الجديد الدقيق

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

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

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

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

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

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

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

10. تَنظيم

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

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

11. تهانينا

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

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