NLP : Pipeline de Classification de Texte
“Apprendre aux machines à lire — du sac de mots aux transformers”
Pipeline NLP complet : tokenisation, vectorisation TF-IDF, classification (NB/LR/SVM), évaluation F1, embeddings de mots et sentence-transformers.
Prérequis
Concepts Couverts
∑Formules Clés
TF-IDF
Fréquence du terme × inverse de la fréquence du document — élevé quand le mot est fréquent dans le doc mais rare globalement
Similarité Cosinus
Mesure de similarité des documents indépendante de la longueur du document
Perplexité
Qualité du modèle de langage — perplexité plus faible = meilleure prédiction du prochain mot
▶Simulation Interactive
La Révolution du NLP
En 2017, GPT-3 n'existait pas. En 2023, les LLMs écrivent du code, réussissent des examens médicaux et résument des documents juridiques. La fondation de tout le NLP — des filtres anti-spam bag-of-words aux LLMs transformeurs — est la même : représenter le texte numériquement pour que les modèles puissent le traiter. Comprendre le pipeline NLP classique (tokeniser → vectoriser → modèle → évaluer) vous donne le modèle mental pour comprendre pourquoi les transformeurs modernes fonctionnent et en quoi ils diffèrent.
Le rapport technique GPT-4 montre que le modèle entraîné sur 100× plus de texte que GPT-3 bénéficie encore du prétraitement NLP classique (tokenisation, déduplication, filtrage de la qualité des données). Les fondamentaux comptent à l'échelle.
Le Pipeline NLP : 5 Étapes
Le texte brut n'est que des octets Unicode — sans signification pour un modèle. Le pipeline NLP le convertit en nombres : Tokenisation (diviser le texte en tokens — mots, sous-mots ou caractères), Construction du vocabulaire (assigner un entier ID à chaque token unique), Vectorisation (convertir les IDs de tokens en représentations numériques denses — one-hot, TF-IDF, ou word embeddings), Entraînement du modèle (classer, regrouper, générer ou récupérer), Évaluation (précision, F1, BLEU, perplexité selon la tâche).
TF-IDF : Le Vectoriseur Classique
Fréquence du Terme (TF) : à quelle fréquence le mot t apparaît-il dans le document d ? Fréquence du Document (DF) : combien de documents contiennent t ? IDF inverse : log(N/DFt) — les mots qui apparaissent dans chaque document (le, est, de) obtiennent un IDF presque nul. Les mots spécifiques à quelques documents obtiennent un IDF élevé. TF-IDF = TF × IDF. Le résultat est une matrice creuse de forme (n_docs × vocab_size) où chaque entrée reflète combien ce mot est caractéristique de ce document.
Du Sac de Mots aux Embeddings de Mots
TF-IDF traite chaque mot comme indépendant — 'banque' et 'établissement financier' sont complètement non liés. Les word embeddings (Word2Vec, GloVe, FastText) apprennent des représentations vectorielles denses où les mots similaires sont proches dans l'espace vectoriel : roi - homme + femme ≈ reine. Ces vecteurs de 300 dimensions capturent des relations sémantiques que TF-IDF ne peut pas. Les transformeurs de phrases modernes (SBERT, all-MiniLM-L6-v2) produisent des vecteurs de longueur fixe pour des phrases entières, permettant la recherche sémantique, le clustering et la classification zéro-shot.
Pour la classification de texte en production en 2025 : commencer par TF-IDF + LogisticRegression comme référence, essayer ensuite les embeddings sentence-transformers + classificateur, puis affiner un BERT/DistilBERT pré-entraîné si la qualité est insuffisante.
Pipeline de Classification de Texte
Mise en minuscules, suppression de la ponctuation, suppression optionnelle des mots vides
Tokenisation : word_tokenize ou sous-mot (BPE/WordPiece pour les transformeurs)
Vectorisation : CountVectorizer → TfidfVectorizer → word2vec → embeddings BERT
Modèle : MultinomialNB (référence rapide), LogisticRegression (linéaire fort), SVM, BERT affiné
Évaluation : macro-F1 pour les classes équilibrées, F1-pondéré pour les déséquilibrées, AUC-ROC
Analyse d'erreurs : inspecter les échantillons mal classifiés → améliorer les caractéristiques ou l'étiquetage
Pipeline de Classification NLP Complet
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 class="tok-comment"># ── Données texte dclass="tok-str">'exemple ──────────────────────────────────────────── corpus = [ "algorithmes apprentissage automatique python science données", "réseau neuronal deep learning pytorch tensorflow", "traitement langage naturel classification texte bert", "vision par ordinateur reconnaissance image convolutif", "apprentissage par renforcement récompense politique agent", "prétraitement données ingénierie caractéristiques pipeline", ] * class="tok-num">40 class="tok-comment"># class="tok-num">240 exemples, class="tok-num">6 classes X_texte = corpus y = np.array(list(range(class="tok-num">6)) * class="tok-num">40) X_train, X_test, y_train, y_test = train_test_split( X_texte, y, test_size=class="tok-num">0.2, stratify=y, random_state=class="tok-num">42) idx_train = np.arange(len(X_train)) idx_test = np.arange(len(X_test)) class="tok-comment"># ── Référence : TF-IDF + Régression Logistique ──────────────────── pipeline_lr = Pipeline([ ('tfidfclass="tok-str">', TfidfVectorizer( ngram_range=(class="tok-num">1,class="tok-num">2), max_features=100_000, sublinear_tf=True, class="tok-comment"># log(class="tok-num">1+tf) amortit les hautes fréquences strip_accents='unicodeclass="tok-str">', analyzer='wordclass="tok-str">', token_pattern=r'\w{class="tok-num">2,}class="tok-str">', class="tok-comment"># ignorer les tokens d'un caractère min_df=class="tok-num">2, class="tok-comment"># ignorer les mots très rares )), (class="tok-str">'clf', LogisticRegression(C=class="tok-num">1.0, max_iter=class="tok-num">1000, class_weight=class="tok-str">'balanced')), ]) class="tok-comment"># ── Alternative : TF-IDF + LinearSVC (rapide, excellent pour le texte) ── pipeline_svm = Pipeline([ (class="tok-str">'tfidf', TfidfVectorizer(ngram_range=(class="tok-num">1,class="tok-num">2), max_features=100_000, sublinear_tf=True)), (class="tok-str">'clf', LinearSVC(C=class="tok-num">0.5, class_weight=class="tok-str">'balanced', max_iter=class="tok-num">2000)), ]) class="tok-comment"># ── Évaluer les deux avec validation croisée ───────────────────── for nom, pipeline in [(class="tok-str">'LR', pipeline_lr), (class="tok-str">'SVM', pipeline_svm)]: scores = cross_val_score(pipeline, X_texte, y, cv=class="tok-num">5, scoring=class="tok-str">'f1_macro', n_jobs=-class="tok-num">1) print(fclass="tok-str">"{nom}: macro-F1 = {scores.mean():.3f} ± {scores.std():.3f}") class="tok-comment"># ── Approche moderne : embeddings de phrases ───────────────────── from sentence_transformers import SentenceTransformer from sklearn.linear_model import LogisticRegression encodeur = SentenceTransformer(class="tok-str">'all-MiniLM-L6-v2') X_emb = encodeur.encode(X_texte, batch_size=class="tok-num">256, show_progress_bar=True) clf = LogisticRegression(max_iter=class="tok-num">1000).fit(X_emb[idx_train], y[idx_train]) print(fclass="tok-str">"Précision Sentence-BERT : {clf.score(X_emb[idx_test], y[idx_test]):.3f}")
Pièges du Pipeline NLP
Ajuster TfidfVectorizer sur l'ensemble de données complet fuit le vocabulaire de test dans l'entraînement — les valeurs IDF sont calculées avec les fréquences de documents de test. Toujours ajuster dans un Pipeline appliqué uniquement aux données d'entraînement. Deuxième : utiliser max_features sans min_df — les mots très rares sont bruiteux mais inclus. Définir min_df=2 ou min_df=0,001. Troisième : ignorer le déséquilibre des classes — une classe majoritaire à 95% rend la précision inutile ; utiliser macro-F1 et class_weight='balanced'. Quatrième : ne pas stemmer/lemmatiser pour les petits ensembles de données — 'courir', 'courant', 'couru' devraient mapper vers la même caractéristique.
Pour le texte non anglais, utiliser des tokeniseurs spécifiques à la langue et des modèles multilingues pré-entraînés (mBERT, XLM-RoBERTa) plutôt que des pipelines centrés sur l'anglais. De nombreuses bibliothèques NLP utilisent silencieusement le comportement anglophone par défaut.
?Vérification des Connaissances
La progression est sauvegardée dans votre navigateur — aucun compte requis.
Besoin d'un ingénieur IA ou data scientist ?
Je conçois des modèles ML sur mesure, des agents IA, de la vision par ordinateur et de l'automatisation — de l'idée à la production.