Auto-alojamiento de sentimiento y emoción para DiscourseAI

El plugin Discourse AI tiene soporte para solicitar la clasificación de emoción/sentimiento de las nuevas publicaciones, la cual se almacena en la base de datos y puede utilizarse en informes y paneles de administración.

Discourse AI admite dos tipos de clasificación, cada uno requiere su propio modelo:

  • Sentimiento — clasifica las publicaciones como positivas, negativas o neutrales (utilizando cardiffnlp/twitter-roberta-base-sentiment-latest)
  • Emoción — clasifica las publicaciones en 28 etiquetas de emoción como alegría, ira, sorpresa, etc. (utilizando SamLowe/roberta-base-go_emotions)

Para obtener datos de sentimiento y emoción en sus paneles, debe ejecutar ambos modelos.

Ejecución con HuggingFace TEI

HuggingFace proporciona una increíble imagen de contenedor que puede hacer que comience rápidamente.

Modelo de sentimiento

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

Esto debería ponerlo en funcionamiento con una instancia local de cardiffnlp/twitter-roberta-base-sentiment-latest, un modelo abierto que puede clasificar publicaciones como positivas/negativas/neutrales.

Puede comprobar si está funcionando con

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

Lo que debería devolver una matriz de confianza para cada etiqueta bajo un funcionamiento normal.

Modelo de emoción

Para obtener también la clasificación de emoción, ejecute un segundo contenedor con el modelo de emoción:

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

Modelos compatibles

Ponerlo a disposición de su instancia de Discourse

La mayoría de las veces, lo ejecutará en un servidor dedicado debido a la aceleración de la GPU. Al hacerlo, recomiendo ejecutar un proxy inverso, realizar la terminación TLS y proteger el endpoint para que solo pueda ser conectado por su instancia de Discourse.

Configuración de Discourse AI

Discourse AI incluye configuraciones del sitio para configurar el servidor de inferencia para modelos de código abierto. Debe apuntarlo a su servidor utilizando la configuración ai_sentiment_model_configs.

Esta configuración acepta una matriz JSON de configuraciones de modelo. Cada entrada requiere:

Campo Descripción
model_name El ID del modelo de HuggingFace (ej. cardiffnlp/twitter-roberta-base-sentiment-latest)
endpoint La URL de su instancia de TEI (ej. https://your-server:8081)
api_key Clave API para el endpoint (se puede dejar en blanco si no es necesario)

Para obtener paneles de sentimiento y emoción, añada una entrada por cada modelo que esté ejecutando. Por ejemplo, si está ejecutando ambos modelos localmente:

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

Después de eso, habilite la clasificación activando ai_sentiment_enabled.

3 Me gusta

¿Hay planes para dar soporte a otros modelos en idiomas distintos del inglés?

1 me gusta

@Falco si uno decide ejecutar esto en el mismo servidor que ejecuta Discourse (por ejemplo, tenemos un despliegue muy pequeño con unos pocos miles de publicaciones), ¿podrías actualizar las instrucciones para describir

  1. ¿Cómo puede Discourse integrarse con una instancia local de la imagen del contenedor HuggingFace TEI?
  2. Sugerencias sobre cuánta RAM/disco adicional se requiere para ejecutar lo anterior (por ejemplo, si la instancia base de Discourse se ejecuta con 2 GB de RAM y 20 GB de disco).

He configurado una nueva instancia de Discourse autoalojada e intento configurar los sentimientos. Estas son mis configuraciones de modelo de sentimiento de IA:

Clave Valor
nombre del modelo cardiffnlp/twitter-roberta-base-sentiment-latest
endpoint https://my_own_instance
api_key [en blanco]

Y funciona, más o menos, obtengo el gráfico de barras de sentimiento.

Sin embargo, la tabla de emociones está vacía. Este documento parece incompleto o está mal redactado para que pueda entender lo que hay que hacer.

¿Ejecuto otro contenedor Docker, con un ID de modelo diferente (roberta-base-go_emotions?), o algo más? ¿Qué necesito hacer para que esa tabla de emociones se llene?

Preferiría autoalojar estos servicios si es posible. Gracias de antemano si alguien puede indicarme la dirección correcta.

Para las emociones, también necesitas ejecutar el

también.

3 Me gusta

Gracias. Así que ejecuto un segundo contenedor docker con algunos ajustes, de la siguiente manera:

mkdir -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

y añado una nueva entrada en ai_sentiment_model_configs y todo funciona ahora. Gracias. :slight_smile:

1 me gusta

Me estrellé de bruces contra un muro de ladrillos de no saber qué demonios estoy haciendo al intentar que esto funcione en una instancia EC2 sin GPU. Al menos, hasta donde alcanzan mis extremadamente limitadas habilidades y comprensión aquí, intentar hacer esto con una instancia solo de CPU significa mucho más trabajo de configuración de lo que puedo entender. Las versiones cpu de ghcr.io/huggingface/text-embeddings-inference se niegan a cargar ninguno de los dos modelos de escucha; Claude y GPT5 me dicen que necesito convertirlos a modelos ONNX con un montón de herramientas de Python, y ahí es donde me rendí.

(¡También es muy posible que simplemente sea tonto y me esté perdiendo un paso obvio!)

Una cosa que estamos planeando es permitir que los LLM actúen como análisis de sentimiento

De esa manera, puede conectar un modelo económico como Gemini Flash 2.5 (o incluso nano) y usarlo para análisis de sentimiento.

6 Me gusta

Estamos intentando usar esta función con Azure AI Language (desde nuestra instancia de Discourse autoalojada), ya que ya estamos utilizando nuestra suscripción de Azure para integrar GPT-4.5 con Discourse (para la funcionalidad de resumen y chatbot):

  • pero no obtenemos datos en el panel de análisis de sentimiento y podemos ver estos errores en los registros:

Discourse AI: Errores durante la clasificación masiva: No se pudieron clasificar 208 publicaciones (ids de ejemplo: 2256, 909, 2270, 2260, 2797): JSON::ParserError: Una cadena vacía no es una cadena JSON válida.

La traza inversa muestra que Discourse podría estar intentando usar HuggingFace. ¿Son estos los únicos modelos compatibles en este momento?

Gracias,

N

Sí, tenemos una implementación muy específica, estamos pensando en cómo hacerla más genérica.

Soy optimista en cuanto a que los LLM devuelvan resultados estructurados para el sentimiento, ya que abre las puertas a muchas opciones y siento que, como tendencia, las API “hiper específicas” están siendo reemplazadas por las API “hiper generales” que proporcionan los LLM.

3 Me gusta

¿Hay alguna forma sencilla de poner esto en funcionamiento en WP autoalojado sin configurar tu propia instancia para la clasificación de sentimientos?

Gracias Sam, sería genial. Mientras tanto, investigaremos la ejecución de uno de los modelos compatibles de HuggingFace en una VM de Azure…