يُلخَّص أغلب فشل مشاريع الضبط الدقيق في جملة واحدة: البيانات سيئة. النموذج يتعلّم بالضبط ما تعرضه عليه، بما في ذلك الأخطاء والتناقضات. هذا الدليل يرشدك إلى بناء مجموعة بيانات تستحق وقت التدريب.
مصادر الأمثلة
- سجلات حقيقية: محادثات الدعم، تذاكر المساعدة، رسائل البريد (بعد إخفاء الهوية والموافقة القانونية).
- خبراء المجال: اكتب 100–300 مثال يدوياً بأعلى جودة؛ هي أثمن ما لديك.
- بيانات مولَّدة: استخدم نموذجاً قوياً لتوليد أمثلة تركيبية من وثائقك، ثم راجعها بشرياً. تحقق من شروط استخدام مزوّد النموذج قبل استخدام مخرجاته في تدريب نموذج آخر.
صيغ البيانات
| الصيغة | الشكل | الاستخدام |
|---|---|---|
| Instruction | instruction / input / output | مهام أحادية الدور |
| Chat (messages) | قائمة role و content | الأفضل للمحادثة، تدعمه أغلب الأدوات |
| Preference | prompt / chosen / rejected | لـ DPO وضبط التفضيلات |
{"prompt": "اشرح RAG بجملتين.",
"chosen": "RAG تقنية تسترجع معلومات من مصدر خارجي وتقدمها للنموذج قبل الإجابة، فتزداد دقة الإجابة وتبقى المعرفة قابلة للتحديث.",
"rejected": "RAG هو نوع من الأقمشة."}خطوات التنظيف
- إزالة التكرار (Deduplication): التكرار الحرفي أو شبه الحرفي يدفع النموذج إلى الحفظ.
- الفلترة: احذف الأمثلة الفارغة أو القصيرة جداً أو التي تحتوي إجابات ناقصة أو خطأ ترميز.
- توحيد الأسلوب: إذا اختلفت نبرة الإجابات بين الأمثلة سيتعلّم النموذج التذبذب.
- حماية البيانات الشخصية: أخفِ الأسماء والبريد والهواتف وأرقام الحسابات.
- مراجعة عيّنة بشرياً: اقرأ 100 مثال عشوائي على الأقل. ستكتشف مشكلات لا تلتقطها السكربتات.
import json, re, hashlib
EMAIL = re.compile(r"[\w.+-]+@[\w-]+\.[\w.-]+")
PHONE = re.compile(r"\+?\d[\d\s-]{7,}\d")
def scrub(text: str) -> str:
return PHONE.sub("[PHONE]", EMAIL.sub("[EMAIL]", text))
seen, clean = set(), []
with open("raw.jsonl", encoding="utf-8") as f:
for line in f:
row = json.loads(line)
answer = row["messages"][-1]["content"].strip()
if len(answer) < 20:
continue
key = hashlib.sha1(answer.encode()).hexdigest()
if key in seen:
continue
seen.add(key)
for m in row["messages"]:
m["content"] = scrub(m["content"])
clean.append(row)
print(f"kept {len(clean)} examples")قوالب المحادثة (Chat Templates)
لكل عائلة نماذج طريقتها في ترميز الأدوار (system / user / assistant) عبر رموز خاصة. استخدم دائماً قالب النموذج نفسه عبر tokenizer.apply_chat_template بدل بناء النص يدوياً. أي اختلاف بين قالب التدريب وقالب الاستدلال يخفض الجودة دون أن يظهر خطأ واضح.
تقسيم التدريب والتحقق والاختبار
- تدريب ~90% وتحقق ~5–10% لمراقبة الإفراط في التعلم.
- اختبار نهائي صغير ومنفصل ومكتوب يدوياً، لا يُستخدم أبداً في ضبط الإعدادات.
- قسّم حسب المصدر أو المحادثة لا حسب الأسطر العشوائية، كي لا تتسرّب أجزاء من نفس المحادثة إلى المجموعتين.
أسئلة شائعة
هل أستطيع استخدام بيانات عملائي في التدريب؟
فقط إذا كانت سياسة الخصوصية والاتفاقيات القانونية تسمح بذلك، ويُنصح بإخفاء البيانات الشخصية قبل التدريب والحصول على موافقة قانونية واضحة.
تريد تطبيق ذلك في مشروعك؟
فريقنا يساعدك من التخطيط حتى التشغيل. احجز استشارة مجانية.