Self-Hosting von Sentiment und Emotion für DiscourseAI

Das Discourse AI-Plugin unterstützt die Anforderung einer Emotions- und Sentiment-Klassifizierung neuer Beiträge. Die Ergebnisse werden in der Datenbank gespeichert und können in Berichten sowie in Admin-Dashboards verwendet werden.

Discourse AI unterstützt zwei Arten der Klassifizierung, für die jeweils ein eigenes Modell erforderlich ist:

  • Sentiment — Klassifiziert Beiträge als positiv, negativ oder neutral (unter Verwendung von cardiffnlp/twitter-roberta-base-sentiment-latest)
  • Emotion — Klassifiziert Beiträge über 28 Emotionslabels wie Freude, Wut, Überraschung usw. (unter Verwendung von SamLowe/roberta-base-go_emotions)

Um sowohl Sentiment- als auch Emotionsdaten in Ihren Dashboards zu erhalten, müssen Sie beide Modelle ausführen.

Ausführung mit HuggingFace TEI

HuggingFace bietet ein hervorragendes Container-Image, mit dem Sie schnell starten können.

Sentiment-Modell

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

Dadurch wird eine lokale Instanz von cardiffnlp/twitter-roberta-base-sentiment-latest gestartet, einem offenen Modell, das Beiträge in positiv/negativ/neutral klassifizieren kann.

Sie können überprüfen, ob es funktioniert, mit:

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

Im Normalbetrieb sollte dies ein Array mit Konfidenzwerten für jedes Label zurückgeben.

Emotions-Modell

Um auch eine Emotionsklassifizierung zu erhalten, führen Sie einen zweiten Container mit dem Emotionsmodell aus:

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

Unterstützte Modelle

Für Ihre Discourse-Instanz verfügbar machen

In den meisten Fällen führen Sie dies auf einem dedizierten Server aus, aufgrund der GPU-Beschleunigung. In diesem Fall empfehle ich den Einsatz eines Reverse Proxys, die TLS-Terminierung und die Sicherung des Endpunkts, sodass nur Ihre Discourse-Instanz eine Verbindung herstellen kann.

Konfiguration von Discourse AI

Discourse AI enthält Site-Einstellungen zur Konfiguration des Inference-Servers für Open-Source-Modelle. Sie sollten diesen mit der Einstellung ai_sentiment_model_configs auf Ihren Server verweisen.

Diese Einstellung akzeptiert ein JSON-Array von Modellkonfigurationen. Jeder Eintrag erfordert:

