Data Science

Introduction à l’analyse de sentiments en Python

Read this post in other languages:

L’analyse de sentiments est l’une des méthodes les plus répandues d’analyse de texte. Elle permet de comprendre rapidement ce que ressentent les gens dans de nombreux domaines et a des applications utiles dans des activités telles que le service client, les études de marché et recherches sur les produits, et l’analyse concurrentielle.

Comme tous les aspects du traitement du langage naturel (NLP), l’analyse de sentiments peut rapidement devenir complexe. Heureusement, Python a d’excellents paquets et outils qui rendent cette branche du traitement du langage naturel bien plus facile à aborder.

Dans cet article, nous allons passer en revue quelques-uns des paquets les plus populaires d’analyse des sentiments en Python, examiner leur mode de fonctionnement et voir comment vous pouvez entraîner votre propre modèle d’analyse avec des techniques de pointe. Nous allons également examiner quelques-unes des fonctionnalités de PyCharm qui facilitent et accélèrent considérablement l’utilisation de ces paquets.

Qu’est-ce que l’analyse de sentiments ?

L’analyse de sentiments consiste à examiner le contenu d’un texte afin d’en déterminer le ton émotionnel. Il ressort de cette définition que l’analyse de sentiments est un domaine très vaste, qui fait appel à un grand nombre de méthodes de traitement du langage naturel.

Il existe de nombreuses façons de définir le « ton émotionnel ». Les méthodes les plus couramment utilisées déterminent la valence ou la polarité d’un texte, c’est-à-dire le degré de positivité ou de négativité du sentiment qui y est exprimé. Le ton émotionnel est généralement traité comme une question de classification de texte, dans laquelle le texte est catégorisé comme positif ou négatif.

Prenons par exemple l’avis suivant sur un produit vendu par Amazon :

Ce client n’est à l’évidence pas satisfait, et les techniques d’analyse de sentiments classeraient cet avis comme négatif.

Comparons-le à l’avis d’un client beaucoup plus satisfait :

Cette fois, les techniques d’analyse de sentiments classeraient cet avis comme positif.

Différents types d’analyse de sentiments

Il y a de nombreuses façons d’extraire des informations à caractère émotionnel d’un texte. Nous allons examiner quelques-unes des principales méthodes.

Méthodes de définition du sentiment

Tout d’abord, les approches d’analyse définissent les sentiments et les émotions de différentes façons.

Binaire : dans ce cas, la valence d’un document est divisée en deux catégories, positive ou négative, comme avec le jeu de données SST-2. Il existe des classifications de valence apparentées qui ajoutent une classe neutre (dans laquelle un texte n’exprime aucun sentiment concernant un sujet) ou même une classe conflit (dans laquelle un texte exprime à la fois des sentiments positifs et négatifs sur un sujet).

Certains analyseurs de sentiments utilisent une mesure apparentée pour classifier les textes comme subjectifs ou objectifs.

Granulaire : ce terme peut s’appliquer à différents types d’approches de l’analyse des sentiments, mais ici, nous faisons référence à la décomposition de valences positives et négatives sur une échelle de Likert. Un exemple connu est le jeu de données SST-5, qui utilise une échelle de Likert à cinq points avec les classes très positif, positif, neutre, négatif et très négatif.

Continue : la valence d’un texte peut être mesurée de façon continue, avec des scores indiquant dans quelle mesure le sentiment de l’auteur du texte est positif ou négatif. Par exemple, l’analyseur de sentiments VADER attribue à un texte un score entre -1 (très négatif) et 1 (très positif), les scores proches de 0 indiquant un sentiment neutre.

Basée sur les émotions : également appelée détection ou identification des émotions, cette approche tente de détecter l’émotion spécifique exprimée dans un texte. Vous pouvez approcher cela de deux façons. La détection catégorielle des émotions tente de classer le sentiments exprimé par un texte au sein d’une liste restreinte d’émotions, généralement basée sur le modèle d’Ekman, qui inclut la colère, le dégoût, la peur, la joie, la tristesse et la surprise. Certains jeux de données sont conçus pour ce type de détection d’émotions. La détection dimensionnelle, moins répandue dans l’analyse de sentiments, tente quant à elle de mesurer trois aspects émotionnels d’un texte : la polarité, l’excitation (l’intensité de l’émotion) et la dominance (le degré de contrôle de l’expression émotionnelle).

Niveaux d’analyse

