Natural Language Processing (NLP) - Fondements et applications

Auteur: Mohamed CHINY Durée necessaire pour le cours de Natural Language Processing (NLP) - Fondements et applications Niveau recommandé pour le cours de Natural Language Processing (NLP) - Fondements et applications Supports vidéo non disponibles pour ce cours Exercices de renforcement non disponibles pour ce cours Quiz disponible pour ce cours

Leçon 5: Gestion des stop words en prétraitement NLP

Toutes les leçons

Les stop words, éléments fréquents mais peu informatifs

Qu'est ce qu'un stop word?

Les stop words sont des mots très fréquents dans une langue, comme les articles (le, la, les), les prépositions (à, de, en), ou encore les conjonctions (et, mais, ou). Leur rôle principal est d’assurer la fluidité et la cohérence grammaticale d’une phrase, mais ils n’apportent généralement pas une information sémantique forte.

En traitement automatique du langage, on considère les stop words comme des éléments de structure qui relient les mots porteurs de sens. Par exemple, dans la phrase "Le produit est excellent", le mot "produit" et l’adjectif "excellent" véhiculent l’essentiel du contenu, tandis que "le" et "est" servent surtout à construire la phrase correctement.

Pourquoi supprimer les stop words en NLP?

En NLP, on supprime les stop words car ils sont très fréquents, peu informatifs et risquent de brouiller l’analyse. Leur retrait permet de réduire la taille du vocabulaire, d’accélérer le traitement et d’améliorer la précision des modèles.

En général, la suppression des stop words permet:
  • Réduction du bruit: Les stop words (articles, prépositions, pronoms) apparaissent dans presque tous les textes mais n’apportent pas de valeur sémantique forte. Les retirer permet de se concentrer sur les mots porteurs de sens.
  • Diminution de la dimensionnalité: En supprimant ces mots, on réduit le nombre de tokens uniques dans le corpus, ce qui allège les matrices de représentation et rend les calculs plus rapides.
  • Amélioration des performances: Les modèles de classification ou d’analyse de sentiments obtiennent souvent de meilleurs résultats lorsqu’ils ne sont pas perturbés par des mots fréquents mais peu discriminants.
  • Optimisation des ressources: Moins de vocabulaire signifie moins de mémoire utilisée et une meilleure efficacité dans le traitement de grands corpus.
  • Clarté analytique: Les mots restants reflètent mieux le contenu et l’intention du texte, ce qui facilite les tâches comme la recherche d’information ou l’extraction de thèmes.

Si on prend cette phrase: "Le produit est excellent et je le recommande vivement", la tokenization avec les stop words produira cette liste de tokens:
["Le", "produit", "est", "excellent", "et", "je", "le", "recommande", "vivement"]

Tandis que la suppression des stop words produira ce résultat:
["produit", "excellent", "recommande", "vivement"]
La suppression des stop words met en avant les mots clés qui traduisent l’opinion, tout en éliminant les mots grammaticaux redondants.

Il faut quand même garder en tête les points suivants:
  • La suppression des stop words n’est pas toujours souhaitable: dans certaines tâches (traduction automatique, analyse syntaxique), ils jouent un rôle important.
  • Les listes de stop words doivent être adaptées à la langue et au contexte (par exemple, en français, "ne" peut être un stop word, mais il est crucial dans l’analyse de la négation).

Illustrer les stop words en anglais, français et arabe

Commençons par énumérer quelques exemples de stop words dans différentes langues (en l'occurrence, l'anglais, le français et l'arabe) afin d’illustrer leur omniprésence:
import nltk
nltk.download('stopwords')
from nltk.corpus import stopwords
print(stopwords.words("English")[:10])
print(stopwords.words("French")[:10])
print(stopwords.words("Arabic")[:10])
La commande nltk.download('stopwords') permet de télécharger la liste de stop words disponible dans la bibliothèque NLTK. Ces listes, adaptées à plusieurs langues (anglais, français, arabe, etc.), sont indispensables pour identifier rapidement les mots très fréquents et peu informatifs lors du prétraitement des textes en NLP.

L'instruction print(stopwords.words("English")[:10]) affiche les dix premiers stop words de la liste anglaise fournie par NLTK. En effet, certaines langues renferme des dizaines (voire des centaines) de stop words. L'idée est de voir un extrait de ces mots-là et non pas toute la liste.

L'exécution du code précédent produit ces résultats:
['a', 'about', 'above', 'after', 'again', 'against', 'ain', 'all', 'am', 'an']
['au', 'aux', 'avec', 'ce', 'ces', 'dans', 'de', 'des', 'du', 'elle']
['إذ', 'إذا', 'إذما', 'إذن', 'أف', 'أقل', 'أكثر', 'ألا', 'إلا', 'التي']

Exemple pratique de suppression de stop words avec NLTK?

Voyons maintenant un exemple simple de suppression de stop words après tokenisation:
import nltk
from nltk.corpus import stopwords
from nltk import word_tokenize
stopwords=stopwords.words("English")
texte = "The product is excellent and I highly recommend it"
tokens = word_tokenize(texte)
texte_w_stopwords=[i for i in tokens if i not in stopwords]
texte_w_stopwords
On commence par importer les modules nécessaires (nltk, stopwords, word_tokenize) et charger la liste des stop words en anglais. Ensuite, on définit une phrase exemple ("The product is excellent and I highly recommend it") et on la découpe en tokens grâce à word_tokenize. Enfin, une compréhension de liste filtre les tokens en excluant ceux présents dans la liste des stop words.

L'exécution du code produit ce résulat:
['The', 'product', 'excellent', 'I', 'highly', 'recommend']
On constate bien que le résultat contient uniquement les mots porteurs de sens, ce qui illustre concrètement le prétraitement en NLP.