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

Le plugin Discourse AI prend en charge la demande de classification des émotions/sentiments des nouveaux messages, qui est stockée dans la base de données et peut être utilisée 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 comme positifs, négatifs ou neutres (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 les 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 fournit une image conteneur impressionnante qui peut vous permettre 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

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

Vous pouvez vérifier si cela fonctionne avec

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

Ce qui devrait retourner un tableau de confiance pour chaque étiquette en fonctionnement normal.

Modèle d’émotion

Pour obtenir également la 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

Mise à disposition pour votre instance Discourse

La plupart du temps, vous exécuterez ceci sur un serveur dédié en raison de l’accélération GPU. Lorsque vous le faites, je vous recommande d’exécuter un proxy inverse, d’effectuer la terminaison TLS et de sécuriser le point de terminaison afin qu’il ne puisse être connecté que par votre instance Discourse.

Configuration de Discourse AI

Discourse AI inclut des paramètres du 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 terminaison (peut être laissé vide si non requis)

Pour obtenir les 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

Après cela, 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…