تمثيل النص على هيئة موترات
تصنيف النصوص
بأول جزء من هالقسم، بنركز على مهمة تصنيف النصوص. بنستخدم مجموعة بيانات AG News، وفيها مقالات إخبارية مثل هالمثال:
- الفئة: العلوم/التقنية
- العنوان: شركة من كنتاكي تفوز بمنحة لدراسة الببتيدات (AP)
- المتن: AP - شركة أسسها باحث كيمياء بجامعة لويفيل فازت بمنحة لتطوير...
هدفنا إننا نصنّف الخبر ضمن فئة من الفئات اعتمادًا على نصه.
تمثيل النص
إذا بغينا نحل مهام معالجة اللغة الطبيعية (NLP) بالشبكات العصبية، نحتاج طريقة نمثّل فيها النص على هيئة موترات. الحاسب أصلًا يمثّل حروف النص بأرقام تربطها بالخط اللي يطلع على الشاشة، باستخدام ترميزات مثل ASCII أو UTF-8.
وصف الشكل: مخطط يبيّن ربط الحرف بتمثيله في ASCII وبالتمثيل الثنائي
مصدر الصورة
حنا نفهم وش يمثّل كل حرف، وكيف تجتمع الحروف وتكوّن كلمات الجملة. لكن الحاسب ما عنده هالفهم من نفسه؛ الشبكة العصبية لازم تتعلم المعنى وقت التدريب.
وعشان كذا، عندنا أكثر من طريقة لتمثيل النص:
- التمثيل على مستوى الحرف: نتعامل مع كل حرف كأنه رقم. لو كان عندنا C حرف مختلف في المتن النصي، فكلمة Hello بيكون تمثيلها موتر حجمه 5xC. كل حرف يقابله عمود في الموتر ضمن ترميز one-hot.
- التمثيل على مستوى الكلمة: نسوي مفردات تضم كل كلمات المتن النصي، ثم نمثّل الكلمات بترميز one-hot. هالطريقة أفضل شوي؛ لأن الحرف لحاله غالبًا ما يحمل معنى كثير، واستخدام مفهوم دلالي أعلى — وهو الكلمة — يسهّل المهمة على الشبكة العصبية. لكن حجم المفردات الكبير يخلينا نتعامل مع موترات متناثرة وعالية الأبعاد.
أيًا كان التمثيل، أول شيء نحوّل النص إلى تسلسل من الرموز؛ والرمز ممكن يكون حرفًا، أو كلمة، وأحيانًا جزءًا من كلمة. بعدها نحوّل الرمز إلى رقم، غالبًا بالرجوع إلى المفردات، ونقدر نمرّر هالرقم للشبكة العصبية بترميز one-hot.
N-Grams
في اللغة الطبيعية، ما نعرف المعنى الدقيق للكلمة إلا من سياقها. مثلًا، معنى neural network يختلف كليًا عن fishing network. ومن الطرق اللي تراعي هالشي إننا نبني النموذج على أزواج الكلمات، ونعدّ كل زوج رمزًا مستقلًا في المفردات. بهالطريقة، الجملة I like to go fishing تتمثّل بالتسلسل: I like، وlike to، وto go، وgo fishing. المشكلة إن حجم المفردات يكبر كثير، وإن تركيبات مثل go fishing وgo shopping تصير رموزًا مختلفة ما تشترك بأي تشابه دلالي، مع إن الفعل نفسه موجود فيها.
أحيانًا نستخدم tri-grams، يعني تركيبات من ثلاث كلمات. وعشان كذا، يسمّون هالأسلوب غالبًا n-grams. ونقدر بعد نستخدم n-grams مع التمثيل على مستوى الحرف؛ وقتها تقابل تقريبًا مقاطع صوتية مختلفة.
نموذج حقيبة الكلمات (Bag-of-Words) وTF-IDF
في مهام مثل تصنيف النصوص، نحتاج نمثّل النص بمتجه حجمه ثابت عشان يكون مدخلًا للمصنّف الكثيف النهائي. من أبسط الطرق إننا ندمج تمثيل كل كلمة، مثلًا بجمع التمثيلات. وإذا جمعنا ترميزات one-hot لكل الكلمات، بيطلع لنا متجه تكرارات يوضّح كم مرة ظهرت كل كلمة داخل النص. هالتمثيل يسمّى نموذج حقيبة الكلمات (BoW).
وصف الشكل: حُذف الأصل لأن حقوق إعادة استخدامه غير موثّقة.
نموذج BoW يوضّح وش الكلمات اللي ظهرت بالنص وكم مرة ظهرت، وهذا فعلًا ممكن يعطينا فكرة زينة عن موضوع النص. مثلًا، المقال السياسي غالبًا فيه كلمات مثل president وcountry، بينما المنشور العلمي ممكن يحتوي collider وdiscovered. لذلك، تكرار الكلمات يكون في حالات كثيرة مؤشرًا مفيدًا على محتوى النص.
مشكلة BoW إن بعض الكلمات الشائعة، مثل and وis، تظهر في أغلب النصوص وتكون تكراراتها الأعلى؛ وهالشي ممكن يحجب الكلمات المهمة فعلًا. نقدر نقلّل وزن الكلمات الشائعة إذا حسبنا بعد معدل ظهورها في كامل مجموعة المستندات. هذي هي الفكرة الأساسية وراء TF-IDF، وبنفصّلها أكثر في دفاتر هالدرس.
لكن ولا طريقة من هالطرق تستوعب دلالة النص بالكامل. عشان نفهم المعنى نحتاج نماذج شبكات عصبية أقوى، وبنناقشها لاحقًا في هالقسم.
✍️ تمارين: تمثيل النص
كملوا التعلّم في الدفترين هذولا:
الخلاصة
إلى الحين شفنا تقنيات تعطي الكلمات أوزانًا حسب تكرارها، لكنها ما تقدر تمثّل المعنى أو الترتيب. وكما قال اللغوي المعروف J. R. Firth سنة 1935: «المعنى الكامل للكلمة يعتمد دومًا على السياق، وما يصح نأخذ دراسة للمعنى بجدية إذا فصلناها عن سياقها». قدّام في الدورة بنتعلم كيف نلتقط معلومات السياق من النص باستخدام نمذجة اللغة.
🚀 التحدي
جرّبوا تمارين ثانية باستخدام نموذج حقيبة الكلمات ونماذج بيانات مختلفة. ممكن تستلهمون أفكارًا من هذي المسابقة على Kaggle.
المراجعة والدراسة الذاتية
طبّقوا مهاراتكم في تضمين النص وتقنيات نموذج حقيبة الكلمات على Microsoft Learn.