ابنِ نموذجًا لغويًا على مستوى الحرف بترتيب n-gram، ونعِّمه، ثم قيِّمه في المِنصّة، وتوقَّع — قبل أن تقرأ اللوحات — أرضية الاحتمال التي يمنحها add-k لحرفٍ غير مرئي، والاحتمال الذي يحتفظ به شقيقه المرئي، وما الذي يرتدُّ إليه سياقٌ غير مرئي، وperplexity تسلسلٍ متوقَّعٍ تمامًا مقابل تسلسلٍ منتظم، وفي أيّ اتجاهٍ تتحرّك perplexity كلّما ارتفعت رتبة النموذج.
نموذج n-gram يَعُدُّ فحسب: كم مرّةً تبع كلُّ حرفٍ كلَّ سياقٍ من الأحرف n-1 السابقة. الاحتمال الشرطي المُنعَّم هو P(c | ctx) = (count(ctx,c) + k) / (count(ctx) + kV)، فمع k > 0 يحصل حتى حرفٌ لم يُرَ قطّ بعد سياقٍ ما على أرضيةٍ صغيرة k/(count(ctx) + kV)، ولا يُسنَد لنصٍّ محجوزٍ احتمالٌ صفري أبدًا. وperplexity هي 2 مرفوعةً إلى متوسّط خسارة اللوغاريتم لكل حرفٍ بالبِتّات — فنموذجٌ منتظمٌ على V رمزًا يسجّل V بالضبط، ونموذجٌ أكيدٌ يسجّل 1. لا شبكة عصبية هنا — لا تضمينات، ولا أوزان، بل عَدٌّ فقط، فكلّ رقمٍ دقيق.
افتح المِنصّة. تستخدم قيم الخطوات أدناه سلاسلَ تدريبٍ صغيرة مبنيّةً يدويًا يمكنك التحقّق منها بنفسك مقابل لوحات العَدّ في النموذج؛ صندوقُ السياق ومنزلقات الرتبة وk وtemperature تُحرِّك كلَّ رقم.
Train -> abababab Order -> 2 (bigram) k -> 0.5 Context -> a
Then: Train -> abcd Order -> 1 (unigram) k -> 0
تُظهر لوحة التوزيع شريطًا واحدًا لكل حرفٍ في المفردات، مع عدده الخام واحتماله بـadd-k؛ وتطبع لوحة perplexity قيمتَي التدريب والمحجوز وتمسحها عبر الرتب من 1 إلى 4. كلُّ شريطٍ ورقمٍ مَحسوبٌ من العَدّ، لا مرسوم.
في "abababab" يرد السياق "a" أربع مرّات ويتبعه دائمًا "b" — فحرف "a" بعد "a" لا يُرى قطّ. مع النموذج الثنائي، وV = 2 وk = 0.5، توقَّع الأرضية P(a | a) = k/(N + kV) قبل أن تقرأ الشريط.
P(a | a) = 0.5 / (4 + 0.5×2) = 0.5 / 5 = 0.1. الحرف غير المرئي ليس مستحيلًا — يمنحه التنعيم أرضيةً صغيرة كي لا يسجّل نصٌّ محجوزٌ احتمالًا صفريًا أبدًا.
الأرضية التي نالها الحرف غير المرئي خُصمت من كتلة الحرف المرئي. توقَّع ما يحتفظ به "b" بعد "a": P(b | a) = (count + k)/(N + kV) = (4 + 0.5)/(4 + 0.5×2).
P(b | a) = 4.5 / 5 = 0.9. الاحتمالان 0.9 و0.1 يجمعان إلى 1 — أعاد التنعيم توزيع الكتلة من الحدث المرئي إلى غير المرئي دون أن يغادر المُبسَّط قطّ.
بدِّل إلى نموذجٍ ثلاثي (رتبة 3) على "abababab" نفسها. السياق "zz" لا يظهر في التدريب إطلاقًا. توقَّع ما الذي يرتدُّ إليه P(a | "zz")، مع V = 2.
P(a | "zz") = 1/V = 1/2 = 0.5. سياقٌ لم يره النموذج قطّ لا يحمل أيّ عَدّ، فبدلًا من 0/0 يرتدُّ النموذج إلى تخمينٍ منتظمٍ على المفردات — الخيار الآمن حين لا يملك ما يستند إليه.
قيِّم النموذج الثنائي على النصّ نفسه الذي تعلّمه، "abababab"، مع k = 0 (بلا تنعيم). كلُّ حرفٍ تالٍ أكيد، فتوقَّع perplexity عنده.
Perplexity = 1. لكلّ تنبّؤٍ احتمالٌ 1، فمتوسّط خسارة اللوغاريتم 0 بِتّ و2^0 = 1 — أدنى قيمةٍ على المقياس، نموذجٌ لا يُفاجَأ أبدًا.
الآن نموذجٌ أُحادي (رتبة 1) على "abcd"، حيث يظهر كلٌّ من الحروف الأربعة مرّةً واحدة بالضبط، فالتوزيع منتظم. مع k = 0، توقَّع perplexity على "abcd".
Perplexity = V = 4. لكلّ حرفٍ احتمالٌ 1/4، وخسارة لوغاريتمٍ log2(4) = 2 بِتّ، و2^2 = 4 — نموذجٌ منتظمٌ على V رمزًا في حيرةٍ تعادل نردًا عادلًا بـV أوجه.
على مُدوَّنة نصّ الفصول، امسح الرتبة من 1 إلى 4 مع k = 0.1 وراقب لوحة perplexity التدريب. توقَّع كم مرّةً ترتفع كلّما زادت الرتبة عبر 1 → 2 → 3 → 4.
ترتفع 0 مرّة — perplexity التدريب لا تنخفض إلّا (17.2 → 7.4 → 3.8 → 3.1). سياقٌ أطول يلائم نصّ التدريب بقدرٍ مساوٍ على الأقل دائمًا. ولهذا بالضبط تكون perplexity التدريب وحدها مُضلِّلة: نموذجٌ عالي الرتبة قد يحفظ النصّ ويعمّم رغم ذلك بضعف — وهو ما تكشفه لوحة المحجوز.
كلُّ ما سبق ينتظرك في المِنصّة. ارفع k لتراقب التوزيع كلَّه ينبسط نحو الانتظام، واخفض temperature دون 1 لتشحذ النصّ المُولَّد نحو المنوال وارفعها فوق 1 لترخيه، وقارن perplexity التدريب بالمحجوز كلّما ارتفعت الرتبة — الفجوة هي حفظ النموذج للنصّ.
- قرأتَ أرضية add-k لحرفٍ غير مرئي: P(a | a) = 0.1، وشقيقه المرئي P(b | a) = 0.9
- رأيتَ سياقًا غير مرئيٍّ يرتدُّ إلى 1/V = 0.5
- قيّمتَ تسلسلًا متوقَّعًا تمامًا عند perplexity 1
- قيّمتَ نموذجًا أُحاديًا منتظمًا عند perplexity V = 4
- راقبتَ perplexity التدريب تنخفض فقط كلّما ارتفعت الرتبة — 0 ارتفاعات
- كلُّ قيمةٍ توقّعتها هي حساب العَدّ وadd-k و perplexity الخاص بالعرض نفسه — نموذج n-gram، لا شبكة عصبية