مستوى المقال: مبتدئ. المقال ده هيخلّيك تفهم ليه نفس السؤال بيرجّع إجابات مختلفة من الذكاء الاصطناعي، وإزاي تتحكم فيها برقم واحد بدل ما تسيبها للصدفة.
لو سألت ChatGPT نفس السؤال مرتين وطلعلك ردّين مختلفين، انت مش لاقي عطل. انت لقيت إعداد اسمه Temperature. لما تفهمه، هتبطّل تشتكي من "النموذج بيتغير"، وتبدأ تظبطه حسب شغلك.
إزاي الذكاء الاصطناعي بيقرر الكلمة اللي بعدها؟
المشكلة باختصار
معظم الناس فاكرة إن النموذج "بيعرف" الإجابة الصح ويكتبها. اللي بيحصل فعلاً مختلف. النموذج بيتنبأ بالكلمة التالية بس. وكل مرة بيختار من قائمة احتمالات، مش كلمة واحدة مؤكدة. الرقمين اللي بيتحكموا في الاختيار ده هما Temperature وTop-p. لو مش فاهمهم، انت بتشتغل بالبركة.
الفكرة بمثال بسيط: الشيف اللي بيختار البهار
تخيّل شيف قدامه طبق، وعايز يضيف مكوّن أخير. قدامه أطباق صغيرة: ملح (احتمال كبير إنه المناسب)، فلفل (احتمال أقل)، قرفة (احتمال صغير)، وشطة (احتمال أصغر). الشيف مش بيحطّ الملح بالضرورة كل مرة. بيرمي عملة معدّلة بتميل ناحية الاحتمالات الكبيرة.
دلوقتي فيه زرّاير في إيده:
- لو خفّض Temperature، الفروق بين الأطباق بتكبر. الملح بيبقى شبه مؤكد. الشيف بقى متحفّظ ومتوقّع.
- لو رفع Temperature، الفروق بتقلّ. القرفة والشطة بقى ليهم فرصة حقيقية. الشيف بقى مغامر وبيفاجئك.
النموذج بيعمل نفس الحكاية بالظبط، بس بدل البهار، الأطباق هي "الكلمات المرشّحة" للكلمة الجاية.
نفس الكلام بشكل علمي دقيق
في كل خطوة، النموذج بيطلّع رقم خام (logit) لكل كلمة ممكنة في القاموس. الأرقام دي بتتحوّل لاحتمالات عن طريق دالة اسمها softmax. مجموع الاحتمالات كله بيساوي 1. الكلمة اللي ليها أعلى احتمال هي الأرجح، بس مش الوحيدة.
الـ Temperature (رمزها T) بتتدخّل قبل softmax: بنقسم كل logit على T.
- T أقل من 1 (مثلاً 0.2): بيكبّر الفروق، فالتوزيع بيبقى "حادّ" والنموذج بيختار الأرجح غالبًا. نتيجة ثابتة ومتوقّعة.
- T = 1: التوزيع زيّ ما هو من غير تعديل.
- T أكبر من 1 (مثلاً 1.5): بيقرّب الاحتمالات من بعضها، فالنموذج بيجرّب كلمات أبعد. إبداع أكتر، لكن مخاطرة كلام غير منطقي بتزيد.
أما Top-p (اسمه nucleus sampling) فبيشتغل بمنطق تاني: رتّب الكلمات من الأعلى احتمالًا للأقل، وخُد أقل مجموعة مجموع احتمالها يوصل لـ p (مثلاً 0.9)، وتجاهل الباقي. يعني Top-p = 0.9 معناه "اختَر من الكلمات اللي بتغطّي 90% من الاحتمال، وارمِ الذيل الغريب".
فيه كمان Top-k: خُد أعلى k كلمة بس (مثلاً أعلى 40)، وسيب الباقي. الفرق إن Top-k رقم ثابت، وTop-p بيتأقلم حسب مدى ثقة النموذج في كل خطوة.
كود Python شغّال تشوف الفرق بعينك
الكود ده بيبعت نفس البرومبت مرتين: مرة بحرارة منخفضة ومرة عالية، عشان تحس بالفرق عمليًا. مبني على مكتبة OpenAI الرسمية، وينفع تعمل نفس الحاجة بأي مزوّد تاني بنفس المبدأ.
from openai import OpenAI
client = OpenAI()
prompt = "descripe a sea city in one sentence."
def generate(temperature, top_p):
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt}],
temperature=temperature,
top_p=top_p,
max_tokens=40,
)
return resp.choices[0].message.content.strip()
print("T=0.0 :", generate(0.0, 1.0))
print("T=0.0 :", generate(0.0, 1.0))
print("T=1.3 :", generate(1.3, 0.95))
print("T=1.3 :", generate(1.3, 0.95))
اللي هيحصل: السطرين بتوع T=0.0 هيطلّعوا جملة شبه متطابقة كل مرة. السطرين بتوع T=1.3 هيطلّعوا صياغات مختلفة. جرّبه بنفسك، ده أسرع طريقة تثبّت الفكرة في دماغك.
أرقام عملية تبدأ بيها
- مهام تحتاج دقّة (استخراج بيانات، تصنيف، إجابة من مصدر): T بين 0 و0.3.
- محادثة عامة ومساعدة: T حوالي 0.7.
- كتابة إبداعية وعصف ذهني: T بين 0.9 و1.2، مع Top-p حوالي 0.95.
قاعدة مهمة: متلعبش في Temperature وTop-p مع بعض في نفس الوقت وانت مبتدئ. ثبّت واحد وحرّك التاني.
الـ trade-off بصراحة
كل ما رفعت الحرارة، بتكسب تنوّعًا وإبداعًا، وبتخسر ثباتًا وقابلية للتوقّع. حرارة عالية جدًا ممكن تنتج كلام مفكّك. حرارة صفر بتدّي نفس الإجابة دايمًا. مفيش رقم صح مطلق، فيه رقم مناسب لمهمتك.
متى متغيّرش الإعدادات دي أصلًا
لو انت لسه بتجرّب فكرة، سيب القيم الافتراضية زيّ ما هي. كمان لو مشكلتك إن النموذج بيغلط في الحقائق، الحل مش تقليل الحرارة، الحل غالبًا إنك تديله المصدر عبر تقنية RAG. Temperature بيتحكم في أسلوب الاختيار، مش في معرفة النموذج.
الخطوة التالية
افتح الكود اللي فوق، غيّر temperature من 0.0 لـ 0.7 لـ 1.3، وشغّله 3 مرات لكل قيمة. اكتب لنفسك الفرق اللي شُفته.
مصادر
- OpenAI API Reference: platform.openai.com/docs/api-reference
- Holtzman et al. 2019 - nucleus sampling: arxiv.org/abs/1904.09751
- Anthropic Docs - temperature في Claude API: docs.anthropic.com/en/api/messages
- Hugging Face - generation strategies: huggingface.co/docs/transformers/generation_strategies