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.