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 19: Analyse de sentiments en NLP: Etude de cas avec le dataset US Airline Sentiment et VADER

Toutes les leçons

Natural Language Processing (NLP) - Fondements et applications

Leçon 1
Natural Language Processing (NLP) - Histoire, définition et applications
Leçon 2
Le prétraitement en NPL: du texte brut aux données exploitables
Leçon 3
La normalisation, étape indispensable du prétraitement linguistique
Leçon 4
Tokenisation: comprendre son rôle dans le prétraitement linguistique pour le NLP
Leçon 5
Gestion des stop words en prétraitement NLP
Leçon 6
Le stemming: Réduction lexicale et normalisation des formes
Leçon 7
Lemmatisation: normaliser les texte en retrouvant la forme canonique des mots
Leçon 8
Byte Pair Encoding (BPE) - Tokenisation en sous-mots et réduction du vocabulaire
Leçon 9
WordPiece: tokenisation en sous-mots pour mieux comprendre le langage
Leçon 10
Extraction n-grammes pour enrichir la représentation du langage
Leçon 11
Exploratory Data Analysis (EDA) en NLP - Explorer pour mieux prédire
Leçon 12
Nuage de mots et histogramme de fréquences: outils visuels pour comprendre un corpus
Leçon 13
PoS Tagging: vers une compréhension linguistique approfondie
Leçon 14
Analyse de cooccurrence: étape clé de l'EDA en NLP exploratoire
Leçon 15
Extraction de caractéristiques en NLP: transformer le texte en vecteurs numériques
Leçon 16
Bag of Words (BoW): une approche basique d'extraction de caractéristiques en NLP
Leçon 17
TF-IDF: pondérer l'importance des mots pour mieux représenter le texte
Leçon 18
Word Embedding: comprendre le langage grâce aux vecteurs sémantiques
Leçon 19
Analyse de sentiments en NLP: Etude de cas avec le dataset US Airline Sentiment et VADER

Explorer les émotions dans le texte en utilisant le modèle pré-entrainé VADER

Après avoir exploré les fondements du NLP (qu’il s’agisse du prétraitement des données textuelles, de l’analyse exploratoire (EDA) ou encore de l’extraction de caractéristiques), il est temps de passer à la pratique. Pour initier cette étape, nous allons travailler sur un exemple concret d’analyse de sentiments en utilisant un modèle pré‑entraîné nommé VADER. Ce choix permet de mettre en évidence la simplicité et l’efficacité d’un outil basé sur un lexique et des règles, avant de s’attaquer à des architectures plus complexes comme les réseaux recurrents LSTM ou GRU.

Qu'est ce que l'analyse de sentiments?

L’analyse de sentiments (ou sentiment analysis) est une tâche centrale du NLP qui consiste à déterminer l’attitude ou l’émotion exprimée dans un texte.

Dans sa forme la plus courante, l'analyse de sentiments classe les opinions en catégories discrètes (positive, négative ou neutre). Toutefois, les sentiments ne sont pas toujours strictement catégoriels, mais peuvent être représentés avec une valeur continue, par exemple à travers la valence (de très négatif à très positif) ou l’intensité émotionnelle. Cette granularité permet de mesurer plus finement les nuances d’opinion.

L’analyse de sentiments joue un rôle essentiel dans de nombreux domaines, notamment la veille sur les réseaux sociaux, l’étude de la satisfaction client ou encore la détection d’opinions dans les médias. En traduisant des données textuelles en indicateurs mesurables, elle offre aux entreprises, chercheurs et institutions un outil puissant pour comprendre les perceptions et orienter leurs décisions stratégiques.

Il existe plusieurs approches pour réaliser une analyse de sentiments, entre autres:
  • Modèles pré‑entraînés: Ces modèles sont déjà optimisés sur de larges corpus et directement exploitables sans phase d’apprentissage supplémentaire. Parmi eux, on peut citer VADER, spécialisé dans les textes courts et informels comme les tweets, ou encore FastText, qui permet une classification rapide grâce à des représentations vectorielles efficaces.
  • Modèles que l’on entraîne soi‑même: Ces modèles incluent les réseaux récurrents comme les LSTM et les GRU, capables de capturer les dépendances séquentielles, ainsi que les architectures modernes de type Transformers (par exemple BERT), qui exploitent l’attention pour comprendre le contexte global d’un texte.

Cette distinction entre modèles pré‑entraînés et modèles entraînés sur mesure est essentielle pour choisir la méthode adaptée en fonction des objectifs, des ressources disponibles et de la complexité des données.

Modèle pré-entrainé VADER (Valence Aware Dictionary sEntiment Reasoner)

VADER (Valence Aware Dictionary and sEntiment Reasoner) est un modèle pré‑entraîné d’analyse de sentiments conçu spécialement pour les textes courts et informels comme ceux que l’on trouve sur Twitter ou dans les avis en ligne.

Le modèle VADER repose sur un lexique riche en mots et expressions associés à des scores de polarité (positif, négatif, neutre) et utilise des règles heuristiques pour prendre en compte des éléments comme la ponctuation, les majuscules ou les intensificateurs.

Contrairement aux modèles nécessitant un entraînement sur un corpus annoté, VADER est directement utilisable et fournit des scores continus de sentiment (valence) en plus d’une classification catégorielle. Cette double approche (catégorielle et continue) en fait un outil idéal pour introduire l’analyse de sentiments, car il illustre à la fois la simplicité d’un modèle basé sur règles et la richesse des nuances qu’il peut capturer dans le langage naturel.