Nous pouvons également prendre en compte différents niveaux d’analyse d’un texte. Pour mieux comprendre cela, nous allons examiner un autre avis sur la machine à café :

À l’échelle du document : il s’agit du niveau d’analyse le plus basique, dans lequel un seul sentiment est retiré de l’ensemble du texte. L’analyse au niveau du document peut convenir pour des textes très courts, tels que des Tweets, mais risque de donner des réponses trompeuses en présence de sentiments nuancés. Par exemple, si nous avions basé l’analyse de sentiments de cet avis sur l’ensemble du document, il serait classé dans la catégorie neutre ou conflit, car nous avons deux sentiments opposés concernant la même machine à café.

À l’échelle des phrases : le sentiment de chaque phrase est évalué séparément. Pour l’avis sur la machine à café, l’analyse à l’échelle des phrases nous dirait que la personne qui l’a écrit avait un avis positif sur certains aspects du produit, mais négatif sur d’autres. Toutefois, cette analyse ne nous dit pas ce qui a plu et déplu à cette personne.

Basée sur les aspects : ce type d’analyse de sentiments va plus loin et tente de comprendre les sentiments des utilisateurs concernant des aspects spécifiques. Dans l’avis sur la machine à café, l’utilisateur a mentionné deux aspects : l’apparence du produit et le bruit qu’il fait. En extrayant ces aspects, nous obtenons des informations plus précises sur ce que l’utilisateur aime et n’aime pas. Il a exprimé un sentiment positif concernant l’apparence de la machine, mais négatif en ce qui concerne le bruit qu’elle fait.

Associer l’analyse de sentiments aux autres techniques de traitement du langage naturel

Basée sur l’intention : dans ce dernier type d’analyse des sentiments, le texte est classé de deux façons : en termes de sentiments exprimés et en fonction du sujet du texte. Par exemple, si une entreprise de télécom reçoit un ticket se plaignant de nombreuses interruptions de service, elle peut classer l’intention ou le sujet dans la catégorie fiabilité du service et le sentiment comme négatif. Comme pour l’analyse des sentiments basée sur les aspects, cette approche apporte beaucoup plus d’informations et ne se contente pas de dire si le client est satisfait ou pas.

Applications de l’analyse de sentiments

Vous avez déjà sans doute une idée des cas d’utilisation potentiels de l’analyse de sentiments. Pour faire simple, elle peut être utilisée dans tous les domaines dans lesquels on peut collecter des avis ou des retours d’expérience sur un sujet par écrit. Les organisations comme les personnes peuvent utiliser l’analyse des sentiments pour faire de la veille sur les réseaux sociaux et mesurer ce que les gens ressentent concernant une marque, une organisation ou un sujet.

L’analyse des retours des clients permet d’identifier les sentiments exprimés dans leurs avis ou leurs tickets. Les avis sur les produits peuvent être analysés pour déterminer le degré de satisfaction des utilisateurs. Enfin, l’analyse de sentiments peut constituer un élément clé des études de marché et de l’analyse concurrentielle, car le ressenti des clients vis-à-vis des tendances émergentes, des fonctionnalités et des concurrents permet d’orienter les stratégies d’une entreprise.

Comment fonctionne l’analyse de sentiments ?

Au niveau général, l’analyse de sentiments fonctionne en associant des mots (ou, dans les modèles plus complexes, la tonalité générale d’un texte) à une émotion. Les approches les plus courantes de l’analyse de sentiments appartiennent à l’une des trois méthodes décrites ci-dessous.

Approches basées sur un lexique

Ces méthodes s’appuient sur un lexique qui inclut des scores de sentiments pour une série de mots. Elles combinent ces scores en utilisant un ensemble de règles pour établir le sentiment général d’un texte. Ces méthodes sont souvent très rapides et ont l’avantage de fournir des scores de sentiments plus fins. Cependant, le lexique doit être compilé manuellement et sa production peut donc être longue et coûteuse.

Modèles de machine learning

Ces méthodes entraînent un modèle de machine learning, le plus souvent un classificateur Bayes naïf, sur un jeu de données contenant du texte avec des libellés de sentiments, tels que des critiques de cinéma. Ainsi, les textes sont généralement classés comme positifs ou négatifs, et parfois comme neutres. Ces modèles tendent également à être très rapides, mais comme ils ignorent généralement la relation entre les mots contenus dans l’entrée, ils peuvent être moins efficaces pour des textes plus complexes qui comprennent des qualificateurs et des négations.

