انتقل إلى المحتوى الرئيسي

الوحدة 3 — الضبط الدقيق الموجَّه بالتعليمات

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

من النموذج الأساس إلى النموذج المُضبَط

كثيرة هي بطاقات النماذج المفتوحة التي تُطرح نسختين، مثلًا Llama-3.1-8B مقابل Llama-3.1-8B-Instruct. الفرق بسيط في الوصف، جوهري في الاستخدام. النموذج الأساس مدرَّبٌ فقط على توقّع الرمز التالي على مجموعة عامّة. النسخة Instruct مرَّت بعد ذلك على تدريب إضافي على أزواج (تعليمة، إجابة)، وعلى مرحلة مواءمة سنراها في الوحدة 4.

قارن السلوك أمام نفس المُطالبة:

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch

def teste(nom_modele, prompt):
tok = AutoTokenizer.from_pretrained(nom_modele)
modele = AutoModelForCausalLM.from_pretrained(
nom_modele, torch_dtype=torch.bfloat16, device_map="auto"
)
entrees = tok(prompt, return_tensors="pt").to(modele.device)
sortie = modele.generate(**entrees, max_new_tokens=80, do_sample=False)
return tok.decode(sortie[0, entrees.input_ids.shape[1]:], skip_special_tokens=True)

prompt = "لخّص لي في جملة واحدة أهمية إزالة التكرار في مجاميع التدريب."
print("BASE :", teste("meta-llama/Llama-3.1-8B", prompt))
print("INST :", teste("meta-llama/Llama-3.1-8B-Instruct", prompt))

النموذج الأساس ينتج عادةً امتدادًا للنصّ: يُضيف فقرة تشرح ما سبق، أو يُكمل بسؤال آخر. النسخة Instruct تُجيب بجملة تلخّص فعلًا. الفارق ليس في المعرفة، بل في السلوك الحواري. تدريب التعليمات لم يعلّم النموذج شيئًا جديدًا عن الموضوع؛ علَّمه فقط أنّ الطلب المكتوب بلغة طبيعية يُنتظر منه إجابة عليه.

بنية مجموعة التعليمات

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

النوعنسبة تقريبيةمثال
أسئلة إجابة قصيرة25%«كم عدد سكان تونس؟»
تلخيص15%«لخّص هذا النصّ في ثلاث جمل»
تحويل صياغة10%«اكتب هذا في نبرة رسمية»
تصنيف10%«هل هذه الرسالة تقنية أم إدارية؟»
توليد كود15%«اكتب دالّة بايثون تحسب…»
محادثة متعدّدة الأدوار20%نقاش من أربع أو خمس رسائل
رفض معلَّل5%طلبات خارج نطاق الأمان

جودة الأمثلة تفوق الكمّية في هذه المرحلة. أشارت ورقة LIMA عام 2023 إلى أنّ 1000 مثال مكتوبة بعناية قد تُضاهي مئات الآلاف من الأمثلة المُنتَجة آليًا وذات جودة متفاوتة. القاعدة العملية: كلّ مثال يعمل كنمط، فالنموذج يُقلّد أسلوب الإجابات المُقدَّمة له.

قالب المحادثة

هذا موضع خطأ متكرّر جدًّا في الإنتاج. كلّ نموذج مُضبَط له قالب محادثة مُحدَّد: رموز خاصّة تفصل الأدوار (system، user، assistant). إذا لم تحترم هذا القالب، فأنت في الواقع تخاطب النموذج بلغة يعرفها، لكن ليست اللغة التي تدرَّب عليها في مرحلة التعليمات، فتتدهور الجودة صمتًا.

مكتبة transformers تُتيح تطبيق القالب تلقائيًا:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B-Instruct")

messages = [
{"role": "system", "content": "أنت مساعد دعم عملاء مهذّب لشركة بنكية. أجب بالفرنسية أو بالعربية حسب لغة السؤال."},
{"role": "user", "content": "بطاقتي رُفضت في المصعد رغم توفّر الرصيد. ماذا أفعل؟"},
]