Dataset US Airline Sentiment

Le dataset US Airline Sentiment est un corpus de tweets collectés en février 2015, publiés par des utilisateurs américains à propos de plusieurs compagnies aériennes (United, Delta, American, Southwest...). Il contient environ 14 640 messages, chacun annoté selon le sentiment exprimé (positif, neutre ou négatif). Les tweets négatifs sont parfois enrichis de sous‑catégories précisant la raison de l’insatisfaction, comme les retards de vol, les annulations, les problèmes de service client ou la gestion des bagages.

Le dataset US Airline Sentiment est largement utilisé dans la recherche et l’enseignement du NLP car il illustre parfaitement les défis de l’analyse de sentiments sur des textes courts, informels et souvent riches en ironie ou en jargon.

Vous pouvez télécharger le dataset US Airline Sentiment depuis Kaggle en suivant ce lien.

Mise en pratique de l'analyse de sentiments en NLP

Mode de fonctionnement du modèle VADER

Nous allons d'abord voir comment le modèle VADER fonctionne t-il les types de résultats qu'il retourne à travers un exemple simple:
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer

analyzer = SentimentIntensityAnalyzer()

texte = "I love travelling with this company, the service is excellent!"
score = analyzer.polarity_scores(texte)
print(score)
Après avoir importé la classe SentimentIntensityAnalyzer de la bibliothèque vaderSentiment et créé un objet analyzer qui servira à calculer automatiquement les scores de sentiment, on applique l’analyseur VADER au texte spécifié, ce qui produit ce résultat:
{'neg': 0.0, 'neu': 0.494, 'pos': 0.506, 'compound': 0.8478}
Le résultat retourné par VADER s'interprète ainsi:
  • neg: proportion de mots ou expressions à connotation négative détectée dans le texte.
  • neu: proportion de contenu jugé neutre, sans polarité émotionnelle marquée.
  • pos: proportion de mots ou expressions à connotation positive détectée dans le texte.
  • compound: score global de sentiment calculé en combinant les trois précédents et normalisé entre ‑1 (très négatif) et +1 (très positif).

Le score compound est souvent utilisé comme indicateur principal pour résumer l’attitude générale exprimée dans un texte. D'ailleurs le score obtenu dans cet exemple est élevé (proche de 1) ce qui indique un sentiment global positif.

Étude de cas: VADER appliqué au dataset US Airline Sentiment

Je propose cet ce code:
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
import pandas as pd
from sklearn.metrics import accuracy_score
from langdetect import detect

data=pd.read_csv("US_Tweets.csv")
data=data[["text","airline_sentiment"]].head(500)

data=data[data["text"].apply(lambda x: detect(x)=="en")]

data=data[data["airline_sentiment"]!="neutral"]
data["real_sentiment"]=data["airline_sentiment"].map({
   "negative":0,"positive":1
})

analyzer = SentimentIntensityAnalyzer()
def predict_sentiment(text):
   if (analyzer.polarity_scores(text)["compound"]<0):
      return 0
   else:
      return 1
data["predicted_sentiment"]=data["text"].apply(predict_sentiment)

accuracy_score(data["real_sentiment"],data["predicted_sentiment"])
Ce script illustre une mise en pratique complète de VADER sur le dataset US Airline Sentiment.

On commence par charger les tweets et ne garder que les colonnes utiles (text et airline_sentiment). Nous avons conservé seulement les 500 premiers échantillons afin d'accélérer l'exéuction du script. Ensuite, on filtre pour conserver uniquement les textes en anglais grâce à la bibliothèque langdetect, puis on supprime la classe neutral afin de transformer le problème en classification binaire (negative = 0, positive = 1). On instancie l’analyseur VADER et on définit une fonction predict_sentiment qui attribue 0 si le score compound est négatif et 1 sinon. Enfin, on applique cette fonction à chaque tweet et on compare les prédictions avec les labels réels en calculant l’accuracy.
langdetect est une petite bibliothèque Python qui permet de déterminer automatiquement la langue d’un texte. Elle s’appuie sur des modèles statistiques entraînés sur des corpus multilingues et retourne un code court (par exemple "en" pour anglais, "fr" pour français).
Nous avons atteint une accuracy de 0,75, ce qui traduit une performance satisfaisante. En effet, le modèle VADER parvient à prédire correctement trois tweets sur quatre, ce qui constitue un résultat solide pour une approche lexicale simple appliquée à un jeu de données réel.
Une remarque importante: le fait d’avoir retiré la classe neutral du dataset modifie la distribution originale des données et peut altérer la représentativité des résultats. En effet, les tweets neutres reflètent une réalité (absence d’opinion claire ou sentiment mitigé) et leur suppression réduit la diversité des cas analysés. Toutefois, cette simplification a été choisie ici pour transformer le problème en classification binaire et faciliter l’expérimentation pédagogique avec VADER.
Comme on l'a vu dans la leçons sur la classification en Machine Learning, lorsque l’on évalue un modèle de classification, l’Accuracy donne une vision globale mais ne tient pas compte du coût des erreurs. Si certaines prédictions ont plus d’impact que d’autres alors il est pertinent d’utiliser les métriques Recall et Precision aussi.
         
Leçon 19
Analyse de sentiments en NLP: Etude de cas avec le dataset US Airline Sentiment et VADER