Grands modèles de langage (LLM)

Ces méthodes reposent sur la finesse de l’adaptation d’un grand modèle de langage pré-entraîné et basé sur un transformateur sur les mêmes ensembles de données que ceux utilisés pour entraîner les classificateurs de machine learning mentionnés précédemment. Ces modèles avancés sont capables de modéliser les relations complexes entre les mots d’un texte, mais sont généralement plus lents que les deux autres méthodes.

Analyse de sentiments en Python

Python a un riche écosystème de paquets pour le traitement du langage naturel, ses utilisateurs ont donc l’embarras du choix en matière d’analyse de sentiments.

Nous allons examiner quelques-uns des paquets Python les plus populaires pour l’analyse de sentiments.

Les meilleures bibliothèques Python pour l’analyse de sentiments

VADER

VADER (Valence Aware Dictionary and sentiments Reasoner) est un analyseur de sentiments populaire basé sur l’utilisation d’un lexique. Intégré dans le puissant paquet NLTK, cet analyseur fournit quatre scores de sentiments : les degrés de sentiments positif, neutre ou négatif, ainsi qu’un score de sentiments mixte. Les scores positif, neutre et négatif vont de 0 à 1, et indiquent la proportion de texte qui est positive, neutre ou négative. Les scores mixtes vont de –1 (très négatif) à 1 (très positif), et indiquent la valence globale du sentiment du texte.

Prenons un exemple simple pour voir comment cela fonctionne :

from nltk.sentiment.vader import SentimentIntensityAnalyzer
import nltk

Nous devons d’abord télécharger le lexique de VADER.

nltk.download('vader_lexicon')

Nous allons ensuite créer une instance du sentimentsIntensityAnalyzer() de VADER et extraire les scores de sentiments avec la méthode polarity_scores().

analyzer = SentimentIntensityAnalyzer()

sentence = "I love PyCharm! It's my favorite Python IDE."
sentiment_scores = analyzer.polarity_scores(sentence)
print(sentiment_scores)
{'neg': 0.0, 'neu': 0.572, 'pos': 0.428, 'compound': 0.6696}

On peut voir que VADER a donné à ce texte un score de sentiments de 0,67 et a classé son contenu comme 43 % positif, 57 % neutre et 0 % négatif.

VADER examine les scores de sentiments de chaque mot dans son lexique et en les combinant avec un ensemble de règles nuancées. Par exemple, les qualificateurs peuvent augmenter ou réduire l’intensité du sentiment d’un mot, de sorte qu’un qualificateur tel que « un peu » placé avant un mot réduit l’intensité du sentiment, tandis que le qualificateur « extrêmement » l’amplifie.

Le lexique de VADER inclut des abréviations telles que « smh » (pour « shaking my head ») et des émojis, ce qui le rend particulièrement bien adapté aux textes des réseaux sociaux. La limitation principale de VADER est qu’il ne fonctionne que pour l’anglais, mais il existe des projets, tels que vader-multi comme alternative. J’ai écrit un autre article expliquant comment VADER fonctionne si vous souhaitez en apprendre plus sur ce paquet.

NLTK

Vous pouvez aussi utiliser NLTK pour entraîner votre propre classificateur de sentiments basé sur le machine learning, en vous appuyant sur les classificateurs de scikit-learn.

Il existe de nombreuses façons de traiter le texte à alimenter dans ces modèles, mais la manière la plus simple consiste à se baser sur les mots présents dans le texte, un type de modélisation de texte appelé approche « sac de mots » (bag-of-words). Le type de sac de mots le plus simple consiste est la vectorisation binaire, dans laquelle chaque mot est traité comme une caractéristique, la valeur de cette caractéristique étant 0 ou 1 (selon que ce mot est présent ou absent dans le texte).

Si vous découvrez le traitement des données texte et le NLP, et si vous souhaitez savoir comment le texte peut être converti en entrées pour les modèles de machine learning, j’ai fait une intervention orale à ce sujet.

Vous trouverez un exemple dans la documentation de NLTK, dans lequel un classificateur Naive Bayes est entraîné à prédire si un texte est subjectif ou objectif. Dans cet exemple, un qualificateur de négation supplémentaire est ajouté à certains termes en fonction de règles qui indiquent la probabilité d’utilisation de ce mot ou de ce caractère pour nier un sentiment exprimé ailleurs dans le texte. Real Python propose également un tutoriel sur l’analyse de sentiments concernant l’entraînement de vos propres classificateurs avec NLTK, si vous souhaitez approfondir ce sujet.