prompt = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
print(prompt)

سيَرى هذا الاستدعاء رموز <|start_header_id|>، و<|end_header_id|>، و<|eot_id|> الخاصّة بعائلة Llama 3. لو كتبتَ يدويًا "System: ...\nUser: ...\nAssistant:"، تعمل الأمور لكن بجودة أدنى. دائمًا استعمل apply_chat_template. هذا خطأ يُكلف في الإنتاج ولا يُشير إليه أيّ استثناء.

ضبط دقيق كامل، أم LoRA؟

الضبط الدقيق الكامل يُعدّل جميع الأوزان، ويتطلّب ذاكرة معالج رسومي كافية لاحتضان النموذج كاملًا مع تدرّجاته وحالات المُحسِّن. لنموذج 7 مليار وسيط بدقّة bfloat16، هذا يعني قرابة 100 غيغابايت ذاكرة معالج رسومي: أربعة معالجات H100 على الأقلّ. غير واقعي لمشروع متوسّط.

الحلّ العملي: LoRA (Low-Rank Adaptation). بدلًا من تعديل كلّ مصفوفة أوزان WW، نُجمّد WW ونضيف تصحيحًا صغيرًا:

W=W+αABW' = W + \alpha \cdot A B

حيث ARd×rA \in \mathbb{R}^{d \times r} وBRr×kB \in \mathbb{R}^{r \times k} ذاتا رتبة منخفضة rr (عادة 8 إلى 64). يُدرَّب فقط AA وBB، ما يقلّص الوسائط القابلة للتدريب بمئة أو ألف ضعف. النتائج قريبة جدًّا من الضبط الكامل على مهام محدّدة.

from peft import LoraConfig, get_peft_model
from transformers import AutoModelForCausalLM
import torch

modele = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.1-8B", torch_dtype=torch.bfloat16
)

config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
task_type="CAUSAL_LM",
)

modele = get_peft_model(modele, config)
modele.print_trainable_parameters()

الرسالة المطبوعة تقول عادةً إنّ نحو 0.1 بالمائة من الوسائط قابل للتدريب. هذا يعني أنّ عتاد معالج رسومي واحد بـ 24 غيغابايت يكفي لضبط النموذج ذاته.

متى نُضَبِّط، ومتى لا نُضَبِّط

الحدس الأوّل الشائع، عند بناء مساعد دعم، هو ضبط النموذج على أرشيف بطاقات التذاكر. لا تفعل قبل أن تختبر البدائل. المُطالبة الجيّدة مع أمثلة داخل السياق (few-shot) تُنجز الكثير مجّانًا. وسنرى في الوحدة 6 و18 أنّ استرجاع مقاطع من قاعدة المعرفة (RAG) يُعطي غالبًا نتائج أفضل من الضبط لأنّه يفصل المعرفة عن السلوك.

الضبط يُبرَّر في حالات دقيقة: تعديل الأسلوب ليطابق نبرة الشركة، أو تعليم قالب إخراج منظّم لا يُلتزَم به بمُطالبة وحدها، أو تخفيض الاستدلال في السياق (مطالبات أقصر تعني كلفة أقلّ لكلّ استعلام). أمّا تلقين معلومات جديدة، فعمل RAG لا عمل الضبط.

اختبر بالمطالبة أوّلًا

قبل جمع 5000 مثال وإنفاق يوم على الضبط، اقض ساعتين على مُطالبة متينة مع 3-5 أمثلة داخل السياق. إذا وصلتَ إلى 80% من الجودة المطلوبة، فالضبط لن يضيف إلّا هامشًا، وليس مبرَّرًا كلفةً وتعقيدًا. إن بقيتَ عند 40% رغم الجهد، فالمُطالبة وحدها لا تكفي والضبط مبرَّر.

في الخلاصة

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

الوحدة التالية: بعد الضبط بالتعليمات تأتي المواءمة، تلك المرحلة التي تجعل النموذج يفضّل الإجابات المفيدة والآمنة على الإجابات التقنية الصحيحة لكن غير المرغوبة.