الوحدة 6 — متغيّرات النصّ: حقيبة الكلمات و n-grams
تعليقات العملاء، وأوصاف المنتجات، وتذاكر الدعم: النصّ في كلّ مكان، ولا يستهلكه أيّ نموذج جدوليّ مباشرةً. وتقدّم هذه الوحدة التمثيلات التقليدية، وهي تبقى خطوط أساس ممتازة — يصعب التغلّب عليها غالبًا، وهي سريعة وقابلة للتفسير دائمًا، بخلاف مقاربات التضمين التي ستتناولها دورات معالجة اللغة.
التسوية أوّلًا
قبل أيّ تمثيل متجهي، تُقلَّص التغيّرات التي لا تضيف شيئًا. فـ«ممتاز» و«مُمْتاز» و«ممتاز!» تدلّ على المعنى نفسه، وينبغي أن تصير كذلك في البيانات.
والعمليات المعتادة: توحيد حالة الأحرف، وإزالة الترقيم، وتسوية المسافات. أمّا اختياران فيقتضيان قرارًا مدروسًا.
الكلمات الوقفية («في»، «من»، «و») تزحم من دون تمييز، وتُحذَف عادةً. لكن ليس دائمًا: ففي تحليل المشاعر تكون أداة النفي «لا» حاسمة، وحذفها يقلب معنى الجملة. فقائمة الكلمات الوقفية تُختار حسب المهمّة، لا بحكم افتراضيّ أعمى.
التجذير والردّ إلى الأصل يُرجعان الصور المتصرّفة إلى أساس مشترك، حتّى تُحصى «يكتب» و«كتب» و«كتابة» معًا. والتجذير يقتطع اقتطاعًا خشنًا، أمّا الردّ إلى الأصل فيستخدم قاموسًا ويُنتج نتيجة صحيحة لغويًّا؛ وهو أبطأ وأوثق. وللعربية خصوصية إضافية: كثافة الاشتقاق وكثرة الصور تجعلان الردّ إلى الأصل أشدّ نفعًا فيها منه في الإنجليزية.
حقيبة الكلمات
فكرة حقيبة الكلمات هي عدّ الورود: فتصير كلّ كلمة من المفردات عمودًا، وكلّ مستند صفًّا من الأعداد. فيُفقَد ترتيب الكلمات — ومن هنا الاسم — لكن تُحصَّل مصفوفة عددية قابلة للاستخدام.
from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer(
lowercase=True,
max_features=5000, # يحفظ أكثر 5000 كلمة ورودًا فقط
min_df=5, # يتجاهل الكلمات الواردة في أقل من 5 مستندات
max_df=0.8, # يتجاهل الكلمات الحاضرة في أكثر من 80 % من المستندات
)
X = vec.fit_transform(النصوص)
وتقوم وسائط الترشيح الثلاثة بمعظم العمل. فـ min_df يُقصي أخطاء الكتابة والمصطلحات النادرة إلى حدّ يمنع تعلّمها؛ وmax_df يُقصي الكلمات الحاضرة في كلّ مكان، فهي غير مميّزة؛ وmax_features يحدّ البعد. ومن دونها تبلغ المصفوفة عشرات الآلاف من الأعمدة الفارغة تقريبًا.
TF-IDF: الترجيح بالنُّدرة
للعدّ الخامّ عيب: فكلمة شائعة في المستندات كلّها تثقل من دون أن تميّز شيئًا. ويصحّح ترجيح TF-IDF ذلك بجمع مقدارَين: تكرار المصطلح في المستند (TF)، ومقلوب تكراره المستندي (IDF) أي نُدرته في المتن.
فالكلمة التي تتكرّر كثيرًا في هذا المستند وقليلًا في غيره تنال وزنًا مرتفعًا: وهي بعينها كلمة مميّزة. وعلى العكس، تنهار أوزان الكلمة الحاضرة في كلّ مكان.
from sklearn.feature_extraction.text import TfidfVectorizer
X = TfidfVectorizer(max_features=5000, min_df=5, ngram_range=(1, 2)).fit_transform(النصوص)
و TF-IDF هو الخيار الافتراضي لتصنيف النصوص، ويتجاوز العدّ الخامّ دائمًا تقريبًا.
n-grams: استعادة شيء من الترتيب
تتجاهل حقيبة الكلمات الترتيب، وهذا يطرح مشكلة حقيقية: فـ«ليس جيّدًا» و«جيّد» يتقاسمان كلمة «جيّد». وتجيب n-grams بعدّ متتاليات من كلمات متجاورة. فمع ngram_range=(1, 2) تُعدّ الكلمات المفردة وكذلك الأزواج: فيصير «ليس جيّدًا» متغيّرًا قائمًا بذاته مختلفًا عن «جيّد».
والثمن تضخّمُ المفردات، ومن هنا أهمّية min_df وmax_features. وفي الممارسة تعطي الأزواج عائدًا واضحًا، أمّا الثلاثيات فقليلًا ما تكفي لتبرير البعد الإضافي.
المتغيّرات الوصفية المنسيّة كثيرًا
قبل التمثيل المتجهي، تُحسَب بضعة متغيّرات بسيطة في سطر واحد وتظهر تنبّئيّتها العالية في كثير من الأحيان:
df["عدد_المحارف"] = df["النص"].str.len()
df["عدد_الكلمات"] = df["النص"].str.split().str.len()
df["عدد_التعجب"] = df["النص"].str.count("!")
df["عدد_الاستفهام"] = df["النص"].str.count("؟")
فطول التعليق أو عدد علامات التعجّب يحمل إشارة حقيقية — عن السخط، وعن كون الرسالة غير مرغوبة. وهذه المتغيّرات لا تكلّف شيئًا تقريبًا وتُضاف إلى المتغيّرات الجدولية القائمة، حيث يصعب دمج مصفوفة TF-IDF بخمسة آلاف عمود.
تعامل حقيبة الكلمات و TF-IDF الكلمات كرموز مستقلّة: فـ«سيّارة» و«مركبة» يبقيان عمودَين لا صلة بين هما. أمّا تمثيلات التضمين والمحوّلات، وهي موضوع الدورتَين 12 و13، فتلتقط هذا القرب الدلاليّ. لكن ابدأ من هنا: ففي المتون المتواضعة الحجم ولمهمّة تصنيف بسيطة، يشكّل TF-IDF مع الانحدار اللوجستي خطّ أساس سريعًا قابلًا للتفسير، وقريبًا جدًّا من المقاربات الثقيلة في كثير من الأحيان.
الخلاصة
- سوِّ النصّ أوّلًا (حالة الأحرف والترقيم)؛ وتُقرَّر الكلمات الوقفية والردّ إلى الأصل حسب المهمّة، وقد يكون النفي جوهريًّا.
- حقيبة الكلمات تعدّ الورود وتفقد الترتيب؛ و
min_dfوmax_dfوmax_featuresتضبط البعد. - TF-IDF يرجّح بالنُّدرة في المتن ويُبرز الكلمات المميّزة: وهو الخيار الافتراضي.
- n-grams تستعيد جزءًا من الترتيب («ليس جيّدًا»)؛ والمتغيّرات الوصفية البسيطة زهيدة الكلفة وتنبّئيّة غالبًا.
الوحدة التالية: متغيّرات التجميع والنوافذ الزمنية، حيث تُبنى المعلومة من صفوف عدّة معًا.