Pattern et TextBlob

Le paquet Pattern est une autre approche basée sur un lexique pour analyser les sentiments. Il utilise le lexique SentiWordNet, dans lequel chaque groupe de synonymes (synset) provenant de WordNet reçoit un score de positivité, de négativité et d’objectivité. Les scores positifs et négatifs de chaque mot sont combinés en utilisant une série de règles pour parvenir à un score final de polarité. De même, le score d’objectivité de chaque mot est combiné pour produire un score de subjectivité final.

Dans la mesure où WordNet contient des informations sur les catégories grammaticales, les règles peuvent prendre en compte la présence d’adjectifs ou d’adverbes associés à un mot modifiant son sentiment. L’ensemble de règles tient également compte des négations, des points d’exclamation et des émojis, et peut même traiter les idiomes et les sarcasmes.

Toutefois, Pattern en tant que bibliothèque autonome est uniquement compatible avec Python 3.6. Le mode d’utilisation le plus commun de Pattern consiste donc à passer par TextBlob. Par défaut, l’analyseur de sentiments TextBlob utilise sa propre implémentation de la bibliothèque Pattern pour générer des scores de sentiments.

Voyons tout cela en action :

from textblob import TextBlob

Vous pouvez voir que nous exécutons la méthode TextBlob sur notre texte, puis que nous extrayons le sentiment en utilisant l’attribut sentiment.

pattern_blob = TextBlob("I love PyCharm! It's my favorite Python IDE.")
sentiment = pattern_blob.sentiment

print(f"Polarity: {sentiment.polarity}")
print(f"Subjectivity: {sentiment.subjectivity}")
Polarity: 0.625
Subjectivity: 0.6

Pour notre exemple de phrase, Pattern dans TextBlob renvoie un score de polarité de 0,625 (relativement proche du score donné par VADER) et un score de subjectivité de 0,6.

Mais il existe une deuxième façon d’obtenir les scores de sentiments dans TextBlob. Ce paquet inclut également un classificateur Naive Bayes pré-entraîné, qui permet de désigner un extrait de texte comme positif ou négatif et indique la probabilité que le texte soit positif ou négatif.

Pour utiliser cette méthode, nous devons au préalable télécharger le module punkt et le jeu de données movie-reviews de NLTK, qui est utilisé pour entraîner ce modèle.

import nltk
nltk.download('movie_reviews')
nltk.download('punkt')

from textblob import TextBlob
from textblob.sentiments import NaiveBayesAnalyzer

Nous devons de nouveau exécuter TextBlob sur notre texte, mais cette fois-ci nous allons ajouter l’argument analyzer=NaiveBayesAnalyzer(). Ensuite, comme précédemment, nous utilisons l’attribut de sentiments pour extraire les scores de sentiments.

nb_blob = TextBlob("I love PyCharm! It's my favorite Python IDE.", analyzer=NaiveBayesAnalyzer())
sentiment = nb_blob.sentiment
print(sentiment)
Sentiment(classification='pos', p_pos=0.5851800554016624, p_neg=0.4148199445983381)

Cette fois-ci nous obtenons un libellé pos (positif) et le modèle donne comme probabilité 59 % positif et 41 % négatif.

spaCy

Une autre option pour l’analyse de sentiments est d’utiliser spaCy. spaCy est un autre paquet populaire de NLP pour le code Python qui offre une large gamme d’options de traitement du texte.

La première méthode consiste à utiliser le plugin spacytextblob pour utiliser l’analyseur de sentiments TextBlob dans votre pipeline spaCy. Avant de faire cela, vous devez d’abord installer spacy et spacytextblob, puis télécharger le modèle de langage approprié.

import spacy
import spacy.cli
from spacytextblob.spacytextblob import SpacyTextBlob

spacy.cli.download("en_core_web_sm")

Nous chargeons ensuite ce modèle de langage et ajoutons spacytextblob à notre pipeline de traitement de texte. TextBlob peut être utilisé via la méthode pipe de spaCy, ce qui permet de l’inclure dans le cadre d’un pipeline de traitement de texte plus complexe, avec notamment des étapes de prétraitement telles que le balisage des parties du discours, la lemmatisation et la reconnaissance d’entités nommées. Le prétraitement permet de normaliser et d’enrichir le texte, afin d’aider les modèles à obtenir le plus d’informations possibles à partir des entrées textuelles en aval.

