Auto-hébergement de Sentiment et d'Émotion pour DiscourseAI

Le plugin Discourse AI prend en charge la demande de classification des émotions et du sentiment des nouveaux messages. Ces données sont stockées dans la base de données et peuvent être utilisées dans les rapports et les tableaux de bord d’administration.

Discourse AI prend en charge deux types de classification, chacun nécessitant son propre modèle :

  • Sentiment — classe les messages en positif, négatif ou neutre (en utilisant cardiffnlp/twitter-roberta-base-sentiment-latest)
  • Émotion — classe les messages selon 28 étiquettes d’émotion telles que joie, colère, surprise, etc. (en utilisant SamLowe/roberta-base-go_emotions)

Pour obtenir à la fois des données de sentiment et d’émotion dans vos tableaux de bord, vous devez exécuter les deux modèles.

Exécution avec HuggingFace TEI

HuggingFace propose une image de conteneur formidable qui vous permet de démarrer rapidement.

Modèle de sentiment

mkdir -p /opt/tei-sentiment-cache
docker run --rm --gpus all --shm-size 1g -p 8081:80 \
  -v /opt/tei-sentiment-cache:/data \
  ghcr.io/huggingface/text-embeddings-inference:latest \
  --model-id cardiffnlp/twitter-roberta-base-sentiment-latest \
  --revision refs/pr/30

Cela devrait vous permettre de démarrer une instance locale de cardiffnlp/twitter-roberta-base-sentiment-latest, un modèle open source capable de classer les messages en positif/négatif/neutre.

Vous pouvez vérifier son bon fonctionnement avec :

curl http://localhost:8081/ \
    -X POST \
    -H 'Content-Type: application/json' \
    -d "{ \"inputs\": \"I am happy\" }"

En fonctionnement normal, cela devrait renvoyer un tableau de niveaux de confiance pour chaque étiquette.

Modèle d’émotion

Pour obtenir également une classification des émotions, exécutez un deuxième conteneur avec le modèle d’émotion :

mkdir -p /opt/tei-emotion-cache
docker run --rm --gpus all --shm-size 1g -p 8082:80 \
  -v /opt/tei-emotion-cache:/data \
  ghcr.io/huggingface/text-embeddings-inference:latest \
  --model-id SamLowe/roberta-base-go_emotions

Modèles pris en charge

Rendre le service disponible pour votre instance Discourse

La plupart du temps, vous l’exécuterez sur un serveur dédié en raison de l’accélération par GPU. Dans ce cas, je recommande d’utiliser un proxy inverse, de gérer la terminaison TLS et de sécuriser le point de connexion afin qu’il ne puisse être accédé que par votre instance Discourse.

Configuration de Discourse AI

Discourse AI inclut des paramètres de site pour configurer le serveur d’inférence pour les modèles open source. Vous devez le pointer vers votre serveur en utilisant le paramètre ai_sentiment_model_configs.

Ce paramètre accepte un tableau JSON de configurations de modèle. Chaque entrée nécessite :

