Utilisation de transformateurs de visage câlins pour la détection d’émotions dans le texte

La détection des émotions et l'analyse des sentiments sont une tâche populaire en PNL


Image de juice_fish sur Freepik

Hugging Face propose une large gamme de modèles de langage (LM) basés sur des transformateurs, conçus pour gérer diverses tâches de compréhension et de génération de langage. Parmi ces tâches, on trouve :

  • Classement du texte
  • Reconnaissance d’entité nommée (NER)
  • Génération de texte
  • Réponse aux questions
  • Récapitulation
  • Traduction

Un exemple courant de tâche de classification de texte est l’analyse des sentiments, qui vise à identifier le sentiment exprimé dans un texte donné. Les modèles de langage les plus simples pour l’analyse des sentiments déterminent la polarité d’un texte, comme un avis client, en positif ou négatif, ou en positif, négatif ou neutre. Ces problèmes sont respectivement formulés comme des tâches de classification binaire ou multi-classes.

Il existe également des modèles de langage capables de classer des textes en plusieurs émotions, telles que la colère, la joie, la tristesse, etc.

Ce tutoriel Python se concentre sur le chargement et l’utilisation d’un modèle pré-entraîné de Hugging Face pour classer l’émotion principale associée à un texte d’entrée. Nous utiliserons l’ensemble de données sur les émotions disponible sur le hub Hugging Face, qui contient des milliers de messages Twitter en anglais.

Chargement de l’ensemble de données

Pour commencer, nous allons charger les données d’entraînement de l’ensemble de données sur les émotions avec les commandes suivantes :

!pip install datasets
from datasets import load_dataset
all_data = load_dataset("jeffnyman/emotions")
train_data = all_data["train"]

Voici un résumé de ce que contient le sous-ensemble de formation dans la variable train_data :

Dataset({
features: ['text', 'label'],
num_rows: 16000
})

Le pli de formation contient 16 000 instances de messages Twitter. Chaque instance comporte deux fonctionnalités : le texte du message et une étiquette indiquant l’émotion associée sous forme d’identifiant numérique :

  • 0 : tristesse
  • 1 : joie
  • 2 : amour
  • 3 : colère
  • 4 : peur
  • 5 : surprise

Par exemple, la première instance étiquetée dans le groupe d’entraînement est classée avec l’émotion « tristesse » :

Sortie :

{'text': 'i didnt feel humiliated', 'label': 0}

Chargement du modèle de langage

Après avoir chargé les données, nous allons charger un modèle de langage pré-entraîné de Hugging Face pour notre tâche de détection d’émotion. Il existe deux principales approches pour utiliser les modèles de Hugging Face :

  1. Pipelines : offrent un niveau d’abstraction élevé, permettant de charger un modèle et d’effectuer des inférences avec peu de lignes de code, mais avec une configurabilité limitée.
  2. Classes automatiques : offrent plus de flexibilité pour ajuster les paramètres du modèle et personnaliser les étapes de prétraitement, mais nécessitent plus de compétences en codage.

Ce tutoriel se concentre sur l’utilisation des pipelines pour leur simplicité. Pour la détection d’émotions, nous utiliserons le type de tâche « text-classification » :

from transformers import pipeline
classifier = pipeline("text-classification", model="j-hartmann/emotion-english-distilroberta-base")

Il est recommandé de spécifier le nom d’un modèle spécifique capable de traiter notre tâche de détection d’émotions pour éviter de charger un modèle de classification de texte générique.

Pour trouver le nom d’un modèle approprié, explorez le site Web de Hugging Face.

Pour faire des prédictions, il suffit de passer un texte d’entrée au pipeline :

example_tweet = "I love hugging face transformers!"
prediction = classifier(example_tweet)
print(prediction)

Le résultat inclut une étiquette prédite et un score de confiance :

[{'label': 'joy', 'score': 0.9825918674468994}]

Notre exemple « I love hugging face transformers! » est classé avec confiance comme exprimant de la joie.

Vous pouvez également passer plusieurs textes d’entrée pour des prédictions simultanées :

example_tweets = ["I love hugging face transformers!", "I really like coffee but it's too bitter..."]
prediction = classifier(example_tweets)
print(prediction)

La deuxième entrée est plus difficile à classer :

[{'label': 'joy', 'score': 0.9825918674468994}, {'label': 'sadness', 'score': 0.38266682624816895}]

Vous pouvez également utiliser un lot d’instances de l’ensemble de données pour des prédictions en masse :

train_batch = train_data[:10]["text"]
predictions = classifier(train_batch)
labels = [x['label'] for x in predictions]
print(labels)

Sortie :

['sadness', 'sadness', 'anger', 'joy', 'anger', 'sadness', 'surprise', 'fear', 'joy', 'joy']

Les étiquettes originales pour ces instances sont :

print(train_data[:10]["label"])

Sortie :

[0, 0, 3, 2, 3, 0, 5, 4, 1, 2]

En comparant les étiquettes, environ 7 prédictions sur 10 correspondent aux étiquettes réelles.

Maintenant que vous savez utiliser les modèles de Hugging Face pour détecter les émotions dans le texte, explorez d’autres cas d’utilisation et tâches linguistiques où ces modèles peuvent être utiles.

Ivan Palomares Carrascosa est un leader, écrivain, conférencier et conseiller en IA, apprentissage automatique, apprentissage profond et LLM. Il forme et guide les autres dans l’exploitation de l’IA dans le monde réel.

Source