nlp = spacy.load('en_core_web_sm')
nlp.add_pipe('spacytextblob')

Pour le moment, nous allons juste analyser notre exemple de phrase sans prétraitement :

doc = nlp("I love PyCharm! It's my favorite Python IDE.")

print('Polarity: ', doc._.polarity)
print('Subjectivity: ', doc._.subjectivity)
Polarity:  0.625
Subjectivity:  0.6

Nous obtenons les mêmes résultats que lors de l’utilisation de TextBlob vue auparavant.

La deuxième façon d’analyser les sentiments dans spaCy consiste à entraîner notre propre modèle en utilisant la classe TextCategorizer. Cela permet d’entraîner toute une gamme de modèles créés par spaCy en utilisant un jeu de données d’entraînement pour l’analyse de sentiments. Encore une fois, dans la mesure où cela fait partie du pipeline spaCy, vous disposez de nombreuses options de pré-traitement de votre texte avant de passer à l’entraînement de votre modèle.

Enfin, vous pouvez utiliser des LLM pour effectuer l’analyse de sentiments via spacy-llm. Cela vous permet de faire appel à différents LLM propriétaires, tels que ceux d’OpenAI, d’Anthropic, de Cohere et de Google, pour effectuer l’analyse de sentiments de vos textes.

Cette approche diffère légèrement des autres méthodes que nous avons déjà présentées. Au lieu d’entraîner un modèle, on peut utiliser des modèles généralistes comme GPT-4 pour prédire le sentiment d’un texte. Vous pouvez faire cela au moyen d’un apprentissage « zero-shot » (dans lequel le modèle reçoit un prompt mais aucun exemple) ou d’un apprentissage « few-shot » (dans lequel ke modèle reçoit un prompt et plusieurs exemples).

Transformers

Le dernier paquet Python d’analyse de sentiments dont nous allons parler est Transformers de Hugging Face.

Hugging Face héberge tous les principaux LLM open source accessible gratuitement (y compris les modèles de vision par ordinateur et audio) et fournit une plate-forme pour l’entraînement, le déploiement et le partage de ces modèles. Son paquet Transformers offre une large gamme de fonctionnalités (notamment l’analyse de sentiments) pour travailler avec les LLM hébergés par Hugging Face.

Comprendre les résultats des analyseurs de sentiments

Maintenant que nous avons couvert tous les modes d’analyse de sentiments avec Python, vous vous demandez sans doute, « Comment puis-je les appliquer à mes données ? »

Pour le comprendre, nous allons utiliser PyCharm pour comparer deux paquets, VADER et TextBlob. Leurs scores multiples de sentiments offrent de nouvelles perspectives sur nos données. Nous allons utiliser ces paquets pour analyser le jeu de données des avis Amazon.

PyCharm Professional est un IDE Python puissant pour la science des données qui prend en charge la saisie semi-automatique du code Python, les inspections et le débogage, des bases de données enrichies, Jupyter, Git, Conda et bien plus, tout cela prêt à l’emploi. Vous disposez également de fonctionnalités incroyablement utiles, telles que Column Statistics et Chart View pour DataFrame, ainsi que les intégrations Hugging Face qui permettent de manipuler les LLM bien plus rapidement et facilement. Dans cet article, nous allons voir ce qu’apportent les fonctionnalités avancées de PyCharm pour la manipulation des dataframes, afin d’obtenir une vue d’ensemble rapide du mode de distribution des scores de sentiments entre les deux paquets.

Si vous êtes prêt à commencer votre propre projet d’analyse de sentiments, vous pouvez activer votre abonnement gratuit de trois mois à PyCharm. Cliquez sur le lien ci-dessous, puis saisissez le code promotionnel : PCSA24. Vous recevrez un code d’activation par e-mail.

La première chose à faire est de charger les données. Nous pouvons utiliser la méthode load_dataset() du paquet Datasets pour télécharger ces données depuis Hugging Face Hub.

from datasets import load_dataset
amazon = load_dataset("fancyzhx/amazon_polarity")

Vous pouvez survoler le nom du jeu de données pour voir la carte de jeu de données Hugging Face directement dans PyCharm, afin d’obtenir facilement des informations sur les ressources Hugging Face sans quitter l’IDE.

