DiscourseAI向け感情・センチメントのセルフホスティング

Discourse AI プラグインは、新しい投稿の感情/センチメント分類をリクエストする機能をサポートしており、これはデータベースに保存され、レポートや管理ダッシュボードで使用できます。

HuggingFace TEI での実行

HuggingFace は、すぐに実行できる素晴らしいコンテナイメージを提供しています。

例:

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

これにより、投稿をポジティブ/ネガティブ/ニュートラルに分類できるオープンモデル「cardiffnlp/twitter-roberta-base-sentiment-latest」のローカルインスタンスをすぐに利用できるようになります。

以下のコマンドで動作を確認できます。

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

通常どおり動作していれば、各ラベルに対する信頼度の配列が返されるはずです。

サポートされているモデル

Discourse インスタンスで利用可能にする

多くの場合、GPU による高速化のため、専用サーバーで実行することになります。その場合、リバースプロキシを実行し、TLS 終端を行い、Discourse インスタンスからのみ接続できるようにエンドポイントを保護することをお勧めします。

Discourse AI の設定

Discourse AI には、オープンソースモデルの推論サーバーを設定するためのサイト設定が含まれています。ai_sentiment_model_configs 設定を使用して、サーバーを指定する必要があります。

その後、ai_sentiment_enabled を切り替えて分類を有効にします。

「いいね!」 2

英語以外の言語の他のモデルをサポートする計画はありますか?

「いいね!」 1

@Falco、もしこれをDiscourseを実行しているのと同じサーバーで実行することにした場合(例えば、数千件の投稿がある非常に小規模なデプロイメントの場合)、以下の手順を更新していただけますでしょうか。

  1. HuggingFace TEIコンテナイメージのローカルインスタンスとDiscourseを連携させる方法
  2. 上記を実行するために必要な追加のRAM/ディスク容量の提案(例えば、ベースのDiscourseが2GB RAMと20GBディスクで実行されている場合)

新しいセルフホストのDiscourseインスタンスを設定し、センチメントをセットアップしようとしています。これが私の ai_sentiment_model_configs です。

キー
model name cardiffnlp/twitter-roberta-base-sentiment-latest
endpoint https://my_own_instance
api_key [blank]

そして、それはある程度機能し、センチメントの棒グラフが表示されます。

しかし、感情のテーブルが空です。このドキュメントは不完全か、私が理解するには言葉足らずのようです。

別のDockerコンテナを、異なるモデルID(roberta-base-go_emotions?)で実行する必要がありますか、それとも何か他のことですか?感情のテーブルを埋めるために何をする必要がありますか?

可能であれば、これらのサービスをセルフホストしたいです。誰かが私を正しい方向に向かわせてくれれば幸いです。

感情については、以下を実行する必要があります。

も。

「いいね!」 3

ありがとうございます。それでは、次のようにいくつかの調整を加えて、2番目のDockerコンテナを実行します。

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

そして、ai_sentiment_model_configsに新しいエントリを追加すると、すべて正常に動作するようになります。ありがとうございました。 :slight_smile:

「いいね!」 1

GPUなしでこれをEC2インスタンスで動作させようとして、自分が何をやっているのか全く分からないというレンガの壁に顔面から突っ込んだ。少なくとも、私の非常に限られた能力と理解の範囲では、CPUのみのインスタンスでこれをやろうとすると、理解できないほど多くの設定作業が必要になる。ghcr.io/huggingface/text-embeddings-inferencecpu バージョンは、どちらのリスニングモデルもロードしようとしない。ClaudeとGPT5は両方とも、Pythonツール一式を使ってONNXモデルに変換する必要があると言っており、そこで私はギブアップした。

(私が単に愚かで、明白なステップを見逃している可能性も非常に高い!)

私たちが計画していることの一つは、LLMをセンチメント分析として利用できるようにすることです。

そうすれば、Gemini Flash 2.5(あるいはNano)のような安価なモデルを接続して、センチメント分析に使用できます。

「いいね!」 6

Azure AI Language(セルフホストのDiscourseインスタンスから)でこの機能を使用しようとしています。GPT-4.5をDiscourse(要約およびチャットボット機能用)に統合するためにAzureサブスクリプションをすでに利用しているためです。

しかし、センチメントダッシュボードにデータが表示されず、ログに次のエラーが表示されています。

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.

バックトレースによると、DiscourseはHuggingFaceを使用しようとしている可能性があります。現時点ではこれらのモデルのみがサポートされていますか?

ありがとうございます。

N

はい、私たちは非常に特殊な実装をしており、それをより汎用的にする方法を考えています。

LLMにセンチメントの構造化された出力を返させることには非常に前向きです。なぜなら、それは多くの選択肢を開くからです。そして、トレンドとして「超特化型」APIは、LLMが提供する「超汎用型」APIに取って代わられつつあると感じています。

「いいね!」 1

自己ホスト型WordPressでセンチメント分類用のインスタンスをセットアップせずにこれを簡単に実行する方法はありますか?

サム、ありがとうございます。それは素晴らしいでしょう。それまでの間、Azure VMでサポートされているHuggingFaceモデルのいずれかを実行することを検討します…