Maison >développement back-end >Tutoriel Python >Visualiser les résultats de l'analyse des sentiments en Python à l'aide de Matplotlib

Visualiser les résultats de l'analyse des sentiments en Python à l'aide de Matplotlib

Barbara Streisand
Barbara Streisandoriginal
2025-01-05 12:38:41689parcourir

Dans cet article, nous ajouterons une représentation graphique des résultats de l'analyse des sentiments à l'aide de Matplotlib. L'objectif est de visualiser les scores de sentiments de plusieurs phrases, avec un graphique à barres qui distingue les sentiments positifs et négatifs en utilisant différentes couleurs.

Pré-requis

Assurez-vous que les bibliothèques suivantes sont installées :

pip install transformers torch matplotlib
  • transformateurs : pour gérer les modèles PNL pré-entraînés.
  • torche : Pour exécuter le modèle.
  • matplotlib : Pour créer la représentation graphique des résultats de l'analyse des sentiments.

Code Python avec visualisation

Visualizing Sentiment Analysis Results in Python using Matplotlib

Voici le code Python mis à jour qui intègre l'analyse des sentiments à la visualisation des données.

import matplotlib.pyplot as plt
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# Load pre-trained model and tokenizer
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Initialize the sentiment-analysis pipeline
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)

# List of 10 sentences for sentiment analysis
sentences = [
    "I love you! I love you! I love you!",
    "I feel so sad today.",
    "This is the best day ever!",
    "I can't stand the rain.",
    "Everything is going so well.",
    "I hate waiting in line.",
    "The weather is nice, but it's cold.",
    "I'm so proud of my achievements.",
    "I am very upset with the decision.",
    "I am feeling optimistic about the future."
]

# Prepare data for the chart
scores = []
colors = []

for sentence in sentences:
    result = classifier(sentence)
    sentiment = result[0]['label']
    score = result[0]['score']
    scores.append(score)

    # Color bars based on sentiment: Positive -> green, Negative -> red
    if sentiment == "POSITIVE":
        colors.append("green")
    else:
        colors.append("red")

# Create a bar chart
plt.figure(figsize=(10, 6))
bars = plt.bar(sentences, scores, color=colors)

# Add labels and title with a line break
plt.xlabel('Sentences')
plt.ylabel('Sentiment Score')
plt.title('Sentiment Analysis of 10 Sentences\n')  # Added newline here
plt.xticks(rotation=45, ha="right")

# Adjust spacing with top margin (to add ceiling space)
plt.subplots_adjust(top=0.85)  # Adjust the top spacing (20px roughly equivalent to 0.1 top margin)

plt.tight_layout()  # Adjusts the rest of the layout

# Display the sentiment score on top of the bars
for bar in bars:
    yval = bar.get_height()
    plt.text(bar.get_x() + bar.get_width() / 2, yval + 0.02, f'{yval:.2f}', ha='center', va='bottom', fontsize=9)

# Show the plot
plt.show()

Répartition du code

Importation des bibliothèques nécessaires :
Nous importons matplotlib.pyplot pour créer des tracés et des transformateurs afin d'effectuer une analyse des sentiments.

   import matplotlib.pyplot as plt
   from transformers import pipeline
   from transformers import AutoTokenizer, AutoModelForSequenceClassification

Chargement du modèle pré-entraîné :
Nous chargeons le modèle DistilBERT affiné pour l'analyse des sentiments sur l'ensemble de données SST-2. Nous chargeons également le tokenizer associé qui convertit le texte en jetons lisibles par modèle.

   model_name = "distilbert-base-uncased-finetuned-sst-2-english"
   model = AutoModelForSequenceClassification.from_pretrained(model_name)
   tokenizer = AutoTokenizer.from_pretrained(model_name)

Initialisation du pipeline d'analyse des sentiments :
Le pipeline de classificateur est configuré pour l’analyse des sentiments. Ce pipeline se charge de tokeniser le texte saisi, d'effectuer l'inférence et de renvoyer le résultat.

   classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)

Phrases pour l'analyse des sentiments :
Nous créons une liste de 10 phrases à analyser. Chaque phrase est une expression unique d'un sentiment, allant du très positif au négatif.

   sentences = [
       "I love you! I love you! I love you!",
       "I feel so sad today.",
       "This is the best day ever!",
       "I can't stand the rain.",
       "Everything is going so well.",
       "I hate waiting in line.",
       "The weather is nice, but it's cold.",
       "I'm so proud of my achievements.",
       "I am very upset with the decision.",
       "I am feeling optimistic about the future."
   ]

