为 DiscourseAI 自托管情感与情绪分析

Discourse AI 插件支持对新帖子进行情绪/情感分类请求,相关数据将存储在数据库中,并可用于报告和管理员仪表板。

Discourse AI 支持两种分类类型,每种类型都需要独立的模型:

  • 情感(Sentiment) — 将帖子分类为正面、负面或中性(使用 cardiffnlp/twitter-roberta-base-sentiment-latest
  • 情绪(Emotion) — 将帖子分类为 28 种情绪标签,如喜悦、愤怒、惊讶等(使用 SamLowe/roberta-base-go_emotions

若要在仪表板中同时获取情感和情绪数据,您需要运行两个模型。

使用 HuggingFace TEI 运行

HuggingFace 提供了一个出色的容器镜像,可帮助您快速启动。

情感模型

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

这将使您快速启动并运行 cardiffnlp/twitter-roberta-base-sentiment-latest 的本地实例,该开源模型可将帖子分类为正面/负面/中性。

您可以通过以下命令检查其是否正常工作:

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

在正常运行情况下,该命令应返回每个标签的置信度数组。

情绪模型

若要同时获取情绪分类,请运行第二个包含情绪模型的容器:

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

支持的模型

使其在您的 Discourse 实例中可用

大多数情况下,由于 GPU 加速的需求,您将在专用服务器上运行此服务。在这种情况下,建议您运行反向代理,进行 TLS 终止,并保护该端点,确保仅允许您的 Discourse 实例连接。

配置 Discourse AI

Discourse AI 包含站点设置,用于配置开源模型的推理服务器。您应使用 ai_sentiment_model_configs 设置将其指向您的服务器。

该设置接受一个模型配置的 JSON 数组。每个条目需要以下字段:

字段 描述
model_name HuggingFace 模型 ID(例如 cardiffnlp/twitter-roberta-base-sentiment-latest
endpoint 您的 TEI 实例 URL(例如 https://your-server:8081
api_key 端点的 API 密钥(如果不需要可留空)

若要同时获取情感和情绪仪表板,请为每个正在运行的模型添加一个条目。例如,如果您在本地运行两个模型:

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

完成上述步骤后,通过切换 ai_sentiment_enabled 启用分类功能。

3 个赞

有计划支持英语以外的其他语言模型吗?

1 个赞

@Falco 如果有人决定在运行 Discourse 的同一服务器上运行此程序(例如,我们有一个只有几千个帖子的非常小的部署),您能否更新说明以概述:

  1. Discourse 如何与 HuggingFace TEI 容器映像的本地实例集成
  2. 运行上述程序所需的额外 RAM/磁盘量(例如,如果基础 Discourse 在 2GB RAM 和 20GB 磁盘上运行)

我已经设置了一个新的自托管 Discourse 实例,并正在尝试设置情感分析。这是我的 ai_sentiment_model_configs

模型名称 cardiffnlp/twitter-roberta-base-sentiment-latest
端点 https://my_own_instance
api_key [空白]

它在某种程度上奏效了,我得到了情感条形图。

但是,“情绪”表是空的。这份文档看起来不完整,或者措辞不当,我无法理解需要做什么。

我需要运行另一个 Docker 容器,使用不同的模型 ID(roberta-base-go_emotions?),还是其他什么?我需要做什么才能让“情绪”表填满?

如果可能的话,我更愿意自托管这些服务。如果有人能给我指明方向,我将不胜感激。

对于情绪,您还需要运行

3 个赞

谢谢。所以我只需运行第二个 Docker 容器并进行一些调整,如下所示:

mkd ir -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 语言(从我们自托管的 Discourse 实例)一起使用——因为我们已经在将 Azure 订阅用于将 GPT-4.5 与 Discourse 集成(用于摘要和聊天机器人功能):

  • 但我们在情绪仪表板中没有获得任何数据,并且在日志中可以看到这些错误:

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

我们有一个非常具体的实现,我们正在考虑如何使其更加通用

我对让大型语言模型返回结构化的情感输出持乐观态度,因为它为那里提供了许多选择,而且我认为,作为一种趋势,“超特定”API正被大型语言模型提供的“超通用”API所取代。

3 个赞

有没有简单的方法可以在不设置自己的实例来进行情感分类的情况下,在自托管的 WordPress 上运行此程序?

谢谢 Sam——那太好了。在此期间,我们将研究在 Azure VM 上运行一个受支持的 HuggingFace 模型……

我尝试设置自托管的情感分析服务,但在运行 Docker 镜像时遇到了错误:

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)

我使用的命令是: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

这是否意味着该模型在没有 GPU 支持的情况下无法运行,还是设置方法发生了变化?

哦,看起来他们还没有合并 我的模型 PR,因此你需要直接指向我的分支。我已经在上文中更新了情感模型的 Docker 命令,请尝试添加额外的一行来指向该分支。

2 个赞

谢谢,看起来起作用了!

1 个赞