Le contenu de ce jeu de données est visible ici :

amazon
DatasetDict({
    train: Dataset({
        features: ['label', 'title', 'content'],
        num_rows: 3600000
    })
    test: Dataset({
        features: ['label', 'title', 'content'],
        num_rows: 400000
    })
})

Le jeu de données d’entraînement comporte 3,6 millions d’observations, tandis que celui de données de test en comporte 400 000. Nous allons travailler avec le jeu de données d’entraînement dans ce tutoriel.

Nous allons maintenant charger le sentimentsIntensityAnalyzer de VADER et la méthode TextBlob.

from nltk.sentiment.vader import SentimentIntensityAnalyzer
import nltk

nltk.download("vader_lexicon")

analyzer = SentimentIntensityAnalyzer()
from textblob import TextBlob

Le jeu de données d’entraînement comporte trop d’observations pour qu’elles puissent être visualisées confortablement, nous allons donc prendre au hasard un échantillon de 1 000 avis représentant le sentiment général de toutes les personnes ayant donné leur avis.

from random import sample
sample_reviews = sample(amazon["train"]["content"], 1000)

Il faut maintenant générer les scores VADER et TextBlob pour chacun de ces avis. Nous allons examiner le texte de chaque avis, le soumettre aux analyseurs de sentiments, puis joindre les scores à une liste dédiée.

vader_neg = []
vader_neu = []
vader_pos = []
vader_compound = []
textblob_polarity = []
textblob_subjectivity = []

for review in sample_reviews:
   vader_sent = analyzer.polarity_scores(review)
   vader_neg += [vader_sent["neg"]]
   vader_neu += [vader_sent["neu"]]
   vader_pos += [vader_sent["pos"]]
   vader_compound += [vader_sent["compound"]]
  
   textblob_sent = TextBlob(review).sentiment
   textblob_polarity += [textblob_sent.polarity]
   textblob_subjectivity += [textblob_sent.subjectivity]

Chacune de ces listes sera ensuite placée dans un DataFrame pandas en tant que colonne distincte :

import pandas as pd

sent_scores = pd.DataFrame({
   "vader_neg": vader_neg,
   "vader_neu": vader_neu,
   "vader_pos": vader_pos,
   "vader_compound": vader_compound,
   "textblob_polarity": textblob_polarity,
   "textblob_subjectivity": textblob_subjectivity
})

Nous sommes maintenant prêts à explorer nos résultats.

En général, c’est le moment où nous commençons à créer du code pour l’analyse exploratoire des données. Cela peut se faire en utilisant la méthode describe de pandas pour obtenir des statistiques récapitulatives sur nos colonnes et en écrivant du code Matplotlib ou seaborn pour visualiser nos résultats. Cependant, PyCharm dispose de plusieurs fonctionnalités pour accélérer l’ensemble de ce processus.

Nous allons maintenant imprimer notre DataFrame.

sent_scores

Un bouton s’affiche dans le coin supérieur droit, appelé Show Column Statistics. En cliquant sur ce bouton, on obtient deux options : Compact et Detailed. Sélectionnez Detailed.

Nous disposons à présent de statistiques récapitulatives, fournies dans le cadre de nos en-têtes de colonnes ! En les examinant, on constate que le score mixte de VADER présente une moyenne de 0,4 (médiane = 0,6), tandis que le score de polarité de TextBlob renvoie une moyenne de 0,2 (médiane = 0,2).

Ce résultat indique qu’en moyenne, VADER a tendance à estimer le même ensemble d’avis plus positivement que TextBlob. Il montre également que pour les deux analyseurs de sentiments, la probabilité d’avis positifs est supérieure à celle d’avis négatifs, et nous pouvons aller plus loin en vérifiant certaines visualisations.

Nous disposons aussi d’une autre fonctionnalité dans PyCharm, le DataFrame Chart View. Le bouton de cette fonction se trouve dans le coin supérieur gauche.

Cliquez sur ce bouton pour basculer vers l’éditeur de graphique. À partir de là, il devient possible de créer des visuels sans écrire de code, directement depuis notre DataFrame.

Commençons par le score composite de VADER. Pour commencer à créer ce graphique, allez dans Show Series Settings dans le coin supérieur droit.

