معالجة اللغات الطبيعية متقدم · Advanced 12 دقيقة

تصنيف النصوص

Text Classification

خط عمل كامل لتصنيف المستندات: البيانات، والتمثيل، والنموذج، والتقييم، والمقارنة بين الأساليب.

تقدّمك في المسار0%

أنواع المسائل

النوعالمخرجالتنشيط/الخسارة
ثنائيفئة من اثنتينSigmoid + BCE
متعدد الفئاتفئة واحدة من KSoftmax + Cross-Entropy
متعدد التسمياتمجموعة فئاتSigmoid لكل فئة + BCE

خط العمل

  1. تعريف الفئات بدقة وكتابة دليل تسمية.
  2. جمع البيانات وتسميتها وقياس اتفاق المسمّين.
  3. تقسيم البيانات (مع إزالة المكررات).
  4. خط أساس: TF-IDF + LinearSVC أو انحدار لوجستي.
  5. نموذج مدرب مسبقاً بالضبط الدقيق.
  6. تقييم ومقارنة وتحليل أخطاء.

خط الأساس

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC
from sklearn.pipeline import make_pipeline
from sklearn.metrics import classification_report

cats = ["sci.med", "sci.space", "rec.autos", "comp.graphics"]
train = fetch_20newsgroups(subset="train", categories=cats, remove=("headers", "footers", "quotes"))
test  = fetch_20newsgroups(subset="test",  categories=cats, remove=("headers", "footers", "quotes"))
clf = make_pipeline(TfidfVectorizer(ngram_range=(1, 2), min_df=2, sublinear_tf=True), LinearSVC())
clf.fit(train.data, train.target)
print(classification_report(test.target, clf.predict(test.data), target_names=test.target_names))

خيار remove يحذف الترويسات التي قد تكشف الفئة بشكل زائف، وهو مثال على تجنب الاختصارات.

التصنيف دون أمثلة

from transformers import pipeline
zsc = pipeline("zero-shot-classification", model="facebook/bart-large-mnli")
print(zsc("The new GPU doubles training speed.", candidate_labels=["technology", "sports", "health"]))

مفيد للنماذج الأولية حين لا تتوفر بيانات موسومة، لكنه أقل دقة عادة من نموذج مضبوط على بيانات المهمة. لهذا النموذج تحديداً تكون النصوص والفئات بالإنجليزية؛ للعربية اختر نموذجاً متعدد اللغات مناسباً.

اختيار النهج

الموقفالتوصية
بيانات قليلة، موارد محدودةTF-IDF + نموذج خطي
بيانات متوسطة، دقة مهمةضبط نموذج مشفر (AraBERT وأمثاله)
لا بيانات موسومةتصنيف دون أمثلة أو نموذج لغوي كبير، ثم جمع بيانات

مصطلحات الدرس

التصنيف دون أمثلة Zero-shot Classification
تصنيف النصوص إلى فئات لم يُدرب عليها النموذج صراحة، اعتماداً على فهمه العام لأسماء الفئات أو أوصافها.
التصنيف متعدد التسميات Multi-label Classification
تصنيف يمكن فيه أن ينتمي المستند إلى أكثر من فئة في الوقت نفسه.

الملخص

تصنيف النصوص يسند فئة أو أكثر لمستند، ومن أمثلته تصنيف الأخبار حسب الموضوع وتصفية الرسائل المزعجة وتوجيه طلبات الدعم. قد يكون ثنائياً أو متعدد الفئات أو متعدد التسميات. يمر خط العمل بجمع البيانات وتسميتها، والتمثيل (TF-IDF أو التضمينات أو المحوّلات)، والتدريب، والتقييم بمقاييس مناسبة. المقارنة بين خط أساس كلاسيكي ونموذج مدرب مسبقاً ضرورية لتبرير التعقيد.

أسئلة مراجعة

  1. ما الفرق بين التصنيف متعدد الفئات ومتعدد التسميات؟

    في متعدد الفئات ينتمي المستند لفئة واحدة من عدة فئات، وفي متعدد التسميات قد ينتمي لعدة فئات معاً.

  2. أي دالة تنشيط وخسارة تناسب المخرج متعدد التسميات؟

    Sigmoid لكل فئة مع Binary Cross-Entropy، بدلاً من Softmax.

المصادر والمراجع

  1. scikit-learn — Working With Text Data (tutorial)
  2. Kim (2014) Convolutional Neural Networks for Sentence Classification — arXiv
  3. Hugging Face — Text classification task guide

إكمال الدرس