Maîtriser le traitement du langage naturel : De la base aux grands modèles linguistiques (II)

Chapitre 5 : Activer la classification de texte : Utiliser des techniques traditionnelles d'apprentissage automatique

Dans ce chapitre, nous plongerons dans le fascinant domaine de la classification de texte, une tâche fondamentale en traitement du langage naturel (NLP) et en apprentissage automatique (ML). Avec l'explosion exponentielle de la quantité de données textuelles numériques, la capacité de classer précisément et efficacement les textes est devenue cruciale pour de nombreuses applications, allant de l'analyse de sentiments à la détection de courriels indésirables et à l'organisation de documents.

Nous explorerons les différentes approches de classification de texte, les concepts clés et les techniques utilisées dans ce domaine. Ensuite, nous aborderons des méthodes telles que les N-grammes, TF-IDF, Word2Vec et la modélisation de thèmes. Enfin, nous étudierons la mise en œuvre d'un système d'apprentissage automatique pour la classification de texte dans un notebook Jupyter.

Types de classification de texte

La classification de texte peut être effectuée à l'aide de trois approches principales : l'apprentissage supervisé, l'apprentissage non supervisé et l'apprentissage semi-supervisé.

  • Apprentissage supervisé : Utilise des données étiquetées pour entraîner un modèle à prédire des catégories.
  • Apprentissage non supervisé : Regroupe les documents sans données étiquetées, comme le clustering ou LDA.
  • Apprentissage semi-supervisé : Combine des données étiquetées et non étiquetées, utile lorsque les données étiquetées sont rares.

Classification basée sur les N-grammes

Les N-grammes capturent les séquences de mots, fournissant un contexte local. Ils sont utiles pour capturer des expressions comme "très bien" ou "pas bon", qui peuvent avoir des significations différentes de leurs composants isolés.

Classification basée sur TF-IDF

La méthode TF-IDF attribue des poids aux mots en fonction de leur fréquence dans un document et dans l'ensemble du corpus. Cela permet de distinguer les mots importants pour une catégorie spécifique.

Formule de base :

  • TF : Fréquence d'un mot dans un document.
  • IDF : Mesure l'importance du mot dans l'ensemble du corpus.
  • TF-IDF : Produit de TF et IDF.

Word2Vec et son application à la classification de texte

Word2Vec génère des représentations vectorielles des mots, capturant des relations sémantiques. Ces représentations, appelées embeddings, peuvent être utilisées comme caractéristiques pour la classification.

Deux architectures principales :

  • CBOW : Prédit un mot à partir de son contexte.
  • Skip-gram : Prédit le contexte à partir d'un mot cible.

Modélisation de thèmes

La modélisation de thèmes, comme LDA (Latent Dirichlet Allocation), découvre les thèmes sous-jacents dans un ensemble de documents. Elle peut améliorer la classification en identifiant des relations sémantiques.

Classification de texte avec des embeddings one-hot

Les embeddings one-hot sont simples mais limités. Ils ne capturent pas les relations entre les mots ni l'ordre des séquences.

Étapes de base :

  1. Prétraitement du texte.
  2. Création d'un vocabulaire.
  3. Encodage one-hot des mots.
  4. Construction d'une matrice de caractéristiques.
  5. Entraînement d'un modèle ML.

Évaluation des modèles

Les métriques courantes incluent l'exactitude, la précision, le rappel et le score F1. Pour les tâches multi-catégories, le F1 micro et macro peuvent être utilisés.

Surapprentissage et sous-apprentissage

Le surapprentissage se produit lorsque le modèle mémorise les données d'entraînement au lieu d'apprendre des schémas généraux. Le sous-apprentissage survient lorsque le modèle est trop simple pour capturer les schémas dans les données.

Solutions :

  • Utiliser la régularisation (L1, L2).
  • Appliquer l'early stopping.
  • Effectuer une sélection de caractéristiques.
  • Utiliser des méthodes d'ensemble.

