Auto-hospedagem de sentimento e emoção para DiscourseAI

O plugin Discourse AI tem suporte para solicitar a classificação de emoção/sentimento de novas postagens, que é armazenada no banco de dados e pode ser usada em relatórios e painéis administrativos.

Executando com HuggingFace TEI

O HuggingFace fornece uma imagem de contêiner incrível que pode colocá-lo em funcionamento rapidamente.

Por exemplo:

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

Isso deve colocá-lo em funcionamento com uma instância local de ‘cardiffnlp/twitter-roberta-base-sentiment-latest’, um modelo aberto que pode classificar postagens em positivo/negativo/neutro.
Você pode verificar se está funcionando com

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

O que deve retornar uma matriz de confiança para cada rótulo em operação normal.

Modelos suportados

Tornando-o disponível para sua instância Discourse

Na maioria das vezes, você estará executando isso em um servidor dedicado devido à aceleração da GPU. Ao fazer isso, recomendo executar um proxy reverso, fazer terminação TLS e proteger o endpoint para que ele só possa ser conectado por sua instância Discourse.

Configurando o Discourse AI

O Discourse AI inclui configurações do site para configurar o servidor de inferência para modelos de código aberto. Você deve apontá-lo para seu servidor usando a configuração ai_sentiment_model_configs.

Depois disso, ative a classificação alternando ai_sentiment_enabled.

2 curtidas

Há planos para dar suporte a outros modelos em idiomas além do inglês?

1 curtida

@Falco, se alguém decidir executar isso no mesmo servidor que executa o Discourse (por exemplo, temos uma implantação muito pequena com alguns milhares de postagens), você poderia atualizar as instruções para descrever:

  1. Como o Discourse pode se integrar a uma instância local da imagem do contêiner HuggingFace TEI?
  2. Sugestões sobre quanta RAM/disco adicional é necessário para executar o acima (por exemplo, se o Discourse base estiver sendo executado com 2 GB de RAM e 20 GB de disco)?

Configurei uma nova instância auto-hospedada do Discourse e estou tentando configurar sentimentos. Esta é a minha configuração de ai_sentiment_model_configs -

Chave Valor
nome do modelo cardiffnlp/twitter-roberta-base-sentiment-latest
endpoint https://my_own_instance
api_key [em branco]

E funciona, mais ou menos, recebo o gráfico de barras de sentimento.

No entanto, a tabela de Emoções está vazia. Este documento parece incompleto ou mal redigido para que eu entenda o que precisa ser feito.

Devo executar outro contêiner Docker, com um ID de modelo diferente (roberta-base-go_emotions?), ou outra coisa? O que preciso fazer para preencher essa tabela de emoções?

Preferiria auto-hospedar esses serviços, se possível. Agradeço antecipadamente se alguém puder me indicar a direção certa.

Para emoções, você também precisa executar o

também.

3 curtidas

Obrigado. Então eu apenas executo um segundo contêiner docker com alguns ajustes, assim:

mkdír -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

e adiciono uma nova entrada em ai_sentiment_model_configs e está tudo funcionando agora. Obrigado. :slight_smile:

1 curtida

Bati de cara numa parede de tijolos por não saber o que diabos estou fazendo ao tentar fazer isso funcionar numa instância EC2 sem GPU. Pelo menos, com as minhas habilidades e compreensão extremamente limitadas aqui, tentar fazer isso com uma instância apenas com CPU significa muito mais trabalho de configuração do que consigo entender. As versões cpu de ghcr.io/huggingface/text-embeddings-inference recusam-se a carregar qualquer um dos dois modelos de escuta; Claude e GPT5 dizem-me que preciso de os converter para modelos ONNX com um monte de ferramentas python, e foi aí que desisti.

(Também é muito possível que eu seja apenas burro e esteja a perder um passo óbvio!)

Uma coisa que estamos planejando é permitir que os LLMs atuem como análise de sentimento

Dessa forma, você pode conectar um modelo barato como o Gemini Flash 2.5 (ou até mesmo o nano) e usá-lo para análise de sentimento.

6 curtidas

Estamos tentando usar este recurso com o Azure AI Language (de nossa instância auto-hospedada do Discourse) - pois já estamos usando nossa assinatura do Azure para integrar o GPT-4.5 ao Discourse (para funcionalidade de resumo e chatbot):

  • mas não estamos recebendo dados no painel de sentimento e podemos ver estes erros nos logs:

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.

O backtrace mostra que o Discourse pode estar tentando usar o HuggingFace - estes são os únicos modelos suportados no momento?

Obrigado,

N

Sim, temos uma implementação muito específica, estamos pensando em como torná-la mais genérica.

Sou otimista em apenas deixar os LLMs retornarem saídas estruturadas para sentimento, pois isso abre portas para muitas opções e sinto que, como tendência, as APIs “hiper específicas” estão sendo substituídas pelas APIs “hiper gerais” que os LLMs fornecem.

1 curtida

Existe alguma maneira simples de colocar isso para funcionar no WP auto-hospedado sem configurar sua própria instância para a classificação de sentimento?

Obrigado Sam - isso seria ótimo. Enquanto isso, vamos investigar a execução de um dos modelos HuggingFace suportados em uma VM do Azure…