التقطيع إلى وحدات والتضمينات
كيف يصير النص أرقاماً يستطيع النموذج التدرّب عليها: بناء مفردات، ولماذا لا يحتاج ترميز أزواج البايتات إلى وحدة «مجهول» قط، وطبقة التضمين بوصفها استرجاعاً يمكن البرهان على أنه متجه أحادي مضروب في مصفوفة، ولماذا يجب إعادة حقن الموضع يدوياً.
المتطلبات المسبقة: ما هي الشبكة العصبية؟
الشبكة العصبية تضرب مصفوفات. والنص متتالية محارف. وقبل أن تعمل أيٌّ من آليات ما هي الشبكة العصبية؟، لا بدّ لشيء أن يجسر تلك الهوّة - ويتبيّن أن للجسر ثلاث مراحل متمايزة، تحلّ كلٌّ منها مشكلةً تخلقها سابقتها.
تتابع هذه المقالة سلسلة نصية حتى التنسور الذي يستهلكه المحوّل: تقطيعها إلى وحدات، وربط تلك الوحدات بأعداد صحيحة، وتحويل الأعداد إلى متجهات، ثم إصلاح المعلومات التي تُتلَف على الطريق.
أ. بناء المفردات
ابدأ بتقطيع النص إلى وحدات، ثم اجمع كل وحدة فريدة، ورتّبها، ورقّمها. ويستخدم مثال راشكا المحلول مدوّنةً من جملة واحدة:
The quick brown fox jumps over the lazy dog
الوحدات الفريدة مرتّبةً أبجدياً، وكلٌّ منها مربوط بعدد صحيح فريد يُسمّى معرّف الوحدة:
| الوحدة | المعرّف |
|---|---|
| brown | 0 |
| dog | 1 |
| fox | 2 |
| jumps | 3 |
| lazy | 4 |
| over | 5 |
| quick | 6 |
| the | 7 |
تُبنى المفردات مرة واحدة من مجموعة التدريب كلها ثم تُطبَّق على أي نص جديد. والترميز استرجاع من قاموس؛ أما فكّ الترميز فيحتاج المفردات العكسية التي تردّ المعرّفات إلى سلاسل نصية، وبها تستعيد النص من خرج النموذج.
يعمل في متصفحك. تُنزّل عملية التشغيل الأولى بيئة بايثون (~10 ميغابايت)، ثم تُخزّن مؤقتًا.
ب. المشكلة التي يخلقها هذا
لا تستطيع المفردات الثابتة ترميز إلا الكلمات التي رأتها. أطعِمها
someunknownPlace فيفشل الاسترجاع. والترقيع البديهي وحدة خاصة <|unk|> تنوب عن
«شيء لا أعرفه»، لكن ذلك خسارة معلومات حقيقية: فكل كلمة غير مرئية تنهار إلى الرمز
نفسه، ولا يستطيع النموذج قول شيء محدّد عن أيٍّ منها أبداً.
ج. ترميز أزواج البايتات
يحلّ ترميز أزواج البايتات (BPE) ذلك دون أي وحدة «مجهول» إطلاقاً. ويلاحظ راشكا
أنه المقطِّع المستخدَم لتدريب GPT-2 وGPT-3 والنموذج الأصلي وراء ChatGPT، وأن
مفرداته تضمّ 50,257 مدخلة، مع إسناد أكبر معرّف، 50256، إلى <|endoftext|>.
والآلية بسيطة الصياغة: حين يصادف BPE كلمةً ليست في مفرداته المحدّدة سلفاً، فإنه
يفكّك الكلمة إلى وحدات فرعية أصغر، أو حتى إلى محارف مفردة. ولأن كل محرف مفرد
موجود في المفردات، يوجد دائماً ملاذ، ويمكن ترميز أي سلسلة كائنةً ما كانت. وراشكا
صريح في أن هذه هي طريقة معالجة المقطِّع لكلمة مثل someunknownPlace معالجةً
صحيحة دون حاجة إلى <|unk|> قط.
ولهذا يختلف عدد الوحدات عن عدد الكلمات. فالكلمة الشائعة وحدة واحدة عادةً؛ والنادرة أو المخترعة عدة وحدات. ويفسّر هذا أيضاً أسرةً من السلوكيات التي تحيّر الناس - فضعف قبضة النموذج على الإملاء أو عدّ المحارف يعود جزئياً إلى أنه لا يرى محارف قط، بل هذه القطع فحسب.
<|endoftext|>تؤدّي دورين. يلاحظ راشكا أنها تعمل أيضاً وحدةَ حشو عند تجميع مدخلات بأطوال مختلفة. ويبدو ذلك خطراً - فالحشو مالئ بلا معنى - لكنه لا يهمّ، لأن التدريب يستخدم قناعاً بحيث لا يلتفت الانتباه إلى مواضع الحشو. ومن ثم فالوحدة المختارة للحشو بعينها لا أثر لها.
د. من الأعداد الصحيحة إلى المتجهات
ما زالت معرّفات الوحدات غير صالحة مدخلاً للنموذج. فالمعرّف 7 ليس سبعة أضعاف المعرّف 1؛ فالأعداد هنا تسميات، وأي حساب عليها بلا معنى.
والعلاج طبقة تضمين: مصفوفة أوزان بصفّ لكل مدخلة في المفردات، حيث الصف هو المتجه الممثّل للوحدة . ويصفها راشكا بوضوح - فطبقة التضمين في جوهرها عملية استرجاع تجلب صفوفاً من مصفوفة أوزان طبقة التضمين عبر معرّف وحدة.
مع مفردات من 4 وبُعد تضمين 3:
الوحدة ذات المعرّف 2 تُضمَّن إلى الصف ذي الدليل 2، وهو - أي الصف الثالث، لأن الترقيم يبدأ من الصفر.
لماذا الاسترجاع ضربُ مصفوفات. يشير راشكا إلى أن طبقة التضمين ليست إلا تنفيذاً أكفأ للترميز الأحادي متبوعاً بضرب في طبقة تامة الاتصال. تحقّق:
ينتقي المتجه الأحادي صفاً واحداً بالضبط، فالجداء هو الاسترجاع. والنتيجة هي الجزء المهم: بما أنه ضرب مصفوفات، فمصفوفة التضمين طبقة عادية، تُحسَّن بالانتشار العكسي كأي طبقة أخرى. فالمتجهات مُتعلَّمة لا مُسنَدة.
يعمل في متصفحك. تُنزّل عملية التشغيل الأولى بيئة بايثون (~10 ميغابايت)، ثم تُخزّن مؤقتًا.
في الشكل تحوي المصفوفة أعدادًا صحيحة متتالية بدل أعلاه، إذ يبدأ الصفّ عند مضروبًا في البُعد، فيسهل التحقّق بالعين من الصفّ الناتج.
تفاعلي: صفٌّ واحد، وطريقان
كلّ صفّ آخر يُضرب في صفر ويُرمى.
- الصفّ المُرجَع
- [12, 13, 14, 15]
- عمليّات الضرب، في الجداء
- 20
- عمليّات الضرب، في البحث
- 0
- الأعداد المحفوظة
- 4
- المتّجهات التي غيّرها الخلط
- 0
يُرجع الطريقان الصفّ نفسه، ولهذا كان البحث عمليّة قابلة للاشتقاق مشروعة لا اختصارًا يلتفّ حولها. وإنّما يختلف الحساب: فالجداء يُجري 20 من عمليّات الضرب ليحفظ 4 من الأعداد، أي 5 ضعف العمل للجواب نفسه. اضغط شكل GPT-2 فيصير 38,597,376 عمليّة ضرب مقابل 768 عددًا. والبحث لا يُجري منها شيئًا، والتدرّج لا يبلغ في الحالتين إلّا الصفّ المختار. والقراءة الأخيرة هي الشقّ الآخر من الدرس: فخلط المتتالية يغيّر 0 من المتّجهات. فالصفوف تسافر مع رموزها، فترى الحسابات التالية المجموعة المتعدّدة نفسها من المتّجهات أيًّا كان الترتيب، وعلى الموضع أن يُضاف قصدًا لا أن يُرجى.
وعلى مقياس GPT-2 تكون المصفوفة - أي 38,597,376 بارامتراً
في طبقة التضمين وحدها، قبل وجود أي كتلة محوّل. ويلاحظ راشكا أيضاً أن معمارية
GPT-2 الأصلية تعيد استخدام هذه الأوزان في طبقة خرجها، وهي حيلة تُسمّى ربط
الأوزان؛ ولكلا التنسورين الشكل [50257, 768].
هـ. المعلومات التي أتلفناها للتوّ
يربط خط المعالجة حتى الآن كل وحدة بمتجه يعتمد فقط على أي وحدة هي. ويصف راشكا هذا التضمين بأنه حتمي ومستقل عن الموضع، وهو أمر جيد لقابلية إعادة الإنتاج - لكنه يعني أن «الكلب يعضّ الرجل» و«الرجل يعضّ الكلب» ينتجان مجموعة المتجهات نفسها.
وفي العادة كانت المعمارية ستستعيد الترتيب. لكنها لا تفعل هنا: فكما يلاحظ راشكا، آلية الانتباه الذاتي نفسها لا تعبأ بالموضع. إذ يحسب الانتباه متوسطاً مرجّحاً على المواضع، والمتوسط لا يبالي بالترتيب. ولن يلاحظ شيءٌ لاحق هذه الخسارة، فيجب حقن الموضع عن عمد.
والعلاج تضمين ثانٍ يُضاف إلى الأول:
ويصف راشكا فئتين عريضتين:
- التضمينات الموضعية المطلقة، المربوطة بمواضع بعينها - إذ يحصل كل موضع في المتتالية على تضمينه الفريد، يُضاف إلى تضمين تلك الوحدة لينقل موقعها الدقيق.
- التضمينات الموضعية النسبية، التي ترمّز مقدار تباعد الوحدات بدل موقع كلٍّ منها.
ويلاحظ أن الاختيار يتوقّف على التطبيق والبيانات، ويسجّل حقيقة محدّدة تستحق الوضوح: نماذج GPT من OpenAI تستخدم تضمينات موضعية مطلقة تُحسَّن أثناء التدريب، لا ثابتة أو محدّدة سلفاً كالترميزات الموضعية في ورقة المحوّل الأصلية. فمتجهات الموضع بارامترات مُتعلَّمة لا صيغة.
جمع، لا سَلسَلة. يُضاف متجه الموضع إلى متجه الوحدة، فيشغل الاثنان الأبعاد نفسها بدل تكديسهما في متجه أطول. ومن ثم على الطبقة التي تقرأه أن تفكّ «أي وحدة» عن «أي موضع» من متجه مجموع واحد - وهي تستطيع، لأن التضمينين مُتعلَّمان معاً ويستطيعان تنظيم نفسيهما ليصير المجموع قابلاً للفصل.
و. خط المعالجة كاملاً
وللتنسور النهائي الشكل (الدفعة، طول المتتالية، بُعد التضمين)، وهذا ما تستهلكه كتلة المحوّل. واثنان من الأسهم الأربعة - مصفوفة التضمين والتضمينات الموضعية - مُتعلَّمان، ما يعني أن تمثيل اللغة الذي يعمل به النموذج ليس مصمَّماً سلفاً. بل يُكتشَف أثناء التدريب، إلى جانب كل شيء آخر.
الخلاصات الأساسية
- تربط المفردات وحدات فريدة بـمعرّفات صحيحة؛ والخريطة العكسية تعيد خرج النموذج نصاً.
- لا يحتاج BPE إلى وحدة
<|unk|>أبداً: فالكلمات المجهولة تتفكّك إلى وحدات فرعية أو محارف مفردة، فتصير أي سلسلة قابلة للترميز. ويستخدم GPT-2/3 مفردات من 50,257 مدخلة مع<|endoftext|>عند المعرّف 50256. - المعرّفات تسميات لا كميات - وطبقة التضمين تحوّل كلاً منها إلى متجه مُتعلَّم باسترجاع صف من مصفوفة أوزان.
- ذلك الاسترجاع يمكن البرهان على أنه أحادي × مصفوفة، ولهذا تتدرّب مصفوفة التضمين بالانتشار العكسي كأي طبقة أخرى.
- تضمين الوحدات في GPT-2 وحده 38.6 مليون بارامتر ()، وتعيد المعمارية الأصلية استخدامه في طبقة الخرج.
- التضمينات مستقلة عن الموضع والانتباه الذاتي لا يعبأ بالموضع، ولذا تُضاف تضمينات موضعية لاستعادة الترتيب - مطلقة في حالة GPT، ومُتعلَّمة أثناء التدريب لا ثابتة.
ما التالي
صار لدينا الآن تنسور يحمل المحتوى والموضع معاً. وما يستهلكه كومة من كتل المحوّل، وآليتها المركزية تُطوَّر في الانتباه والانتباه الذاتي وتُركَّب في معمارية كاملة في معمارية المحوّل.
المراجع والقراءات الإضافية
- Sebastian Raschka, Build a Large Language Model (From Scratch), Manning, 2025· مكتبة مراجع Kudos AI
تُذكر الأعمال المحمية بحقوق النشر للمرجعية فقط ولا تُستضاف هنا؛ يرجى الرجوع إلى الناشر للوصول إليها.