أساسيات LLM للمقابلات
استراتيجيات العينات والتحكم في التوليد
لماذا هذا مهم للمقابلات
سؤال المقابلة الحقيقي (OpenAI L6):
"chatbot الخاص بك أحياناً إبداعي لكن أحياناً يعطي إجابات غير صحيحة. كيف ستتحكم في هذه المقايضة؟ ما المعاملات التي ستعدلها ولماذا؟"
سؤال المقابلة الحقيقي (Meta):
"اشرح الفرق بين temperature وtop-p sampling. متى تستخدم واحداً على الآخر؟"
فهم العينات حاسم لـ أنظمة LLM الإنتاجية حيث تحتاج لموازنة الإبداع، الاتساق، والدقة الواقعية.
كيف تولد LLMs النصوص (العملية الانحدارية التلقائية)
خطوة بخطوة:
- تمريرة أمامية: النموذج يحسب logits للرمز التالي
- تحويل إلى احتماليات: تطبيق softmax
- عينة: اختيار الرمز التالي بناءً على الاستراتيجية
- تكرار: إضافة الرمز للتسلسل، توليد التالي
استراتيجية العينات 1: فك الترميز الجشع (Greedy Decoding - حتمي)
دائماً اختر الرمز الأكثر احتمالاً:
def greedy_sample(probs):
"""
عينة جشعة: argmax(probs)
"""
return np.argmax(probs)
المزايا:
- ✅ حتمي (نفس الأمر → نفس الإخراج)
- ✅ سريع (لا عبء عينات)
- ✅ جيد للمهام الواقعية (Q&A، ترجمة)
العيوب:
- ❌ متكرر (يعلق في حلقات)
- ❌ لا إبداع
- ❌ يفوت بدائل أفضل
متى تستخدم:
- Q&A واقعي
- ترجمة
- إكمال الكود (عندما تريد الأكثر احتمالاً)
استراتيجية العينات 2: قياس Temperature
اضبط العشوائية بقسمة logits قبل softmax:
probs = softmax(logits / temperature)
قيم Temperature والتأثيرات
Temperature = 0 (قريب من الجشع):
temperature = 0.01
probs = softmax([2.0, 5.0, 1.0, 0.5] / temperature)
# probs ≈ [0.0, 1.0, 0.0, 0.0] # شبه حتمي
Temperature = 1 (دون تغيير):
temperature = 1.0
probs = softmax([2.0, 5.0, 1.0, 0.5] / temperature)
# probs = [0.05, 0.84, 0.02, 0.01] # التوزيع الأصلي
Temperature = 2 (أكثر عشوائية):
temperature = 2.0
probs = softmax([2.0, 5.0, 1.0, 0.5] / temperature)
# probs ≈ [0.12, 0.61, 0.09, 0.06] # توزيع أكثر تسطحاً
المقارنة المرئية:
| Temperature | التوزيع | حالة الاستخدام |
|---|---|---|
| 0.0-0.3 | قمة حادة | مهام واقعية، كود |
| 0.5-0.7 | متوازن | دردشة عامة |
| 0.8-1.0 | إبداعي | عصف ذهني، قصص |
| 1.5-2.0 | عشوائي جداً | تجريبي، فن |
استراتيجية العينات 3: Top-p (Nucleus Sampling)
عينة من أصغر مجموعة من الرموز التي احتمالها التراكمي ≥ p:
لماذا Top-p > Temperature:
- تكيفي: حجم النواة يتغير بناءً على الثقة
- خطوة عالية الثقة (رمز واحد 0.9 احتمال): حجم النواة = 1
- خطوة منخفضة الثقة (عدة رموز ~0.1 احتمال): حجم النواة = 10+
- يمنع عينات الذيل: لا يعاين أبداً من رموز منخفضة الاحتمال جداً
متى تستخدم:
- Top-p=0.9: عام (افتراضي GPT-5.2)
- Top-p=0.95: أكثر إبداعاً
- Top-p=0.5-0.7: مركّز جداً، واقعي
الاستراتيجيات المدمجة (ما يستخدمه الإنتاج)
GPT-5.2 API افتراضي:
temperature = 1.0
top_p = 0.9
العملية:
- تطبيق قياس temperature
- ثم تطبيق تصفية top-p
- عينة من النتيجة
متقدم: عقوبات التكرار والوجود
ثني التكرار دون تغيير العينات الأساسية:
عقوبة التكرار:
def apply_frequency_penalty(logits, generated_tokens, penalty=0.5):
"""
تقليل logits للرموز التي ظهرت كثيراً.
"""
adjusted_logits = logits.copy()
# عد ترددات الرموز
token_counts = {}
for token in generated_tokens:
token_counts[token] = token_counts.get(token, 0) + 1
# تطبيق العقوبة
for token, count in token_counts.items():
adjusted_logits[token] -= penalty * count
return adjusted_logits
متى تستخدم:
- عقوبة التكرار: منع العبارات المتكررة
- عقوبة الوجود: تشجيع مفردات متنوعة
- كلاهما: كتابة إبداعية، عصف ذهني
أمثلة التكوين الواقعي
بوت Q&A واقعي
config = {
"temperature": 0.2, # عشوائية منخفضة
"top_p": 0.9, # نواة قياسية
"frequency_penalty": 0.0, # لا تعاقب الحقائق
"presence_penalty": 0.0,
}
# الإخراج: إجابات متسقة، واقعية
# "عاصمة فرنسا هي باريس."
مساعد كتابة إبداعية
config = {
"temperature": 0.9, # إبداع عالي
"top_p": 0.95, # نواة أوسع
"frequency_penalty": 0.6, # تجنب التكرار
"presence_penalty": 0.4, # مفردات متنوعة
}
# الإخراج: نثر إبداعي، متنوع
إكمال الكود
config = {
"temperature": 0.0, # حتمي
"top_p": 1.0, # غير مستخدم (temp=0)
"frequency_penalty": 0.0,
"presence_penalty": 0.0,
}
# الإخراج: الكود الأكثر احتمالاً (جشع)
أسئلة المقابلة الشائعة والإجابات
س1: "Temperature مقابل Top-p - أيهما أفضل؟"
الإجابة:
"يخدمان أغراضاً مختلفة:
- Temperature يضبط العشوائية الإجمالية عالمياً لجميع الرموز
- Top-p يكيّف حجم النواة بناءً على ثقة النموذج
أفضل ممارسة: استخدم كلاهما. Temperature=0.7 + Top-p=0.9 شائع. Temperature يضبط الإبداع الأساسي، top-p يمنع العينات من الرموز شديدة الندرة."
س2: "chatbot الخاص بك يكرر نفسه أحياناً. كيف تصلح ذلك؟"
خطوات التصحيح:
# 1. تحقق من التكرار في الإخراج
output = "يمكنني مساعدتك. يمكنني مساعدتك. يمكنني مساعدتك."
# → مطلوب عقوبة التكرار
# 2. أضف عقوبة التكرار
config = {
"temperature": 0.7,
"frequency_penalty": 0.8, # ابدأ هنا
}
النقاط الرئيسية للمقابلات
✅ اعرف الأساسيات: Temperature، top-p، top-k، العقوبات ✅ اشرح المقايضات: الإبداع مقابل الواقعية، الحتمية مقابل التنوع ✅ تكوينات الإنتاج: احفظ الإعدادات الشائعة (Q&A مقابل إبداعي) ✅ التصحيح: التكرار → عقوبة التكرار، الهلوسة → temperature أقل ✅ متقدم: اذكر beam search، العينات التكيفية
الوحدة التالية: طبّق هذه الأساسيات على هندسة الأوامر في الوحدة 2.
:::