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 12: Nuage de mots et histogramme de fréquences: outils visuels pour comprendre un corpus

Toutes les leçons

Nuage de mots (Word Cloud): lire les tendances d’un corpus

Qu'est ce qu'un nuage de mots et à quoi il sert?

Le nuage de mots (ou Word Cloud) est une technique de visualisation simple mais très parlante en EDA pour le NLP. Il consiste à représenter graphiquement les mots d’un corpus en ajustant leur taille en fonction de leur fréquence d’apparition. Plus un mot est fréquent, plus il apparaît en grand dans le nuage, ce qui permet d’identifier d’un seul coup d’œil les termes dominants.
Le nuage de mots est une représentation qualitative qui aide à "prendre la température" d’un corpus.
L’utilité de cette approche réside dans sa capacité à rendre l’exploration des données textuelles intuitive et accessible. En effet, le nuage de mots offre une vue synthétique des tendances générales, met en évidence les thématiques récurrentes et aide à repérer rapidement les biais ou les déséquilibres dans le corpus.

Bien qu’il s’agisse d’une méthode exploratoire et non analytique, le nuage de mots constitue un excellent point de départ pour comprendre la nature des données avant d’aller vers des analyses plus fines et quantitatives.

Exemple d'implémentation du nuage de mots en Python

Je propose cet exemple simple:
from wordcloud import WordCloud
import matplotlib.pyplot as plt

texte = """Le nuage de mots est une représentation
   visuelle de mots-clés dans lequel ces derniers
   sont imprimés en tailles et graisse différentes
   pour évaluer leur importance. Il s’agit en general
   de la première étape d’analyse de grands corpus
   textuels afin d’avoir une idée sur le sujet
   ou lathématique traitée"""

wordcloud = WordCloud(
   width=600,
   height=400,
   background_color='white'
).generate(texte)

plt.figure(figsize=(10,5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
On commence par préparerl’environnement en important deux bibliothèques essentielles, à savoir, WordCloud (depuis le module wordcloud) qui est une classe qui permet de générer automatiquement un nuage de mots à partir d’un texte ou d’un corpus et matplotlib qu'on utilisera pour afficher le nuage de mots sous forme graphique en contrôlant la taille de la figure et la mise en page.
from wordcloud import WordCloud
import matplotlib.pyplot as plt
Ensuite, on crée le nuage de mots à partir du texte fourni:
wordcloud = WordCloud(
   width=600,
   height=400,
   background_color='white'
).generate(texte)
  • WordCloud(...) initialise l’objet avec des paramètres de configuration (largeur, hauteur, couleur de fond).
  • generate(texte) construit le nuage en analysant le corpus et en calculant la fréquence des mots.

Le résultat est stocké dans la variable wordcloud, qui sera affichée avec matplotlib.

Enfin, on affiche le nuage de mots:
plt.figure(figsize=(10,5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
La fonction imshow de matplotlib sert à afficher une image ou une matrice sous forme graphique. Dans notre code, elle est utilisée pour afficher le nuage de mots généré.

Le paramètre interpolation='bilinear' indique la méthode d’interpolation utilisée pour lisser l’image lors de l’affichage. Ici, le rendu est plus fluide et agréable visuellement, car les pixels sont adoucis au lieu d’être affichés de manière brute. En effet, cette la méthode bilinear calcule la couleur d’un pixel affiché en prenant la moyenne des valeurs des quatre pixels voisins. Donc, au lieu d’avoir des contours "pixellisés" ou en escalier, l’image paraît plus fluide et agréable à l’œil.

L'exécution du code précédent produit ce résultat:
Nuage de mots - word cloud nlp eda

Histogramme de fréquences: une lecture quantitative du corpus

Visualiser la distribution des termes par histogramme

L’histogramme de fréquences est une représentation graphique qui permet de visualiser la distribution des mots dans un corpus en fonction de leur nombre d’occurrences. Contrairement au nuage de mots qui offre une vue qualitative et intuitive en mettant en avant les termes dominants par leur taille, l’histogramme fournit une lecture plus quantitative et structurée.

Chaque barre correspond à un mot, et sa hauteur indique combien de fois ce mot apparaît dans le texte. Cette approche est particulièrement utile pour comparer les fréquences relatives des mots, identifier les termes les plus représentatifs, mais aussi repérer les déséquilibres ou les biais éventuels.

En résumé, si le nuage de mots aide à prendre la température d’un corpus de manière visuelle et rapide, l’histogramme de fréquences vient compléter cette analyse en apportant une mesure précise et exploitable pour des traitements statistiques ou des modèles plus avancés.

Exemple d'implémentation de l'histogramme de fréquences

Je propose cet exemple qui illustre la construction d’un histogramme de fréquences des mots à partir d’un texte:
import matplotlib.pyplot as plt
from collections import Counter
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
import nltk
nltk.download('stopwords')

texte = """L'intelligence artificielle consiste
   à mettre en œuvre un certain nombre de techniques
   visant à permettre aux machines d'imiter une forme
   d'intelligence réelle. L'intelligence artificielle
   repose sur la création et l'application d'algorithmes
   exécutés dans un environnement informatique dynamique
   dans le but de permettre à des ordinateurs de penser
   et d'agir comme des êtres humains"""
   
mots = word_tokenize(texte.lower())
mots_sans_stopwords = [mot for mot in mots
   if mot.isalpha() and mot not in stopwords.words('french')]
frequence_mots = Counter(mots_sans_stopwords)
mots_frequents = frequence_mots.most_common(10)
mots, frequences = zip(*mots_frequents)
plt.figure(figsize=(10, 5))
plt.bar(mots, frequences)
plt.xlabel('Mots')
plt.ylabel('Fréquence')
plt.title('Histogramme de fréquence des mots')
plt.show()
Après avoir importé les bibliothèques nécessaires (que vous connaissez déjà), le texte est converti en minuscules puis découpé en tokens grâce à word_tokenize:
mots = word_tokenize(texte.lower())
Les stopwords et les caractères non alphabétiques sont filtrés pour ne garder que les termes significatifs:
mots_sans_stopwords = [mot for mot in mots
   if mot.isalpha() and mot not in stopwords.words('french')]
La classe Counter qu'on initialement importée (from collections import Counter) est ensuite utilisée pour compter les occurrences de chaque mot:
frequence_mots = Counter(mots_sans_stopwords)
La méthode most_common(10) sélectionne les dix plus fréquents:
mots_frequents = frequence_mots.most_common(10)

Enfin, matplotlib trace un histogramme où chaque barre représente un mot et sa fréquence:
plt.figure(figsize=(10, 5))
plt.bar(mots, frequences)
plt.xlabel('Mots')
plt.ylabel('Fréquence')
plt.title('Histogramme de fréquence des mots')
plt.show()
L'exécution du code produit cette illustration:
Histogramme de fréquences de mots - NLP EDA
Ce code montre concrètement comment passer d’un texte brut à une analyse quantitative des mots complémentaire au nuage de mots qui reste plus qualitatif et visuel.
L’histogramme de fréquences requiert une tokenisation explicite du texte (via word_tokenize dans notre exemple). En revanche, le nuage de mots gère automatiquement la segmentation et la fréquence des termes, ce qui le rend plus simple à mettre en œuvre.