Supprimez les valeurs par défaut pour X Axis et Y Axis. Remplacez les valeurs de X Axis et Y Axis par vader_compound. Cliquez sur la flèche près du nom de variable dans le champ Y Axis, puis sélectionnez count.

Enfin, sélectionnez Histogram dans les icônes de graphique, juste sous Series Settings. Le score composite VADER est susceptible d’avoir une distribution bimodale, avec un léger pic autour de -0,8 et un pic beaucoup plus important autour de 0,9. Ces pics représentent probablement la division des avis entre positifs et négatifs. Les avis positifs sont beaucoup plus nombreux que les avis négatifs.

Nous allons répéter le même exercice et créer un histogramme pour visualiser la distribution des scores de polarité de TextBlob.

TextBlob tend à évaluer la plupart des avis comme neutres, avec très peu d’avis fortement positifs ou négatifs. Pour expliquer les écarts des scores renvoyés par ces deux analyseurs de sentiments, nous allons examiner deux avis VADER opposés, l’un évalué comme fortement positif et l’autre comme fortement négatif, mais que TextBlob a évalué comme neutres.

Nous obtiendrons l’indice du premier avis que VADER a évalué comme positif, mais que TextBlob a évalué comme neutre :

sent_scores[(sent_scores["vader_compound"] >= 0.8) & (sent_scores["textblob_polarity"].between(-0.1, 0.1))].index[0]
42

Ensuite, nous allons extraire l’indice du premier avis que VADER a évalué comme négatif, mais que TextBlob a évalué comme neutre :

sent_scores[(sent_scores["vader_compound"] <= -0.8) & (sent_scores["textblob_polarity"].between(-0.1, 0.1))].index[0]
0

Commençons par extraire l’avis positif :

sample_reviews[42]
"I love carpet sweepers for a fast clean up and a way to conserve energy. The Ewbank Multi-Sweep is a solid, well built appliance. However, if you have pets, you will find that it takes more time cleaning the sweeper than it does to actually sweep the room. The Ewbank does pick up pet hair most effectively but emptying it is a bit awkward. You need to take a rag to clean out both dirt trays and then you need a small tooth comb to pull the hair out of the brushes and the wheels. To do a proper cleaning takes quite a bit of time. My old Bissell is easier to clean when it comes to pet hair and it does a great job. If you do not have pets, I would recommend this product because it is definitely well made and for small cleanups, it would suffice. For those who complain about appliances being made of plastic, unfortunately, these days, that's the norm. It's not great and plastic definitely does not hold up but, sadly, product quality is no longer a priority in business."

Cet avis semble mixte, avec toutefois une tendance au positif.

Nous allons maintenant examiner l’avis négatif :

sample_reviews[0]
'The only redeeming feature of this Cuisinart 4-cup coffee maker is the sleek black and silver design. After that, it rapidly goes downhill. It is frustratingly difficult to pour water from the carafe into the chamber unless it's done extremely slow and with accurate positioning. Even then, water still tends to dribble out and create a mess. The lid, itself, is VERY poorly designed with it's molded, round "grip" to supposedly remove the lid from the carafe. The only way I can remove it is to insert a sharp pointed object into one of the front pouring holes and pry it off! I've also occasionally had a problem with the water not filtering down through the grounds, creating a coffee ground lake in the upper chamber and a mess below. I think the designer should go back to the drawing-board for this one.'

Cet avis est négatif, sans ambiguïté. En comparant les deux, on peut dire que VADER semble être plus précis, mais qu’il a tendance à accorder plus d’importance aux termes positifs dans un texte.

La dernière chose que nous pouvons prendre en compte est l’équilibre entre la subjectivité et l’objectivité dans les différents avis. Nous allons faire cela en créant un histogramme du score de subjectivité de TextBlob.

De façon intéressante, la subjectivité est bien distribuée dans les avis, la plupart d’entre eux étant un mélange d’arguments subjectifs et objectifs. Un petit nombre d’avis sont également très subjectifs (proches de 1) ou très objectifs (proches de 0).

Ces scores nous offrent une bonne manière de segmenter les données. Si vous souhaitez identifier concrètement ce que les gens aiment ou n’aiment pas concernant les produits, vous pouvez examiner les avis ayant un faible score de subjectivité et les scores mixtes de VADER proches de 1 et -1, respectivement.

En revanche, si vous voulez connaître la réaction émotionnelle des gens face aux produits, vous pouvez utiliser ceux qui ont un score de subjectivité élevé et des scores mixtes VADER élevés et faibles.

