إعداد مجموعة البيانات
مجموعات بيانات ضبط التعليمات
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، مجموعة بياناتك تحتاج:
- عمود نص (إذا استخدمت صيغة بسيطة):
dataset = dataset.map(lambda x: {
"text": f"### التعليمة:\n{x['instruction']}\n\n### الاستجابة:\n{x['output']}"
})
- عمود رسائل (إذا استخدمت صيغة محادثة):
dataset = dataset.map(lambda x: {
"messages": [
{"role": "user", "content": x["instruction"]},
{"role": "assistant", "content": x["output"]}
]
})
أفضل الممارسات
- الاتساق: استخدم نفس الصيغة في كل مجموعة البيانات
- الاكتمال: ضمّن محثات النظام إذا احتاجت حالة استخدامك
- التنوع: امزج أنواع مختلفة من التعليمات
- الجودة فوق الكمية: 1,000 مثال ممتاز > 10,000 مثال متوسط
بعد ذلك، سنتعلم كيفية إنشاء بيانات تدريب عالية الجودة خاصة بك. :::