ما يأكله المحلل الرمزي يصبح ما يعرفه
نظام غذائي للمحلل الرمزي: تعريف
يُدرَّب محلل رمزي هاريس على عينة من مجموعة البيانات. يجري تحليلًا توزيعيًا عبر تلك العينة، يختار N مقاطع تتكرر بأقوى درجة، ويكتبها في المفردات. بعد التدريب، تصبح تلك N مقاطع أبجدية ثابتة يستخدمها نموذج اللغة لكل شيء: التدريب، الاستدلال، كل مدخل، كل مخرج.
نظام غذائي للمحلل الرمزي = عينة من النص يتدرب عليها المحلل الرمزي.
نظام غذائي تدريبي = مجموعة نصوص يتدرب عليها نموذج اللغة.
عندما يختلف نظامان غذائيان، يتعلم الـtokenizer قطعًا مُعدّلة لنصوص لن يراها النموذج أبدًا. يُنفق سعة الـembedding (فتحة واحدة لكل مدخل في المفردات) على قطع لا تُحقق أي مكافأة أثناء التدريب.
خطأ ANDREA-12M
قامت ANDREA-12M بتدريب Harris tokenizer الخاص بها على رأس خام من megachat-v8.txt. كان ذلك الرأس يحتوي على عينات كود وبيانات استدعاء أدوات. ومع ذلك، استبعدت المنهج التدريبي الكود واستدعاءات الأدوات؛ رأت ANDREA-12M نص الحوار فقط.
النتيجة: تعلّم الـtokenizer مقاطع من كلمات Python الرئيسية، الأقواس JSON، أعلام الـshell. نموذج مدرّب على مدخلات قاموس وحوار. 36.4% فقط من المقاطع تتداخل مع عينة مرجحة بالمنهج. 63.6% المتبقية من فتحات المفردات خُصّصت لمقاطع لن يواجهها النموذج أثناء التدريب.
لماذا هذا مهم
يستهلك كل مدخل في المفردات معاملات الـembedding: صف واحد من مصفوفة embedding بشكل V × d_model (مغطاة في النشاط 4). عند V = 4353 و d_model = 384، يكلف كل فتحة مفردات 384 float. إهدار 63.6% يعني إهدار 63.6% من مصفوفة الـembedding على بيانات لا يراها النموذج أبداً.
صِيغ قاعدة نظام غذائي
كم يجب أن يكون N كبيراً
مسح علم المفردات
قامت ANDREA-120M بتجربة علم مفردات: تدريب tokenizers Harris عند قيم N مختلفة (مقاطع مطلوبة) على نفس مجموعة بيانات firehose بحجم 1.25B حرف. قياس عدد المقاطع التي يجدها الـ tokenizer فعلياً. رسم النتائج.
| العدد المطلوب N | عدد القطع الفعلية الموجودة | الحالة |
|---|---|---|
| 2,048 | 2,048 | غير مشبع (مساحة للنمو) |
| 4,096 | 4,096 | غير مشبع |
| 8,192 | 8,192 | نقطة التشبع |
| 16,384 | 13,106 | نفد المجموع |
ما يعنيه التشبع
عند N صغير، يحتوي الجسم النصي على الكثير من الأنماط المتكررة؛ يملأ الـtokenizer كل فتحة يطلبها. عند N كبير، ينفذ الـtokenizer من الحدود ذات الدلالة الإحصائية. يحتوي جسم نصي بحجم 1.25B حرف على حوالي 13,106 قطعة مميزة بشكل مورفيم فوق عتبة التكرار. طلب 16,384 يعطي 13,106؛ الـ3,278 فتحة المتبقية تحصل على حشو أو تترك فارغة.
التشبع: نقطة حيث N المطلوب = N المكتشف. خارج التشبع، لا يمكن للـtokenizer اكتشاف المزيد من القطع دون تخفيف الجودة (خفض عتبات التكرار & قبول الضوضاء).
النقطة المثالية عند 8192
اختارت ANDREA-120M مقدار N = 8192. تفسير:
- تحت 8192 (مثل 4096): المفردات لا تغطي المورفيمات الشائعة بشكل كافٍ؛ التسلسلات تتفتت إلى رموز أكثر؛ ينخفض الإنتاجية.
- عند 8192: كل فتحة شريحة تتوافق مع نمط حقيقي متكرر في مجموعة البيانات.
- فوق 8192: عوائد متناقصة؛ 13,106 < 16,384 يعني إهدار الفتحات.
مفردات ANDREA-120M النهائية: 256 + 8192 + 1 = 8449 رمزًا. الضغط المتوسط: 5.91 بايت UTF-8 لكل رمز، مما يعني أن كل رمز يحل محل ~5.9 بايت من النص الخام. هذا النسبة تحدد سياق النموذج الفعال: عند 1024 رمز × 5.91 بايت/رمز، يقرأ ANDREA-120M حوالي 6,050 حرفًا من السياق لكل مرور أمامي.
فوق أو تحت نقطة التشبع
من أين جاءت 63.6%
عد الفجوات المهدرة
tokenizer الخاص بـ ANDREA-12M تم تدريبه على megachat-v8.txt الخام (4096 شريحة مطلوبة، وجدت). قامت فريق بأخذ عينة فرعية مرجحة بالمنهج الدراسي: corpus مرجح حسب تكرار سحب كل مصدر بواسطة bandit. أعادوا تشغيل تحليل Harris على تلك العينة المرجحة وسألوا: كم عدد الشرائح الأصلية 4096 التي لا تزال تظهر؟
النتيجة: تداخل 36.4%. 1,491 من 4,096 شريحة تطابقت مع الترجيح المنهجي. الـ 2,605 شرائح المتبقية جاءت من مصادر استبعدتها النموذج.
63.6% من فتحات المفردات تم تخصيصها للبايتات التي لم يرها النموذج أبداً.
تكلفة الـ Embedding
كل مدخل في المفردات يشغل صفًا واحدًا في مصفوفة الـ embedding بشكل (V, d_model). بالنسبة لـ ANDREA-12M:
- V = 4353 (256 + 4096 + 1)
- d_model = 384
- معلمات الـ Embedding = V × d_model = 4353 × 384 = 1,671,552 معلمة
63.6% من هذه المعاملات لم تُستخدم في التدريب الحواري. 1,063,107 معاملات مخصصة، 0 إشارة مكافأة. ANDREA-12M يبقى على قيد الحياة لأن 256 بايت أساسي يغطي دائمًا أي حرف؛ لكن السعة لكل معامل انخفضت بشكل حاد.
كيف أصلحت ANDREA-120M ذلك
تم تدريب tokenizer لـ ANDREA-120M على خرطوم حريق كامل (1.25B حرف، 21 مصدرًا) عند التشبع N = 8192. corpus التدريبي = نفس الخرطوم الحريق. محاذاة النظام الغذائي: 100%. التداخل الناتج على عينة مرجحة بالدردشة: 36.5%. (ملاحظة: 36.5% هو تداخل، وليس تغطية؛ الدردشة وحدها هي مجموعة فرعية من الخرطوم الحريق الكامل، لذا يتصرف هذا الرقم بشكل مختلف عن 36.4% لـ 12M.)
ضغط فعال: 5.91 بايت UTF-8 لكل رمز. مصفوفة الـ embedding لـ ANDREA-120M: 8449 × 768 = 6,488,832 معامل. كل معامل يكسب إشارة مكافأة لأن كل مقطع يرتبط بنص يتدرب عليه النموذج فعليًا.
التغطية مقابل التداخل
لماذا 5.91 بايت لكل رمز مهم
نسبة الضغط
متوسط بايتات UTF-8 لكل رمز يقيس كمية النص الخام التي يضغطها كل مدخل في المفردات. ANDREA-120M يبلغ متوسطها 5.91. نموذج بقطع أقصر (3 بايت/رمز) يقرأ سياقًا أقل لكل مرور أمامي؛ نموذج بقطع أطول (8 بايت/رمز) يقرأ أكثر لكنه يدرب أبطأ (كل قطعة تحتاج عينات أكثر للتعلم جيدًا).
السياق الفعّال
| الكمية | القيمة |
|---|---|
| نافذة سياق الرموز | 1,024 رمز |
| متوسط البايتات لكل رمز | 5.91 |
| السياق الفعّال بالأحرف | 1024 × 5.91 ≈ 6,050 |
يحتوي تقريبًا 6,000 حرف UTF-8 في تمريرة أمامية واحدة لـ ANDREA-120M. صفحة من النثر الإنجليزي الكثيف تحتوي على ~3,000-4,000 حرف؛ ANDREA تقرأ حوالي صفحة ونصف لكل تمريرة.
يشدّ النظام الغذائي الضغط
المحلّل الذي يتوافق جيدًا يضغط بشكل أفضل. عندما يتعلم المحلّل مقاطع تتكرر في مجموعة البيانات التدريبية، يتسع نص أكثر لكل رمز. محلّل ANDREA-12M الذي لا يتوافق جيدًا ضغط أسوأ في الدردشة (مزيد من البايتات المصروفة على شظايا الرجوع إلى البايت بسبب أن مقاطع الدردشة كانت أقل كثافة في المفردات). محلّل ANDREA-120M المُعدّل بالنظام الغذائي يحتفظ بقطعة على شكل دردشة في مسار سريع ويضع النصوص النادرة على رجوع إلى البايت.
تستمر النشاط 4
النشاط 4 (grow_a_language_model_embeddings) يغطي ما يحدث لهذه المدخلات 8449 في المفردات: تتحول إلى صفوف في مصفوفة التضمين على شكل V × d_model، ثم تضاف تضمينات الموضع المُتعلّمة قبل التدفق إلى كتلة محول أولى.