Intelligence Artificielle

Comment utiliser l’IA pour l’analyse de sentiments

3 دقائق للقراءة

Qu’est-ce que l’analyse de sentiments et pourquoi c’est utile

L’analyse de sentiments (sentiment analysis) est une technique de traitement du langage naturel (NLP) qui déterminé automatiquement si un texte exprime une opinion positive, négative ou neutre. Appliquée aux avis clients, aux commentaires sur les réseaux sociaux, aux réponses de sondages ou aux tickets de support, elle permet de comprendre à grande échelle ce que les gens pensent de votre produit, service ou marque sans lire manuellement chaque message.

Pour une entreprise sénégalaise qui reçoit des centaines de messages par jour sur WhatsApp, Facebook et Google Reviews, l’analyse de sentiments automatisée identifie immédiatement les clients mécontents qui nécessitent une intervention urgente, détecte les tendances dans les retours clients (un produit qui génère soudainement des avis négatifs), et mesure l’impact d’une campagne marketing sur la perception de la marque.

Méthode 1 : Analyse rapide avec l’API OpenAI

La méthode la plus simple pour démarrer est d’utiliser l’API de ChatGPT. Aucun entraînement de modèle n’est nécessaire, et les résultats sont précis en français. Installez la bibliothèque avec pip install openai, puis utilisez ce script :

from openai import OpenAI
import json

client = OpenAI(api_key="votre-clé-api")

def analyser_sentiment(texte):
    response = client.chat.completions.create(
        model="gpt-4o-mini",
        messages=[
            {
                "rôle": "system",
                "content": "Tu es un analyseur de sentiments. Pour chaque texte, "
                           "retourne un JSON avec: sentiment (positif/négatif/neutre), "
                           "score (0.0 a 1.0), et raison (explication courte)."
            },
            {"rôle": "user", "content": texte}
        ],
        response_format={"type": "json_object"},
        temperature=0
    )
    return json.loads(response.choices[0].message.content)

# Exemples
avis = [
    "Le service était excellent, livraison rapide et produit conforme !",
    "Très déçu, le colis est arrivé abîmé et le SAV ne répond pas.",
    "J'ai reçu ma commande hier, elle correspond à la description.",
    "Wallahi c'est trop bien, je recommande à 100% !"
]

for avis_client in avis:
    résultat = analyser_sentiment(avis_client)
    print(f"Texte: {avis_client}")
    print(f"Sentiment: {résultat}")
    print()

Le paramètre temperature=0 garantit des résultats reproductibles. Le response_format force la sortie en JSON structuré, ce qui facilite le traitement automatique des résultats. Le coût est d’environ 0,0001 dollar par analyse avec gpt-4o-mini, soit environ 1 dollar pour 10 000 avis analysés.

Méthode 2 : Analyse gratuite avec Hugging Face Transformers

Pour une solution gratuite et sans API externe, la bibliothèque Hugging Face Transformers propose des modèles pré-entraînés d’analyse de sentiments. Le modèle nlptown/bert-base-multilingual-uncased-sentiment gère le français nativement :

from transformers import pipeline

# Charger le modèle (téléchargement automatique au premier lancement)
analyseur = pipeline(
    "sentiment-analysis",
    model="nlptown/bert-base-multilingual-uncased-sentiment"
)

# Le modèle retourne un score de 1 à 5 étoiles
avis = [
    "Le service était excellent, livraison rapide !",
    "Très déçu, le colis est arrivé abîmé.",
    "Produit correct, rien de spécial.",
]

résultats = analyseur(avis)
for texte, résultat in zip(avis, résultats):
    etoiles = int(résultat['label'][0])  # Extraire le nombre d'étoiles
    sentiment = "positif" if etoiles >= 4 else "négatif" if etoiles <= 2 else "neutre"
    print(f"{sentiment} ({etoiles}/5) : {texte}")

Pour un modèle spécifiquement entraîné sur le français, utilisez cmarkea/distilcamembert-base-sentiment qui est basé sur CamemBERT et optimisé pour l'analyse de sentiments en français. Installez-le de la même manière en remplaçant le nom du modèle dans la fonction pipeline.

Méthode 3 : Entraîner votre propre modèle

Si vous avez des données spécifiques à votre domaine (avis sur des produits sénégalais, commentaires en franglais ou en wolof), un modèle personnalisé sera plus précis. Le processus de fine-tuning avec Hugging Face est accessible :

from datasets import Dataset
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from transformers import TrainingArguments, Trainer
import numpy as np

# Préparer vos données (exemple simplifié)
données = {
    "text": [
        "Très bon produit, je recommande",
        "Nul, ne fonctionne pas du tout",
        "Service correct, délai respecté",
        # ... ajoutez vos données étiquetées
    ],
    "label": [2, 0, 1]  # 0=négatif, 1=neutre, 2=positif
}

dataset = Dataset.from_dict(données)

# Charger le modèle de base
model_name = "camembert-base"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(
    model_name, num_labels=3
)