Feld Beschreibung
model_name Die HuggingFace-Modell-ID (z. B. cardiffnlp/twitter-roberta-base-sentiment-latest)
endpoint Die URL Ihrer TEI-Instanz (z. B. https://your-server:8081)
api_key API-Schlüssel für den Endpunkt (kann leer gelassen werden, falls nicht erforderlich)

Um sowohl Sentiment- als auch Emotions-Dashboards zu erhalten, fügen Sie einen Eintrag für jedes von Ihnen ausgeführte Modell hinzu. Wenn Sie beispielsweise beide Modelle lokal ausführen:

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

Aktivieren Sie danach die Klassifizierung, indem Sie ai_sentiment_enabled umschalten.

3 „Gefällt mir“

Gibt es Pläne, andere Modelle in anderen Sprachen als Englisch zu unterstützen?

1 „Gefällt mir“

[Zitat=“Falco, Beitrag:1, Thema:334451”]
Die meiste Zeit wird dies auf einem dedizierten Server mit GPU-Beschleunigung laufen
[/Zitat]

@Falco, wenn jemand beschließt, dies auf demselben Server auszuführen, auf dem Discourse läuft (z.B. wir haben eine sehr kleine Installation mit einigen Tausend Beiträgen), könntest du die Anweisungen aktualisieren, um aufzuzeigen:

  1. Wie kann Discourse mit einer lokalen Instanz des HuggingFace TEI-Container-Images integriert werden
  2. Vorschläge, wie viel zusätzlicher RAM/Plattenplatz benötigt wird, um das oben genannte auszuführen (z.B. wenn das Basis-Discourse auf 2 GB RAM mit 20 GB Festplatte läuft)

Ich habe eine neue selbst gehostete Discourse-Instanz eingerichtet und versuche, Sentiments einzurichten. Hier sind meine ai_sentiment_model_configs –

Schlüssel Wert
model name cardiffnlp/twitter-roberta-base-sentiment-latest
endpoint https://my_own_instance
api_key [leer]

Und es funktioniert, irgendwie, ich bekomme das Sentiment-Balkendiagramm.

Die Emotionstabelle ist jedoch leer. Dieses Dokument sieht unvollständig oder schlecht formuliert aus, als dass ich begreifen könnte, was getan werden muss.

Soll ich einen weiteren Docker-Container mit einer anderen Modell-ID (roberta-base-go_emotions?) ausführen oder etwas anderes? Was muss ich tun, damit diese Emotionstabelle gefüllt wird?

Ich würde diese Dienste, wenn möglich, gerne selbst hosten. Vielen Dank im Voraus, wenn mir jemand in die richtige Richtung weisen kann.

Für Emotionen müssen Sie auch die

ausführen.

3 „Gefällt mir“

Danke. Ich starte also einfach einen zweiten Docker-Container mit einigen Anpassungen, so:\n\nmkdir -p /opt/tei-cache2\ndocker run --detach --rm --gpus all --shm-size 1g -p 8082:80 \\\n -v /opt/tei-cache2:/data \\\n ghcr.io/huggingface/text-embeddings-inference:latest \\\n --model-id SamLowe/roberta-base-go_emotions\n\nund füge einen neuen Eintrag in ai_sentiment_model_configs hinzu, und jetzt funktioniert alles. Danke. :slight_smile:

1 „Gefällt mir“

Ich bin mit meinem Latein am Ende, was das Arbeiten auf einer EC2-Instanz ohne GPU angeht. Soweit meine extrem begrenzten Fähigkeiten und mein Verständnis reichen, bedeutet die Arbeit mit einer reinen CPU-Instanz mehr Konfigurationsaufwand, als ich verstehen kann. Die cpu-Versionen von ghcr.io/huggingface/text-embeddings-inference weigern sich, eines der beiden Modelle zu laden. Claude und GPT5 sagen mir beide, dass ich sie mit einer Reihe von Python-Tools in ONNX-Modelle konvertieren muss, und da habe ich dann aufgegeben.

(Es ist auch sehr gut möglich, dass ich einfach nur dumm bin und einen offensichtlichen Schritt übersehe!)

Eine Sache, die wir planen, ist, LLMs als Sentiment-Analyse zu ermöglichen.

Auf diese Weise können Sie ein günstiges Modell wie Gemini Flash 2.5 (oder sogar Nano) anschließen und es für die Sentiment-Analyse verwenden.

7 „Gefällt mir“

Wir versuchen, diese Funktion mit Azure AI Language (von unserer selbst gehosteten Discourse-Instanz aus) zu nutzen – da wir bereits unser Azure-Abonnement zur Integration von GPT-4.5 mit Discourse (für Zusammenfassungs- und Chatbot-Funktionalität) verwenden:

– aber wir erhalten keine Daten im Sentiment-Dashboard und sehen diese Fehler in den Protokollen:

Discourse AI: Errors during bulk classification: Failed to classify 208 posts (example ids: 2256, 909, 2270, 2260, 2797) : JSON::ParserError : An empty string is not a valid JSON string.

Der Backtrace zeigt, dass Discourse möglicherweise HuggingFace zu verwenden versucht – sind dies im Moment die einzigen unterstützten Modelle?

Danke,

N

Ja, wir haben eine sehr spezifische Implementierung, wir überlegen, wie wir sie allgemeiner gestalten können.

Ich bin optimistisch, LLMs einfach strukturiertes Output für Sentiment zurückgeben zu lassen, da dies viele Optionen eröffnet und ich das Gefühl habe, dass als Trend „hyper-spezifische“ APIs durch „hyper-generelle“ APIs ersetzt werden, die LLMs bieten.

3 „Gefällt mir“

Gibt es eine einfache Möglichkeit, dies auf selbst gehostetem WP zum Laufen zu bringen, ohne eine eigene Instanz für die Sentiment-Klassifizierung einzurichten?

Danke Sam – das wäre großartig. In der Zwischenzeit werden wir untersuchen, wie wir eines der unterstützten HuggingFace-Modelle auf einer Azure VM ausführen können…

Ich versuche, das selbst gehostete Sentiment-Setup einzurichten, aber beim Ausführen des Docker-Images erhalte ich Fehler:

0: request error: HTTP status client error (404 Not Found) for url (https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment-latest/resolve/main/tokenizer.json)
1: HTTP status client error (404 Not Found) for url (https://huggingface.co/cardiffnlp/twitter-roberta-base-sentiment-latest/resolve/main/tokenizer.json)

Ich verwende: 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

Ist dies ohne GPU-Unterstützung nicht unterstützt oder hat sich etwas in der Einrichtung geändert?

Oh, sieht so aus, als hätten sie meinen PR zum Modell noch nicht gemergt, also musst du direkt auf meinen Branch verweisen. Ich habe den Docker-Befehl für das Sentiment-Modell oben aktualisiert – probiere es mit der zusätzlichen Zeile aus, um auf den Branch zu verweisen.

2 „Gefällt mir“

Danke, sieht so aus, als hätte das funktioniert!

1 „Gefällt mir“

Nachtrag zu dieser Nachricht aus August 2025: Haben Sie vielleicht einen Zeitrahmen (ETA) für die Verbindung zu anderen LLMs?

Ich mache positive Erfahrungen mit Gemini 3 Flash, das Embeddings ohne eigenen AI-Host erstellen kann. Bald werde ich auf Gemini 3.1 Flash-Lite umsteigen, um Kosten zu senken. Es wäre großartig, diese Gemini-LLMs für die Sentiment-Analyse nutzen zu können. Ich nutze Discourse wirklich gerne jeden Tag. Die Erfahrung ist herrlich.

Vielen Dank.

1 „Gefällt mir“

Ich habe es gestern hinzugefügt, es sollte bald auf Ihrer Website erscheinen.

2 „Gefällt mir“