الدرس 5 من 24

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

مجموعات بيانات ضبط التعليمات

3 دقيقة للقراءة

جودة بيانات التدريب هي العامل الأهم في نجاح الضبط الدقيق. دعنا نفهم الصيغ والهياكل المستخدمة في ضبط التعليمات.

صيغ مجموعات البيانات

صيغة Alpaca

الصيغة الأكثر شيوعاً لضبط التعليمات:

{
  "instruction": "اكتب هايكو عن البرمجة",
  "input": "",
  "output": "الكود يتدفق كالماء\nالأخطاء تختبئ في الزوايا المظلمة\nتصحيح، تكرار، فوز"
}

مع مدخل اختياري:

{
  "instruction": "ترجم التالي إلى الفرنسية",
  "input": "مرحباً، كيف حالك؟",
  "output": "Bonjour, comment allez-vous?"
}

صيغة ShareGPT/المحادثة

للمحادثات متعددة الأدوار:

{
  "conversations": [
    {"from": "human", "value": "ما هو التعلم الآلي؟"},
    {"from": "gpt", "value": "التعلم الآلي هو فرع من الذكاء الاصطناعي..."},
    {"from": "human", "value": "هل يمكنك إعطاء مثال؟"},
    {"from": "gpt", "value": "بالتأكيد! مثال شائع هو تصفية البريد العشوائي..."}
  ]
}

صيغة ChatML

تُستخدم من قبل العديد من النماذج الحديثة:

{
  "messages": [
    {"role": "system", "content": "أنت مساعد برمجة مفيد."},
    {"role": "user", "content": "اكتب دالة Python لعكس نص"},
    {"role": "assistant", "content": "def reverse_string(s):\n    return s[::-1]"}
  ]
}

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

النماذج الحديثة تستخدم قوالب محادثة لهيكلة المحادثات. المُرمّز يتعامل مع هذا تلقائياً:

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-3B-Instruct")

messages = [
    {"role": "system", "content": "أنت مساعد مفيد."},
    {"role": "user", "content": "مرحباً!"},
    {"role": "assistant", "content": "أهلاً! كيف يمكنني مساعدتك اليوم؟"}
]

# تطبيق قالب المحادثة
formatted = tokenizer.apply_chat_template(messages, tokenize=False)
print(formatted)

المخرج لـ Llama 3.2:

<|begin_of_text|><|start_header_id|>system<|end_header_id|>

أنت مساعد مفيد.<|eot_id|><|start_header_id|>user<|end_header_id|>

مرحباً!<|eot_id|><|start_header_id|>assistant<|end_header_id|>

أهلاً! كيف يمكنني مساعدتك اليوم؟<|eot_id|>

مجموعات بيانات التدريب الشائعة

مجموعة البيانات الحجم حالة الاستخدام
Alpaca 52K اتباع التعليمات العامة
ShareGPT 90K الذكاء الاصطناعي المحادثي
OpenAssistant 160K سلوك المساعد المفيد
Dolly 15K مفتوح المصدر، قابل للاستخدام تجارياً
FLAN 1M+ ضبط تعليمات متعدد المهام

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

from datasets import load_dataset

# التحميل من Hugging Face Hub
dataset = load_dataset("tatsu-lab/alpaca")

# التحميل من ملف JSON محلي
dataset = load_dataset("json", data_files="my_data.json")

# التحميل من CSV
dataset = load_dataset("csv", data_files="my_data.csv")

# التقسيم إلى تدريب/تحقق
dataset = dataset["train"].train_test_split(test_size=0.1)

متطلبات هيكل مجموعة البيانات

لـ SFTTrainer، مجموعة بياناتك تحتاج:

  1. عمود نص (إذا استخدمت صيغة بسيطة):
dataset = dataset.map(lambda x: {
    "text": f"### التعليمة:\n{x['instruction']}\n\n### الاستجابة:\n{x['output']}"
})
  1. عمود رسائل (إذا استخدمت صيغة محادثة):
dataset = dataset.map(lambda x: {
    "messages": [
        {"role": "user", "content": x["instruction"]},
        {"role": "assistant", "content": x["output"]}
    ]
})

أفضل الممارسات

  1. الاتساق: استخدم نفس الصيغة في كل مجموعة البيانات
  2. الاكتمال: ضمّن محثات النظام إذا احتاجت حالة استخدامك
  3. التنوع: امزج أنواع مختلفة من التعليمات
  4. الجودة فوق الكمية: 1,000 مثال ممتاز > 10,000 مثال متوسط

بعد ذلك، سنتعلم كيفية إنشاء بيانات تدريب عالية الجودة خاصة بك. :::

اختبار

الوحدة 2: إعداد مجموعة البيانات

خذ الاختبار