1. مقدمة
أهمية الضبط الدقيق
يتم تدريب النماذج الأساسية لأغراض عامة، وفي بعض الأحيان لا تؤدي المهام على النحو المطلوب. قد يرجع ذلك إلى أنّ المهام التي تريد أن ينفّذها النموذج هي مهام متخصّصة يصعب تعليم النموذج تنفيذها باستخدام تصميم الطلبات فقط. في هذه الحالات، يمكنك استخدام ميزة "تحسين النموذج" لتحسين أداء نموذج في مهام معيّنة. يمكن أن يساعد ضبط النموذج أيضًا في الالتزام بمتطلبات إخراج محدّدة عندما لا تكون التعليمات كافية. يمكن أن تتضمّن النماذج اللغوية الكبيرة (LLM) كمية هائلة من المعلومات ويمكنها تنفيذ العديد من المهام، ولكنّها تتفوّق فقط عند توفير تدريب متخصص لها. يمكن أن يؤدي الضبط الدقيق إلى تدريب نموذج لغوي كبير، ما يتيح لك تخصيص نموذج لغوي كبير مدرَّب مسبقًا لتلبية احتياجاتك المحددة.
في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية إجراء عملية الضبط الدقيق باستخدام أسلوب الضبط الخاضع للإشراف لأحد نماذج LLM.
يؤدي الضبط بإشراف إلى تحسين أداء النموذج من خلال تعليمه مهارة جديدة. يتم استخدام البيانات التي تحتوي على مئات الأمثلة المصنَّفة لتعليم النموذج محاكاة سلوك أو مهمة مطلوبة. سنقدّم مجموعة بيانات مصنّفة للنص المدخل (الطلب) والنص الناتج (الردّ) لتعليم النموذج كيفية تخصيص الردود لحالة الاستخدام المحدّدة.
يمكنك الاطّلاع على مزيد من المعلومات حول تخصيص النماذج هنا.
ما ستنشئه
حالة الاستخدام: إنشاء عناوين للمقالات الإخبارية
لنفترض أنّك تريد إنشاء عناوين تلقائيًا للمقالات الإخبارية. باستخدام Vertex AI، يمكنك ضبط نموذج لغوي كبير بدقة لإنشاء عنوان ملخّص مناسب بنمط معيّن وتخصيص العنوان وفقًا لإرشادات القناة الإخبارية.
في هذا الدرس العملي، ستنفّذ ما يلي:
- استخدِم
BBC FULLTEXT DATA(التي توفّرها "مجموعة البيانات العامة في BigQuery"bigquery-public-data.bbc_news.fulltext). - اضبط نموذجًا لغويًا كبيرًا (
text-bison@002) بدقة على نموذج جديد مضبوط بدقة باسم "bbc-news-summary-tuned" وقارِن النتيجة بالردّ من النموذج الأساسي. يتوفّر نموذج ملف JSONL لهذا الدرس التطبيقي حول الترميز في المستودع. يمكنك تحميل الملف إلى حزمة Cloud Storage وتنفيذ خطوات الضبط الدقيق التالية: - إعداد البيانات: ابدأ بمجموعة بيانات من المقالات الإخبارية والعناوين المقابلة لها، مثل مجموعة بيانات "أخبار BBC" المستخدَمة في نموذج الرمز البرمجي.
- ضبط نموذج مُدرَّب مسبقًا: اختَر نموذجًا أساسيًا، مثل "
text-bison@002"، واضبطه بدقة باستخدام بيانات الأخبار من خلال حزمة تطوير البرامج (SDK) الخاصة بـ Vertex AI للغة Python. - تقييم النتائج: قارِن أداء النموذج الذي تم ضبطه بدقة مع النموذج الأساسي لمعرفة التحسّن في جودة إنشاء العناوين الرئيسية.
- تفعيل النموذج واستخدامه: أتحْ نموذجك المعدَّل بدقة من خلال نقطة نهاية واجهة برمجة التطبيقات وابدأ بإنشاء عناوين للمقالات الجديدة تلقائيًا.
2. قبل البدء
- في Google Cloud Console، في صفحة اختيار المشروع، اختَر أو أنشِئ مشروعًا على Google Cloud.
- تأكَّد من تفعيل الفوترة لمشروعك على Google Cloud. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع.
- افتح دفتر ملاحظات Colab وسجِّل الدخول إلى الحساب نفسه الذي تستخدمه في حساب Google Cloud النشط حاليًا.
3- ضبط نموذج لغوي كبير
يستخدم هذا الدرس التطبيقي حول الترميز حزمة تطوير البرامج (SDK) من Vertex AI للغة Python لتحسين النموذج. يمكنك إجراء الضبط الدقيق باستخدام الخيارات الأخرى أيضًا، مثل HTTP وأمر CURL وحزمة تطوير البرامج (SDK) في Java و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)
يجب أن تؤدي هذه الخطوة إلى ما يلي:

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)
من المفترض أن تظهر لك النتيجة التالية:

للتوقّع باستخدام النموذج الأساسي (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)
من المفترض أن تظهر لك النتيجة التالية:

على الرغم من أنّ كلا العنوانين اللذين تم إنشاؤهما يبدوان مناسبَين، إلا أنّ العنوان الأول (الذي تم إنشاؤه باستخدام النموذج المضبوط بدقة) يتوافق بشكل أكبر مع نمط العناوين المستخدَمة في مجموعة البيانات المعنية.
تحميل النموذج المعدَّل
قد يكون من الأسهل تحميل نموذج تم ضبطه بدقة. ولكن تذكَّر أنّه في الخطوة 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: تقييم النموذج الجديد الذي تم ضبطه بدقة
التقييم هو جانب مهم من جوانب تقييم جودة الرد الذي تم إنشاؤه ومدى ملاءمته. ويشمل ذلك فحص الناتج من نموذج لغوي توليدي لتحديد مدى تماسك المحتوى ودقته وتوافقه مع الطلب المقدَّم. يساعد تقييم النماذج في تحديد مجالات التحسين، وتحسين أداء النماذج، والتأكّد من أنّ النص الذي يتم إنشاؤه يستوفي المعايير المطلوبة من حيث الجودة والفائدة. يمكنك الاطّلاع على مزيد من المعلومات في المستندات. في الوقت الحالي، سنرى كيف يمكننا الحصول على بعض مقاييس التقييم للنموذج المضبوط بدقة ومقارنته بالنموذج الأساسي.
- حمِّل مجموعة بيانات EVALUATION:
json_url = 'https://storage.googleapis.com/YOUR_BUCKET/EVALUATE.jsonl'
df = pd.read_json(json_url, lines=True)
print (df)
- حدِّد مواصفات التقييم لمهمة تلخيص نص على النموذج الذي تم تحسينه.
task_spec = EvaluationTextSummarizationSpec(
task_name = "summarization",
ground_truth_data=df
)
سيستغرق إكمال هذه الخطوة بضع دقائق. يمكنك تتبُّع مستوى التقدّم باستخدام رابط مهمة سلسلة العمل في النتيجة. بعد الانتهاء، من المفترض أن تظهر لك نتيجة التقييم التالية:

يشير المقياس rougeLSum في نتيجة التقييم إلى درجة ROUGE-L الخاصة بالملخّص. ROUGE-L هو مقياس مستند إلى الاسترجاع يقيس التداخل بين الملخّص والملخّص المرجعي. يتم احتسابها من خلال أخذ أطول تسلسل فرعي مشترك (LCS) بين الملخّصَين وقسمته على طول الملخّص المرجعي.
تبلغ درجة rougeLSum في التعبير المقدَّم 0.36600753600753694، ما يعني أنّ الملخّص يتضمّن 36.6% من الملخّص المرجعي.
إذا نفّذت خطوة التقييم على النموذج الأساسي، ستلاحظ أنّ النتيجة الموجزة أعلى نسبيًا للنموذج المضبوط بدقة.
يمكنك العثور على نتائج التقييم في دليل الإخراج في Cloud Storage الذي حدّدته عند إنشاء مهمة التقييم. اسم الملف هو evaluation_metrics.json. بالنسبة إلى النماذج المضبوطة، يمكنك أيضًا عرض نتائج التقييم في وحدة تحكّم Google Cloud على صفحة سجلّ النماذج في Vertex AI.
9- اعتبارات مهمة
- التوافق مع النماذج: يُرجى دائمًا الاطّلاع على المستندات الخاصة بالنموذج لمعرفة أحدث المعلومات حول التوافق.
- التطوّر السريع: يتطوّر مجال النماذج اللغوية الكبيرة بسرعة. قد يتفوّق نموذج أحدث وأكثر فعالية على نموذج تم ضبطه بدقة استنادًا إلى نموذج أساسي أقدم. والخبر السارّ هو أنّه يمكنك تطبيق تقنيات الضبط الدقيق هذه على النماذج الأحدث عندما تصبح هذه الإمكانية متاحة.
- LoRA: LoRA هي تقنية لضبط النماذج اللغوية الكبيرة (LLM) بدقة وبفعالية. ويتم ذلك من خلال إدخال مصفوفات قابلة للتدريب ومنخفضة الترتيب إلى طبقات النموذج الحالي المدرَّب مسبقًا. يمكنك الاطّلاع على مزيد من المعلومات حول هذا الموضوع هنا. بدلاً من تعديل جميع مَعلمات نموذج لغوي كبير، تتعلّم LoRA مصفوفات أصغر يتمّ إضافتها إلى مصفوفات الأوزان الخاصة بالنموذج الأصلي أو ضربها بها. يؤدي ذلك إلى تقليل عدد المَعلمات الإضافية التي يتم إدخالها أثناء الضبط الدقيق بشكل كبير.
10. تَنظيم
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا الدرس التطبيقي حول الترميز، اتّبِع الخطوات التالية:
- في Google Cloud Console، انتقِل إلى صفحة إدارة الموارد.
- في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف.
- في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.
- بدلاً من ذلك، يمكنك الانتقال إلى سجلّ النماذج، ثم إلى علامة التبويب "تفعيل النموذج واختباره"، وإلغاء تفعيل نقطة النهاية وحذف النموذج المضبوط الذي تم تفعيله.
11. تهانينا
تهانينا! لقد استخدمت Vertex AI بنجاح لضبط نموذج لغوي كبير. الضبط الدقيق هو أسلوب فعّال يتيح لك تخصيص النماذج اللغوية الكبيرة لتناسب مجالك ومهامك. باستخدام Vertex AI، تتوفّر لك الأدوات والموارد اللازمة لضبط نماذجك بدقة بكفاءة وفعالية.
يمكنك استكشاف مستودعات GitHub وتجربة الرمز النموذجي لتجربة الضبط الدقيق والتقييم بشكل مباشر. فكِّر في كيفية تلبية النماذج اللغوية الكبيرة المضبوطة بدقة لاحتياجاتك المحدّدة، بدءًا من إنشاء نسخة تسويقية مستهدَفة إلى تلخيص المستندات المعقّدة أو ترجمة اللغات مع مراعاة الفروق الثقافية الدقيقة. يمكنك الاستفادة من المجموعة الشاملة من الأدوات والخدمات التي تقدّمها Vertex AI لإنشاء النماذج المضبوطة بدقة وتدريبها وتقييمها وتفعيلها بسهولة.