معالجة اللغة الطبيعية: خط أنابيب تصنيف النصوص
“تعليم الآلات القراءة — من حقيبة الكلمات إلى المحولات”
خط أنابيب NLP الكلاسيكي: التجزئة وTF-IDF والتصنيف (بايز/LR/SVM) وتضمينات الكلمات ومحولات الجمل للبحث الدلالي.
المتطلبات الأساسية
المفاهيم المغطاة
∑الصيغ الرئيسية
TF-IDF
تكرار المصطلح × عكس تكرار الوثيقة — مرتفع عند تكرار الكلمة في الوثيقة لكن ندرتها عالمياً
تشابه جيب التمام
مقياس تشابه الوثائق مستقل عن طول الوثيقة
الحيرة
جودة نموذج اللغة — حيرة أقل = تنبؤ أفضل بالكلمة التالية
▶محاكاة تفاعلية
ثورة معالجة اللغات الطبيعية
في 2017، لم يكن GPT-3 موجوداً. في 2023، تكتب نماذج LLM الكود وتجتاز الامتحانات الطبية وتُلخِّص الوثائق القانونية. أساس كل معالجة للغات الطبيعية — من فلاتر البريد المزعج bag-of-words إلى LLMs المحولات — واحد: تمثيل النص عددياً حتى تتمكن النماذج من معالجته. فهم خط أنابيب NLP الكلاسيكي (تجزئة ← تجهيز ← نموذج ← تقييم) يمنحك النموذج الذهني لفهم سبب نجاح المحولات الحديثة.
يُظهر التقرير التقني لـGPT-4 أن النموذج المدرَّب على 100× بيانات أكثر من GPT-3 لا يزال يستفيد من المعالجة المسبقة الكلاسيكية لـNLP (التجزئة، إزالة التكرار، تصفية جودة البيانات). الأساسيات مهمة على نطاق واسع.
خط أنابيب NLP: 5 مراحل
النص الخام مجرد بايتات Unicode — بلا معنى لنموذج. يحوّله خط أنابيب NLP إلى أرقام: التجزئة (تقسيم النص إلى رموز — كلمات أو أجزاء كلمات أو أحرف)، بناء المفردات (تعيين معرف صحيح لكل رمز فريد)، التجهيز (تحويل معرفات الرموز لتمثيلات عددية كثيفة — one-hot أو TF-IDF أو تضمينات كلمات)، تدريب النموذج (تصنيف أو تجميع أو توليد أو استرجاع)، التقييم (الدقة، F1، BLEU، الحيرة حسب المهمة).
TF-IDF: المتجهي الكلاسيكي
تكرار المصطلح (TF): كم مرة تظهر الكلمة t في الوثيقة d؟ تكرار الوثيقة (DF): كم وثيقة تحتوي t؟ IDF العكسي: log(N/DFt) — الكلمات التي تظهر في كل وثيقة (الـ، من، في) تحصل على IDF قريب من الصفر. الكلمات الخاصة بوثائق قليلة تحصل على IDF مرتفع. TF-IDF = TF × IDF. النتيجة مصفوفة متفرقة بشكل (n_docs × حجم_المفردات) حيث تعكس كل خلية مدى خصوصية تلك الكلمة لتلك الوثيقة.
من حقيبة الكلمات إلى التضمينات الكلمية
يتعامل TF-IDF مع كل كلمة كمستقلة — 'بنك' و'مؤسسة مالية' غير مرتبطتان تماماً. تتعلم تضمينات الكلمات (Word2Vec، GloVe، FastText) تمثيلات متجهية كثيفة حيث الكلمات المتشابهة قريبة في الفضاء المتجهي: ملك - رجل + امرأة ≈ ملكة. تلتقط هذه المتجهات الـ300-بُعدية علاقات دلالية لا يستطيع TF-IDF التقاطها. تُنتج محولات الجمل الحديثة (SBERT، all-MiniLM-L6-v2) متجهات بطول ثابت لجمل كاملة تُتيح البحث الدلالي والتجميع والتصنيف الصفري.
لتصنيف النصوص في الإنتاج في 2025: ابدأ بـTF-IDF + LogisticRegression كخط أساس، ثم جرّب تضمينات sentence-transformers + مصنِّف، ثم اضبط BERT/DistilBERT مدرَّباً مسبقاً إذا كانت الجودة لا تزال غير كافية.
خط أنابيب تصنيف النصوص
التحويل لأحرف صغيرة، إزالة علامات الترقيم، إزالة كلمات التوقف اختيارياً
التجزئة: word_tokenize أو جزء كلمة (BPE/WordPiece للمحولات)
التجهيز: CountVectorizer ← TfidfVectorizer ← word2vec ← تضمينات BERT
النموذج: MultinomialNB (خط أساس سريع)، LogisticRegression (خطي قوي)، SVM، BERT المضبوط
التقييم: macro-F1 للفئات المتوازنة، weighted-F1 للغير متوازنة، AUC-ROC
تحليل الأخطاء: فحص العينات المُصنَّفة خطأً ← تحسين الميزات أو التسمية
خط أنابيب تصنيف NLP الكامل
from sklearn.pipeline import Pipeline from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.linear_model import LogisticRegression from sklearn.naive_bayes import ComplementNB from sklearn.svm import LinearSVC from sklearn.model_selection import cross_val_score, train_test_split from sklearn.metrics import classification_report import numpy as np # ── Sample text data ─────────────────────────────────────────────────── corpus = [ "machine learning algorithms data science python", "neural network deep learning pytorch tensorflow", "natural language processing text classification bert", "computer vision image recognition convolutional", "reinforcement learning reward policy agent", "data preprocessing feature engineering pipeline", ] * 40 # 240 samples, 6 classes labels = list(range(6)) * 40 X_text = corpus y = np.array(labels) X_train, X_test, y_train, y_test = train_test_split( X_text, y, test_size=0.2, stratify=y, random_state=42) # indices for sentence-transformer section train_idx = np.arange(len(X_train)) test_idx = np.arange(len(X_test)) # ── Baseline: TF-IDF + Logistic Regression ──────────────────────── pipe_lr = Pipeline([ ('tfidf', TfidfVectorizer( ngram_range=(1,2), max_features=100_000, sublinear_tf=True, # log(1+tf) dampens high frequencies strip_accents='unicode', analyzer='word', token_pattern=r'\w{2,}', # ignore single-char tokens min_df=2, # ignore very rare words )), ('clf', LogisticRegression(C=1.0, max_iter=1000, class_weight='balanced')), ]) # ── Alternative: TF-IDF + LinearSVC (fast, great for text) ──────── pipe_svm = Pipeline([ ('tfidf', TfidfVectorizer(ngram_range=(1,2), max_features=100_000, sublinear_tf=True)), ('clf', LinearSVC(C=0.5, class_weight='balanced', max_iter=2000)), ]) # ── Evaluate both with cross-validation ─────────────────────────── for name, pipe in [('LR', pipe_lr), ('SVM', pipe_svm)]: scores = cross_val_score(pipe, X_text, y, cv=5, scoring='f1_macro', n_jobs=-1) print(f"{name}: macro-F1 = {scores.mean():.3f} ± {scores.std():.3f}") # ── Modern approach: sentence embeddings ────────────────────────── # pip install sentence-transformers from sentence_transformers import SentenceTransformer from sklearn.linear_model import LogisticRegression encoder = SentenceTransformer('all-MiniLM-L6-v2') X_emb = encoder.encode(X_text, batch_size=256, show_progress_bar=True) clf = LogisticRegression(max_iter=1000).fit(X_emb[train_idx], y[train_idx]) print(f"Sentence-BERT accuracy: {clf.score(X_emb[test_idx], y[test_idx]):.3f}")
مزالق خط أنابيب NLP
ضبط TfidfVectorizer على مجموعة البيانات الكاملة يُسرِّب مفردات الاختبار للتدريب — قيم IDF تُحسب مع تكرارات وثائق الاختبار. دائماً اضبط داخل Pipeline مُطبَّق على بيانات التدريب فحسب. الثاني: استخدام max_features بلا min_df — الكلمات النادرة جداً صاخبة لكن مُدرَجة. عيِّن min_df=2 أو min_df=0.001. الثالث: تجاهل عدم توازن الفئات — فئة أغلبية بنسبة 95% تجعل الدقة عديمة الفائدة؛ استخدم macro-F1 وclass_weight='balanced'. الرابع: عدم التجذير/التأصيل للمجموعات الصغيرة — 'يركض'، 'ركض'، 'راكض' يجب أن تُعيَّن لنفس الميزة.
للنصوص غير الإنجليزية، استخدم مجزِّئات خاصة باللغة ونماذج متعددة اللغات مدرَّبة مسبقاً (mBERT، XLM-RoBERTa) بدلاً من خطوط الأنابيب المتمركزة حول الإنجليزية. كثير من مكتبات NLP تستخدم بصمت سلوك الإنجليزية افتراضياً.
?اختبار المعرفة
يتم حفظ التقدم في متصفحك — لا حاجة لحساب.
Need a Data Scientist or AI Engineer?
I build custom ML models, RAG chatbots, data pipelines, and production APIs — from analysis to deployment.