أساسيات LLM للمقابلات

استراتيجيات العينات والتحكم في التوليد

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

لماذا هذا مهم للمقابلات

سؤال المقابلة الحقيقي (OpenAI L6):

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

سؤال المقابلة الحقيقي (Meta):

"اشرح الفرق بين temperature وtop-p sampling. متى تستخدم واحداً على الآخر؟"

فهم العينات حاسم لـ أنظمة LLM الإنتاجية حيث تحتاج لموازنة الإبداع، الاتساق، والدقة الواقعية.


كيف تولد LLMs النصوص (العملية الانحدارية التلقائية)

خطوة بخطوة:

  1. تمريرة أمامية: النموذج يحسب logits للرمز التالي
  2. تحويل إلى احتماليات: تطبيق softmax
  3. عينة: اختيار الرمز التالي بناءً على الاستراتيجية
  4. تكرار: إضافة الرمز للتسلسل، توليد التالي

استراتيجية العينات 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

العملية:

  1. تطبيق قياس temperature
  2. ثم تطبيق تصفية top-p
  3. عينة من النتيجة

متقدم: عقوبات التكرار والوجود

ثني التكرار دون تغيير العينات الأساسية:

عقوبة التكرار:

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.

:::

اختبار

الوحدة 1: أساسيات LLM للمقابلات

خذ الاختبار