Nucleus Sampling
يختار أخذ العينات Top-p (النواة) كل رمز من أصغر مجموعة تغطي الاحتمال p، لذا تتكيف المجموعة مع ثقة النموذج، بخلاف Top-k.
أخذ العينات من النواة، المعروف أيضًا بأخذ العينات top-p، طريقة لفك الترميز تختار كل رمز تالٍ من أصغر مجموعة مرشحين يبلغ مجموع احتمالاتها عتبة p، ثم تأخذ عينة من تلك المجموعة. قدّم آري هولتزمان وزملاؤه في جامعة واشنطن ومعهد ألين للذكاء الاصطناعي هذه الطريقة عام 2019 في ورقتهم الحالة المحيرة لانحطاط النصوص العصبية. وباستخدام GPT-2 Large، أوضحوا أن فك الترميز الجشع والبحث الحزمي يدفعان النماذج اللغوية إلى حلقات رتيبة ومتكررة، في حين يؤدي أخذ عينات من التوزيع الكامل إلى نصوص غير مترابطة، وأن استبعاد الذيل غير الموثوق من التوزيع أنتج نصوصًا اقترب التعقيد الحُواري فيها وتنوعها أكثر من الكتابة البشرية. وأصبح top-p الآن إعدادًا قياسيًا في واجهات توليد النصوص البرمجية لكل نموذج لغوي كبير تقريبًا.
كيفية اختيار النواة#
في كل خطوة، يقيّم النموذج اللغوي كل رمز في مفرداته، وتحول دالة سوفت ماكس تلك التقييمات إلى احتمالات. ثم يرتب أخذ العينات من النواة الرموز من الأرجح إلى الأقل احتمالًا، ويجمع احتمالاتها بهذا الترتيب حتى يبلغ المجموع التراكمي p، ويستبعد كل ما يقع خارج تلك المجموعة، ويعيد تطبيع العناصر المتبقية كي يكون مجموعها واحدًا، ثم يأخذ عينة من رمز واحد.
لنفترض وجود أربعة مرشحين احتمالاتهم 0.50 و0.25 و0.15 و0.10، وأن قيمة p تساوي 0.8. يبلغ مجموع الاحتمالين الأولين 0.75، وهو أقل من العتبة، لذا ينضم المرشح الثالث وتغطي النواة 0.90. ويُستبعد الرمز الرابع، ثم تُسحب الرموز الثلاثة المتبقية باحتمالات تقارب 0.56 و0.28 و0.17 بعد إعادة التطبيع.
تتمثل الخاصية المميزة في أن النواة تعيد ضبط حجمها في كل خطوة. فبعد عبارة «عاصمة فرنسا هي»، يستحوذ رمز واحد على معظم الاحتمالات، وتتقلص النواة إلى كلمة واحدة. أما في بداية قصة، فتتوزع الاحتمالات على مئات الكلمات المعقولة، وتتسع النواة لتشملها. ولا يمكن لعدد ثابت من المرشحين التكيف بهذه الطريقة.
الإجراء نفسه في PyTorch، لخطوة واحدة من فك الترميز على مفردات تضم ستة رموز:
import torch
# احتمالات الرمز التالي لمفردات من 6 رموز
probs = torch.tensor([0.10, 0.40, 0.04, 0.25, 0.06, 0.15])
top_p = 0.75
# رتّب الرموز، ثم احتفظ بها حتى يبلغ المجموع التراكمي top_p
sorted_probs, order = probs.sort(descending=True)
cumulative = sorted_probs.cumsum(dim=0)
keep = cumulative - sorted_probs < top_p # يظل الرمز الذي يتجاوز top_p ضمن المجموعة
# أعد تطبيع النواة واختر عشوائيًا معرّف الرمز التالي
nucleus = sorted_probs * keep
next_token = order[torch.multinomial(nucleus / nucleus.sum(), num_samples=1)]
print(order[keep].tolist(), next_token.item())يسرد الناتج رموز النواة، وهي معرّفات الرموز 1 و3 و5، التي يبلغ مجموع احتمالاتها 0.80، ثم يورد المعرّف المختار. ولا يمكن اختيار الرموز 0 و2 و4 في هذه الخطوة، كما أن إعادة تشغيل النص البرمجي تختار أحد الرموز الثلاثة المتبقية بما يتناسب مع احتماله.
top-p مقابل فك الترميز الجشع وtop-k ودرجة الحرارة#
- فك الترميز الجشع يختار دائمًا الرمز الأعلى احتمالًا. وهو حتمي ويناسب الإجابات الواقعية القصيرة، لكن المخرجات الطويلة تميل إلى الدوران في حلقات متكررة.
- أخذ عينات top-k يحتفظ بعدد ثابت من المرشحين. فعندما تكون k مساوية لـ50، تظل الخطوة الواثقة تأخذ عينة من 50 رمزًا، بما فيها خيارات غير منطقية، بينما قد تستبعد الخطوة غير الواثقة خيارات معقولة. ويستبدل top-p العدد الثابت بنسبة ثابتة من الاحتمالات.
- درجة الحرارة تقسم تقييمات النموذج قبل تطبيق سوفت ماكس. فالقيم الأقل من 1 تزيد تركّز التوزيع حول الخيارات الأعلى، والقيم الأكبر من 1 تجعله أكثر تسطحًا. ولأن top-p يُطبّق بعد درجة الحرارة، فإن رفعها يوسّع النواة أيضًا.
- أخذ العينات min-p يُبقي على كل رمز لا يقل احتماله عن نسبة محددة من احتمال الرمز الأعلى احتمالًا، لذا يتكيف حد القطع أيضًا مع ثقة النموذج. وتوفر Hugging Face Transformers وvLLM وllama.cpp هذه الطريقة إلى جانب top-p.
بما أن درجة الحرارة وtop-p يتحكمان كلاهما في العشوائية، فالنصيحة المعتادة هي ضبط أحدهما أو الآخر بدلًا من ضبطهما معًا. وتتيح كثير من محركات الاستدلال أيضًا استخدام top-k وtop-p معًا، حيث يعمل top-k سقفًا صارمًا لعدد المرشحين.
اختيار قيمة top-p#
تُعطّل قيمة top-p البالغة 1.0 عامل التصفية، وتتراوح القيم الافتراضية الشائعة بين 0.9 و1.0. لا يعيد top-p سوى تشكيل احتمالات النموذج نفسه، لذا تتحقق الدقة الواقعية بربط الموجّه بسياق يستند إلى الحقائق، مثل التوليد المعزّز بالاسترجاع، الذي يقلّل الهلوسات عبر تزويد النموذج بالحقائق التي يحتاج إليها. وتضفي القيم الأعلى مزيدًا من التنوع على العصف الذهني وحوارات روبوتات الدردشة والكتابة الإبداعية. أما القيم الأقل، مثل 0.5، فتجعل المخرجات أكثر قابلية للتنبؤ وأكثر تكرارًا، ما يناسب استخراج البيانات وموجّهات التصنيف والشيفرات البرمجية؛ ويذهب فك الترميز المقيّد إلى أبعد من ذلك بحجب كل رمز من شأنه الإخلال بالتنسيق المطلوب.
يتحكم الإعداد نفسه في المخرجات اللغوية ضمن مسارات الرؤية. عندما يؤدي كشف Ultralytics YOLO26 إلى وصف مشهد من نموذج رؤية ولغة، تمرر واجهة Ultralytics للنماذج اللغوية الكبيرة وسائط الطلب مثل top_p مباشرةً إلى واجهة برمجة التطبيقات لدى المزود، لذا تحافظ قيمة منخفضة مثل 0.5 على اتساق صياغة أوصاف الإطارات المتشابهة.










