Auto-hospedaje de sentimiento y emoción para DiscourseAI

El plugin Discourse AI tiene soporte para solicitar la clasificación de emociones/sentimientos de nuevas publicaciones, que se almacena en la base de datos y se puede utilizar en informes y paneles de administración.

Ejecución con HuggingFace TEI

HuggingFace proporciona una imagen de contenedor impresionante que puede ponerlo en funcionamiento rápidamente.

Por ejemplo:

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

Esto debería ponerlo en funcionamiento con una instancia local de ‘cardiffnlp/twitter-roberta-base-sentiment-latest’, un modelo abierto que puede clasificar publicaciones en positivo/negativo/neutral.
Puede comprobar si está funcionando con

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

Lo que debería devolver una matriz de confianza para cada etiqueta en condiciones normales de funcionamiento.

Modelos compatibles

Hacerlo disponible para su instancia de Discourse

La mayoría de las veces, ejecutará esto 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 asegurar el punto final 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. Debería apuntarlo a su servidor utilizando la configuración ai_sentiment_model_configs.

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

2 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.

1 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…