Traitement des sentiments et préparation des données :
Pour chaque phrase, nous classons son sentiment et extrayons la partition. En fonction de l'étiquette de sentiment (POSITIVE ou NÉGATIF), nous attribuons une couleur aux barres du graphique. Les phrases positives seront vertes, tandis que les négatives seront rouges.

   scores = []
   colors = []

   for sentence in sentences:
       result = classifier(sentence)
       sentiment = result[0]['label']
       score = result[0]['score']
       scores.append(score)

       if sentiment == "POSITIVE":
           colors.append("green")
       else:
           colors.append("red")

Création du graphique à barres :
Nous utilisons matplotlib pour créer un graphique à barres. La hauteur de chaque barre représente le score de sentiment pour une phrase, et les couleurs différencient les sentiments positifs et négatifs.

   plt.figure(figsize=(10, 6))
   bars = plt.bar(sentences, scores, color=colors)

Ajout d'étiquettes et ajustement de la mise en page :
Nous personnalisons l'apparence de l'intrigue en faisant pivoter les étiquettes de l'axe X pour une meilleure lisibilité, en ajoutant un titre et en ajustant la mise en page pour un espacement optimal.

   plt.xlabel('Sentences')
   plt.ylabel('Sentiment Score')
   plt.title('Sentiment Analysis of 10 Sentences\n')  # Added newline here
   plt.xticks(rotation=45, ha="right")
   plt.subplots_adjust(top=0.85)  # Adjust the top spacing
   plt.tight_layout()  # Adjusts the rest of the layout

Affichage des scores de sentiment en haut des barres :
Nous affichons également le score de sentiment en haut de chaque barre pour rendre le graphique plus informatif.

pip install transformers torch matplotlib

Affichage du tracé :
Enfin, le graphique est affiché à l'aide de plt.show(), qui restitue le tracé.

import matplotlib.pyplot as plt
from transformers import pipeline
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# Load pre-trained model and tokenizer
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)

# Initialize the sentiment-analysis pipeline
classifier = pipeline("sentiment-analysis", model=model, tokenizer=tokenizer)

# List of 10 sentences for sentiment analysis
sentences = [
    "I love you! I love you! I love you!",
    "I feel so sad today.",
    "This is the best day ever!",
    "I can't stand the rain.",
    "Everything is going so well.",
    "I hate waiting in line.",
    "The weather is nice, but it's cold.",
    "I'm so proud of my achievements.",
    "I am very upset with the decision.",
    "I am feeling optimistic about the future."
]

# Prepare data for the chart
scores = []
colors = []

for sentence in sentences:
    result = classifier(sentence)
    sentiment = result[0]['label']
    score = result[0]['score']
    scores.append(score)

    # Color bars based on sentiment: Positive -> green, Negative -> red
    if sentiment == "POSITIVE":
        colors.append("green")
    else:
        colors.append("red")

# Create a bar chart
plt.figure(figsize=(10, 6))
bars = plt.bar(sentences, scores, color=colors)

# Add labels and title with a line break
plt.xlabel('Sentences')
plt.ylabel('Sentiment Score')
plt.title('Sentiment Analysis of 10 Sentences\n')  # Added newline here
plt.xticks(rotation=45, ha="right")

# Adjust spacing with top margin (to add ceiling space)
plt.subplots_adjust(top=0.85)  # Adjust the top spacing (20px roughly equivalent to 0.1 top margin)

plt.tight_layout()  # Adjusts the rest of the layout

# Display the sentiment score on top of the bars
for bar in bars:
    yval = bar.get_height()
    plt.text(bar.get_x() + bar.get_width() / 2, yval + 0.02, f'{yval:.2f}', ha='center', va='bottom', fontsize=9)

# Show the plot
plt.show()

Exemple de sortie

Le résultat de ce code sera un graphique à barres affichant les scores de sentiment des 10 phrases. Les phrases positives seront représentées par des barres vertes, tandis que les phrases négatives seront représentées par des barres rouges. Le score de sentiment sera affiché au-dessus de chaque barre, indiquant le niveau de confiance du modèle.

Conclusion

En combinant l'analyse des sentiments avec la visualisation des données, nous pouvons mieux interpréter le ton émotionnel derrière les données textuelles. La représentation graphique de cet article offre une compréhension plus claire de la répartition des sentiments, vous permettant de repérer facilement les tendances dans le texte. Vous pouvez appliquer cette technique à divers cas d'utilisation, comme l'analyse des avis sur les produits, des publications sur les réseaux sociaux ou des commentaires des clients.

Grâce à la puissante combinaison des transformateurs de Hugging Face et de matplotlib, ce flux de travail peut être étendu et personnalisé pour s'adapter à diverses tâches PNL.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn