المستوى: مبتدئ — مناسب لأي حد بيستخدم Claude أو GPT API لأول مرة وعايز يفهم ليه الردود مش ثابتة.
لو بتبعت نفس البرومبت لـ Claude أو GPT وكل مرة بيرجع لك إجابة شكلها مختلف، ده مش bug ولا مزاج النموذج. ده اسمه Sampling، وفيه معاملين بيتحكموا فيه: temperature و top_p. لو فهمتهم صح، تقدر تخلي النموذج ثابت زي الآلة الحاسبة، أو مبدع زي كاتب قصص — بسطر واحد.
Temperature و Top-P: المعاملان اللي بيحددوا شخصية الـ LLM
المشكلة باختصار
المطور المبتدئ بيشغّل أول استدعاء API له، يلاقي الإجابة كويسة. يعيد نفس الاستدعاء، يلاقي الصياغة اتغيرت. يفتكر إن النموذج "بيهلوس" أو "مش ثابت". الحقيقة إن النموذج بيعمل اللي قلتله يعمله بالظبط — أنت اللي ما ضبطتش معاملات الـ sampling.
الـ trade-off هنا واضح: ثبات مقابل تنوع. مفيش قيمة "صح" واحدة، فيه قيمة مناسبة لحالتك.
مثال للمبتدئ: حلواني بيختار طعم الكيكة
تخيل عندك حلواني بيعمل كيكة. قدامه 4 نكهات مرتبة بالطلب: شوكولاتة 50%، فانيليا 30%، فراولة 15%، ليمون 5%.
- Temperature = 0: الحلواني هيختار شوكولاتة كل مرة. زي آلة. متوقع تمامًا.
- Temperature = 1: الحلواني هيختار حسب النسب الطبيعية. لو شغّلته 100 مرة، 50 مرة شوكولاتة و 30 فانيليا.
- Temperature = 2: الحلواني بقى متهور. النسب اتقاربت. ممكن تطلع ليمون كتير فجأة.
الـ Top-P فكرة تانية: الحلواني هيتجاهل النكهات الضعيفة خالص قبل ما يختار. top_p = 0.8 يعني "اختار من النكهات اللي مجموع احتمالاتها يوصل 80% بس". في مثالنا: شوكولاتة + فانيليا (80%)، الفراولة والليمون اتشالوا من القائمة.
الفرق المهم: Temperature بتغيّر شكل التوزيع، Top-P بتقطع طوله.
التعريف العلمي الدقيق
كل ما النموذج بيتنبأ بالتوكن التالي، بيحسب logits لكل توكن في الـ vocabulary (عادة 50K–200K توكن). الـ logits دي بتتحول لاحتمالات عبر دالة softmax:
P(token_i) = exp(logit_i / T) / Σ exp(logit_j / T)الـ T هي Temperature. لما T → 0، الـ softmax بيقرب من argmax (التوكن صاحب أعلى logit بياخد كل الوزن). لما T > 1، التوزيع بيتسطّح والاحتمالات بتقرب من بعض.
الـ Top-P (Nucleus Sampling) اقترحها Holtzman et al. في ورقة 2019 "The Curious Case of Neural Text Degeneration". الفكرة: رتّب التوكنز تنازليًا حسب الاحتمال، اجمع لحد ما توصل لـ ، ارمي الباقي.