# Tokeniser les données
def tokenize(examples):
    return tokenizer(examples["text"], truncation=True, padding=True)

dataset = dataset.map(tokenize, batched=True)

# Configurer l'entraînement
training_args = TrainingArguments(
    output_dir="./mon-modèle-sentiment",
    num_train_epochs=3,
    per_device_train_batch_size=8,
    learning_rate=2e-5,
)

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=dataset,
)

trainer.train()
model.save_pretrained("./mon-modèle-sentiment")

Pour obtenir un modèle performant, vous avez besoin d'au moins 500 exemples étiquetés par catégorie (positif, négatif, neutre). Collectez ces données à partir de vos avis Google, vos messages WhatsApp ou vos commentaires Facebook. L'étiquetage peut être accéléré en utilisant GPT-4 pour pré-étiqueter les données, puis en vérifiant manuellement les cas ambigus.

Application pratique : tableau de bord de réputation

Combinez l'analyse de sentiments avec une visualisation pour créer un tableau de bord de suivi de réputation. Utilisez Pandas pour agréger les résultats par période, par source (Google, Facebook, WhatsApp) et par produit/service. Matplotlib ou Plotly génèrent des graphiques d'évolution du sentiment dans le temps. Streamlit permet de créer une interface web interactive en quelques lignes de code :

import streamlit as st
import pandas as pd
import plotly.express as px

st.title("Tableau de bord - Sentiment clients")

# Charger les données analysées
df = pd.read_csv("resultats_sentiments.csv")

# Graphique d'évolution
fig = px.line(
    df.groupby(['date', 'sentiment']).size().reset_index(name='count'),
    x='date', y='count', color='sentiment',
    title="Évolution du sentiment client"
)
st.plotly_chart(fig)

# Alertes sur les avis négatifs récents
négatifs = df[df['sentiment'] == 'négatif'].tail(10)
if len(négatifs) > 0:
    st.warning(f"{len(négatifs)} avis négatifs récents à traiter")
    st.dataframe(négatifs[['date', 'texte', 'source']])

Lancez le tableau de bord avec streamlit run dashboard.py et accédez-y depuis votre navigateur. Automatisez la collecte des avis avec un script cron quotidien qui interroge l'API Google Business Profile, scrape vos pages Facebook (avec les permissions appropriées), et analyse les nouveaux messages. Ce système vous alerte en temps réel quand un client mécontent nécessite une intervention.

Étape 1 — Définir précisément ce que vous voulez analyser

L'analyse de sentiments couvre des cas très différents : avis clients sur un site e-commerce dakarois, commentaires Facebook d'une marque ivoirienne, tweets en français sur une marque de telco camerounaise, retours d'enquête CSAT d'un service public. Avant de toucher au moindre code, définissez : quelle source, quel volume, quelle granularité (positif/neutre/négatif vs émotion détaillée), quelle langue (français standard, wolof transcrit, nouchi, camfranglais).

Sortie attendue : un cahier des charges d'une page qui répond à « Qui parle, où, en quelle langue, et que ferai-je du résultat dans 7 jours ». Sans cette clarté, vous allez dépenser du temps GPU pour rien.

Étape 2 — Collecter les données proprement et légalement

Pour les avis publics (Google My Business, Trustpilot, Jumia, Glovo), utilisez l'API officielle ou un export CSV manuel. Pour les commentaires Facebook ou Instagram, passez par Meta Graph API v25.0 avec un token de page. Évitez le scraping sauvage qui viole les CGU et expose à un bannissement.

# Exemple : récupérer 100 derniers commentaires d'une page Facebook
curl -G "https://graph.facebook.com/v25.0/PAGE_ID/posts" \
  --data-urlencode "fields=comments{message,created_time,from}" \
  --data-urlencode "limit=100" \
  --data-urlencode "access_token=PAGE_ACCESS_TOKEN"

Sortie attendue : un fichier JSON ou CSV de quelques centaines à milliers de lignes, avec horodatage, texte brut et identifiant anonymisé de l'auteur.

Étape 3 — Choisir entre API IA prête à l'emploi et modèle local

Deux familles d'approches. API hébergée (OpenAI, Anthropic, Mistral) : zéro infra, qualité immédiate, coût à l'usage (compter 0,15 à 1,5 USD pour 1000 messages courts analysés selon le modèle). Modèle local (Ollama avec Llama 3.1 ou Mistral 7B) : zéro coût récurrent, données qui ne sortent pas du VPS, mais GPU recommandé et temps d'installation 2 à 4 heures.

Pour une PME ouest-africaine traitant moins de 10 000 messages par mois, l'API OpenAI ou Claude reste le choix rationnel. Pour un grand compte ou des données sensibles bancaires, Ollama auto-hébergé sur un VPS Hetzner CCX13 (CCX22 idéal) est plus prudent.

Étape 4 — Écrire un prompt d'analyse de sentiments robuste

Un mauvais prompt donne 60 % de précision. Un bon prompt monte à 85-92 % sur du français standard. Trois éléments indispensables : un rôle clair, un format de sortie strict (JSON), des exemples (few-shot).