Ajustement des hyperparamètres

L'ajustement des hyperparamètres implique de définir un espace de recherche, de choisir une stratégie de recherche (grille, aléatoire ou bayésienne), d'évaluer les modèles et de sélectionner la meilleure configuration.

Modélisation de thèmes avec LDA

LDA est un modèle probabiliste génératif. Il suppose qu'un document est une combinaison de thèmes, et chaque thème est une distribution de probabilité sur les mots.

Exemple : Un ensemble de trois documents peut révéler deux thèmes principaux, par exemple "sport" et "tcehnologie".

Exemple complet avec TF-IDF

Nous détaillons un exemple complet de classification de critiques de films en utilisant TF-IDF. Ce processus inclut le prétraitement, la création d'un vocabulaire, le calcul des TF-IDF, l'entraînement d'un classifieur et la prédiction de nouvelles critiques.

Exemple de code : Classification avec TF-IDF


import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression

# Exemple de données
documents = [
   "J'ai aimé ce film, l'acteur est excellent",
   "Ce film est ennuyeux, l'histoire est mauvaise",
   "Un film incroyable, très bien réalisé"
]
labels = [1, 0, 1]  # 1 = positif, 0 = négatif

# Vectorisation TF-IDF
vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(documents)

# Entraînement du modèle
model = LogisticRegression()
model.fit(X, labels)

# Prédiction d'une nouvelle critique
new_review = ["L'histoire est captivante, les acteurs sont bons"]
X_new = vectorizer.transform(new_review)
prediction = model.predict(X_new)
print("Prédiction : ", prediction)
   

Exemple de code : Classification avec Word2Vec


from gensim.models import Word2Vec
from sklearn.linear_model import LogisticRegression
import numpy as np

# Données d'exemple
sentences = [["j'aime", "le", "film"], ["le", "film", "est", "ennuyeux"], ["film", "incroyable", "histoire", "superbe"]]

# Entraînement de Word2Vec
model_word2vec = Word2Vec(sentences, vector_size=100, window=5, min_count=1, workers=4)

# Création d'un embedding de document
def document_vector(model, doc):
   vectors = [model.wv[word] for word in doc if word in model.wv]
   return np.mean(vectors, axis=0) if vectors else np.zeros(model.vector_size)

X = np.array([document_vector(model_word2vec, doc) for doc in sentences])
y = np.array([1, 0, 1])

# Entraînement d'un modèle de classification
clf = LogisticRegression()
clf.fit(X, y)

# Prédiction
new_doc = ["histoire", "captivante", "acteurs", "bons"]
X_new = np.array([document_vector(model_word2vec, new_doc)])
print("Prédiction : ", clf.predict(X_new))
   

Exemple de code : Modélisation de thèmes avec LDA


from sklearn.feature_extraction.text import CountVectorizer
from sklearn.decomposition import LatentDirichletAllocation

# Données d'exemple
docs = [
   "J'aime le football et les matchs",
   "Le football est passionnant",
   "J'adore mon ordinateur et sa batterie"
]

# Vectorisation
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(docs)

# Entraînement de LDA
lda = LatentDirichletAllocation(n_components=2, random_state=0)
lda.fit(X)

# Affichage des thèmes
def display_topics(model, feature_names, no_top_words):
   for idx, topic in enumerate(model.components_):
       print("Thème %d:" % (idx))
       print(" ".join([feature_names[i] for i in topic.argsort()[:-no_top_words - 1:-1]]))

no_top_words = 5
display_topics(lda, vectorizer.get_feature_names_out(), no_top_words)
   

Conclusion

Ce chapitre a couvert les bases de la classification de texte, les méthodes comme les N-grammes, TF-IDF, Word2Vec et la modélisation de thèmes avec LDA. Nous avons également vu comment concevoir un système ML complet pour la classification de texte.

Étiquettes: nlp classification de texte N-gramme TF-IDF Word2Vec

Publié le 3 octobre à 05h04