Champ Description
model_name L’ID du modèle HuggingFace (par exemple cardiffnlp/twitter-roberta-base-sentiment-latest)
endpoint L’URL de votre instance TEI (par exemple https://your-server:8081)
api_key Clé API pour le point de connexion (peut être laissée vide si non requise)

Pour obtenir à la fois des tableaux de bord de sentiment et d’émotion, ajoutez une entrée pour chaque modèle que vous exécutez. Par exemple, si vous exécutez les deux modèles localement :

  • Entrée 1 : model_name cardiffnlp/twitter-roberta-base-sentiment-latest, endpoint https://your-server:8081
  • Entrée 2 : model_name SamLowe/roberta-base-go_emotions, endpoint https://your-server:8082

Ensuite, activez la classification en basculant ai_sentiment_enabled.

3 « J'aime »

Des projets sont-ils prévus pour prendre en charge d’autres modèles dans des langues autres que l’anglais ?

1 « J'aime »

@Falco si l’on décide d’exécuter ceci sur le même serveur qui exécute Discourse (par exemple, nous avons un déploiement très petit avec quelques milliers de publications), pourriez-vous mettre à jour les instructions pour décrire :

  1. Comment Discourse peut s’intégrer à une instance locale de l’image conteneur HuggingFace TEI
  2. Suggestions sur la quantité de RAM/disque supplémentaire nécessaire pour exécuter ce qui précède (par exemple, si la base Discourse fonctionne sur 2 Go de RAM avec 20 Go de disque)

J’ai donc configuré une nouvelle instance Discourse auto-hébergée et j’essaie de configurer les sentiments. Voici mes ai_sentiment_model_configs :

Clé Valeur
nom du modèle cardiffnlp/twitter-roberta-base-sentiment-latest
point de terminaison https://my_own_instance
clé api [vide]

Et cela fonctionne, en quelque sorte, j’obtiens le graphique à barres des sentiments.

Cependant, le tableau des émotions est vide. Ce document semble incomplet, ou mal formulé pour que je comprenne ce qui doit être fait.

Dois-je exécuter un autre conteneur Docker, avec un identifiant de modèle différent (roberta-base-go_emotions ?), ou autre chose ? Que dois-je faire pour que ce tableau des émotions soit rempli ?

Je préférerais auto-héberger ces services si possible. Merci d’avance si quelqu’un peut m’indiquer la bonne direction.

Pour les émotions, vous devez également exécuter

aussi.

3 « J'aime »

Merci. Je lance donc un deuxième conteneur Docker avec quelques ajustements, comme ceci :

mkidr -p /opt/tei-cache2
docker run --detach --rm --gpus all --shm-size 1g -p 8082:80 \
  -v /opt/tei-cache2:/data \
  ghcr.io/huggingface/text-embeddings-inference:latest \
  --model-id SamLowe/roberta-base-go_emotions

et j’ajoute une nouvelle entrée dans ai_sentiment_model_configs et tout fonctionne maintenant. Merci. :slight_smile:

1 « J'aime »

J’ai foncé tête baissée dans un mur de briques de ne pas savoir ce que je faisais en essayant de faire fonctionner cela sur une instance EC2 sans GPU. Du moins, au mieux de mes capacités et de ma compréhension extrêmement limitées, essayer de faire cela avec une instance uniquement sur CPU signifie beaucoup plus de travail de configuration que je ne peux comprendre. Les versions cpu de ghcr.io/huggingface/text-embeddings-inference refusent de charger l’un ou l’autre des deux modèles d’écoute ; Claude et GPT5 me disent tous deux que je dois les convertir en modèles ONNX avec une série d’outils Python, et c’est là que j’ai abandonné.

(Il est aussi très possible que je sois juste bête et que je manque une étape évidente !)

Une chose que nous prévoyons est de permettre aux LLM d’agir comme analyse de sentiments

De cette façon, vous pouvez connecter un modèle peu coûteux comme Gemini Flash 2.5 (ou même nano) et l’utiliser pour l’analyse des sentiments.

6 « J'aime »

Nous essayons d’utiliser cette fonctionnalité avec Azure AI Language (depuis notre instance Discourse auto-hébergée) - car nous utilisons déjà notre abonnement Azure pour intégrer GPT-4.5 à Discourse (pour la fonctionnalité de résumé et de chatbot) :

  • mais nous n’obtenons aucune donnée dans le tableau de bord de sentiment, et nous pouvons voir ces erreurs dans les journaux :

Discourse AI : Erreurs lors de la classification en bloc : Échec de la classification de 208 messages (exemples d'ids : 2256, 909, 2270, 2260, 2797) : JSON::ParserError : Une chaîne vide n'est pas une chaîne JSON valide.

La trace montre que Discourse essaie peut-être d’utiliser HuggingFace - sont-ce les seuls modèles pris en charge pour le moment ?

Merci,

N

Oui, nous avons une implémentation très spécifique, nous réfléchissons à la manière de la rendre plus générique.

Je suis optimiste quant au fait de laisser simplement les LLM retourner une sortie structurée pour le sentiment, car cela ouvre la porte à de nombreuses options et je pense qu’en tant que tendance, les API “hyper spécifiques” sont remplacées par des API “hyper générales” que les LLM fournissent.

3 « J'aime »

Existe-t-il un moyen simple de faire fonctionner cela sur WP auto-hébergé sans configurer votre propre instance pour la classification des sentiments ?

Merci Sam, ce serait formidable. Entre-temps, nous étudierons la possibilité d’exécuter l’un des modèles HuggingFace pris en charge sur une machine virtuelle Azure…

J’essaie de configurer l’analyse des sentiments en auto-hébergement, mais lorsque j’essaie d’exécuter l’image Docker, je rencontre des erreurs :

0: erreur de requête : erreur client HTTP (404 Not Found) pour l'URL (https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment-latest/resolve/main/tokenizer.json)
1: erreur client HTTP (404 Not Found) pour l'URL (https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment-latest/resolve/main/tokenizer.json)

J’utilise : docker run --rm --shm-size 1g -p 8083:80 -v /opt/tei-sentiment-cache:/data ghcr.io/huggingface/text-embeddings-inference:cpu-1.9 --model-id cardiffnlp/twitter-roberta-base-sentiment-latest

Cela n’est-il pas pris en charge sans support GPU, ou y a-t-il eu un changement dans la configuration ?

Ah, il semble qu’ils n’aient pas encore fusionné ma PR vers le modèle, vous devez donc pointer directement vers ma branche. J’ai mis à jour la commande Docker pour le modèle de sentiment ci-dessus ; essayez-la avec la ligne supplémentaire pour pointer vers la branche.

2 « J'aime »

Merci, ça a l’air d’avoir fonctionné !

1 « J'aime »