Tu es un analyste de sentiments spécialisé dans les avis e-commerce
en français d'Afrique de l'Ouest. Pour chaque message, retourne un
JSON strict avec les clés : sentiment (positif/neutre/négatif),
intensite (1 à 5), themes (tableau de mots-clés), langue_detectee.

Exemple :
Entrée : "La livraison à Dakar a pris 3 jours, c'est trop long !"
Sortie : {"sentiment":"négatif","intensite":4,"themes":["livraison","délai"],"langue_detectee":"fr"}

Analyse maintenant : {{message}}

Sortie de référence : un JSON valide à 99 %+ (testez avec JSON.parse côté code), avec sentiment cohérent à la lecture humaine sur un échantillon de 50 cas.

Étape 5 — Industrialiser le traitement par lots

Analyser 5 000 commentaires un par un coûte cher en latence et en quotas. Regroupez par lots de 10 à 20 messages dans un seul appel API quand le modèle l'accepte. OpenAI Batch API et Anthropic Message Batches permettent même un tarif réduit pour les traitements non urgents (24 heures de latence acceptée).

Concrètement, pour 5 000 messages : un script Python ou Node de 50 lignes, parallélisme contrôlé à 5 requêtes simultanées, retry exponentiel sur les erreurs 429. Sortie attendue : traitement complet en 15 à 45 minutes, coût total 1 à 5 USD selon le modèle choisi.

Étape 6 — Visualiser les résultats pour décider vite

Un CSV de 5 000 lignes ne sert à personne. Construisez un tableau de bord minimal : répartition positif/neutre/négatif sur 7 et 30 jours, top 10 des thèmes négatifs, évolution hebdomadaire du sentiment moyen, alerte si plus de 20 % de négatifs sur les 24 dernières heures.

Outils gratuits qui font le job : Metabase auto-hébergé, Looker Studio (ex-Data Studio), ou même un Google Sheets avec graphiques. Sortie attendue : un dashboard d'une page consultable en 30 secondes par le directeur marketing chaque lundi matin.

Étape 7 — Boucler avec l'opérationnel pour générer de la valeur

L'analyse de sentiments sans action = exercice intellectuel. Mettez en place 2 boucles minimales. Boucle courte : tout commentaire négatif d'intensité 5 déclenche un ticket Zendesk ou un message WhatsApp Business à l'équipe support dans les 5 minutes. Boucle longue : top 3 thèmes négatifs du mois remontent dans la roadmap produit du trimestre suivant.

Sortie attendue après 90 jours : baisse mesurable du taux de négatifs sur les thèmes les plus traités, et témoignages internes du support qui rapporte avoir évité une crise grâce à l'alerte temps réel.

Étape 8 — Pièges fréquents et comment les éviter

Premier piège : entraîner ou prompter uniquement sur du français de France. Vos clients à Abidjan, Yaoundé ou Bamako emploient des tournures locales que le modèle interprète mal. Solution : ajoutez 20 exemples few-shot représentatifs de votre marché.

Deuxième piège : confondre négation et sarcasme. « Génial, encore une panne d'Orange Money ce matin » est négatif malgré le mot « génial ». Les modèles récents (GPT-4o, Claude 3.7) gèrent bien le sarcasme, les modèles antérieurs non — c'est un critère de choix décisif.

Troisième piège : oublier d'anonymiser les données avant envoi à une API tierce. Supprimez systématiquement les noms, numéros de téléphone, emails du texte avant l'analyse. Une simple regex en pré-traitement suffit dans 95 % des cas.

Pour explorer plus loin, lisez notre guide d'analyse de données avec ChatGPT et notre méthode de création de chatbot IA.

Étape 9 — Adapter l'analyse aux langues locales et au code-switching

Les commentaires réels en Afrique francophone mélangent souvent français, wolof, bambara, lingala ou nouchi dans une même phrase. Un modèle entraîné uniquement sur du français standard rate ce code-switching. Solutions concrètes : utilisez un modèle multilingue récent (Claude 3.7, GPT-4o, Mistral Large) et testez sur 100 commentaires réels avant industrialisation.

Si la précision tombe sous 80 % sur le code-switching, ajoutez 30 exemples few-shot représentatifs de votre marché. Sortie attendue : précision > 88 % même sur des phrases mélangées, validée par revue manuelle sur un échantillon hebdomadaire.

Étape 10 — Industrialiser sans perdre la qualité dans la durée

Au bout de 6 mois, le risque est l'auto-pilote. Mettez en place un audit mensuel : 50 commentaires tirés au sort, double étiquetage humain, comparaison avec la sortie IA, calcul du taux de divergence. Si le taux dépasse 15 %, alerte rouge — il faut réviser le prompt ou changer de modèle.

Documentez chaque évolution de prompt dans un Git interne ou un Notion. Sortie attendue : un historique versionné qui permet de revenir en arrière en cas de régression, et un dashboard de précision suivi sur 12 mois.

مشاركة