Points à prendre en compte

Comme pour tout problème de traitement du langage naturel, plusieurs points sont à prendre en compte lors de l’analyse de sentiments.

L’un des critères les plus importants est la langue des textes à analyser. De nombreuses méthodes basées sur des lexiques ne fonctionnent que pour un nombre limité de langues. Ainsi, si vous travaillez sur des langues qui ne sont pas prises en charge par ces lexiques, il peut être nécessaire d’adopter une autre approche, comme l’utilisation de LLM optimisés ou l’entraînement de vos propres modèles.

Plus les textes sont complexes, plus il est difficile de détecter correctement les sentimentss avec les modèles basés sur le lexique et sur le sac de mots. Le sarcasme ou les indicateurs de contexte plus subtils peuvent être difficilement repérables avec les modèles les plus simples, et ces derniers risquent de ne pas être en mesure de classer précisément le sentiments de ces textes. Les LLM peuvent traiter des textes plus complexes, mais cela implique d’expérimenter avec différents modèles.

Enfin, lors de l’analyse de sentiments, les mêmes problèmes se produisent lorsque vous traitez un problème de machine learning. La qualité de vos modèles dépend directement de celle des données d’entraînement que vous utilisez. Si vous ne pouvez pas obtenir des jeux de données d’entraînement et de test haute qualité en rapport avec le problème à traiter, vous ne pourrez pas prédire correctement le sentiments de votre public cible.

Vous devez également vous assurer que vos cibles ont bien une relation avec votre problème métier. Il peut sembler séduisant de créer un modèle pour savoir si vos produits rendent vos clients « tristes », « en colère » ou « dégoûtés », mais si cela ne vous aide pas à prendre une décision sur l’amélioration de vos produits, votre problème restera sans solution.

Conclusion

Dans cet article de blog, nous avons examiné en détail l’analyse de sentiments en Python et montré comment ce domaine complexe a été rendu plus accessible par toute une série de paquets puissants.

Nous avons couvert les applications potentielles de l’analyse du sentiments, les différentes façons de l’évaluer, ainsi que les principales méthodes de mesure du sentiments exprimé par un texte. Nous avons également vu des fonctionnalités pratiques de PyCharm qui accélèrent et simplifient l’utilisation des modèles et l’interprétation de leurs résultats.

Les LLM sont actuellement au cœur du traitement du langage naturel, mais les anciennes techniques basées sur des analyseurs basés sur des lexiques ou des modèles traditionnels de machine learning, tels que les classificateurs Naive Bayes, ont toujours leur place dans l’analyse de sentiments. Ces techniques sont à privilégier lors de l’analyse de textes simples, ou lorsque la vitesse, les prévisions ou la simplicité de déploiement sont des priorités. Les LLM conviennent mieux aux textes plus complexes ou nuancés.

Maintenant que vous avez compris les bases, vous pouvez apprendre comment procéder à une analyse des sentiments avec les LLM dans notre tutoriel. Ce guide étape par étape vous apprend comment sélectionner le modèle le mieux adapté à votre tâche, l’utiliser pour l’analyse de sentiments, voire l’optimiser vous-même.

Si vous souhaitez aller plus loin concernant le traitement du langage naturel ou le machine learning après avoir lu l’article de blog, voici quelques ressources utiles :

Commencer l’analyse de sentiments dans PyCharm dès aujourd’hui

Si vous êtes prêt à commencer votre propre projet d’analyse de sentiments, vous pouvez activer votre abonnement gratuit de trois mois à PyCharm. Cliquez sur le lien ci-dessous, puis saisissez le code promotionnel : PCSA24. Vous allez recevoir un code d’activation par e-mail.

Auteur de l’article original en anglais :

Jodie Burchell

Jodie Burchell

Dr. Jodie Burchell is the Developer Advocate in Data Science at JetBrains, and was previously a Lead Data Scientist at Verve Group Europe. She completed a PhD in clinical psychology and a postdoc in biostatistics, before leaving academia for a data science career. She has worked for 7 years as a data scientist in both Australia and Germany, developing a range of products including recommendation systems, analysis platforms, search engine improvements and audience profiling. She has held a broad range of responsibilities in her career, doing everything from data analytics to maintaining machine learning solutions in production. She is a long time content creator in data science, across conference and user group presentations, books, webinars, and posts on both her own and JetBrain’s blogs.

image description

Discover more