Problemas de Análisis de Sentimiento con Discourse AI: Formato de Modelo Hugging Face y Fallo del Endpoint de Azure
Hola Comunidad y Desarrolladores de Discourse,
Estoy experimentando problemas significativos al intentar configurar y utilizar la función de Análisis de Sentimiento dentro del plugin Discourse AI en mi foro. Parece que hay dos problemas distintos que impiden que funcione correctamente.
Problema 1: Desajuste en el Formato de Respuesta del Modelo Hugging Face
He configurado el modelo cardiffnlp/twitter-roberta-base-sentiment de Hugging Face para el análisis de sentimiento. Si bien mi clave API es válida y puedo llamar a la API con éxito desde mi instancia de Discourse usando curl, el plugin Discourse AI parece estar procesando la respuesta incorrectamente debido a un cambio en el formato de salida del modelo de Hugging Face.
Mi comando curl (confirmando clave API válida y nuevo formato):
Bashcurl -X POST https://api-inference.huggingface.co/models/cardiffnlp/twitter-roberta-base-sentiment \ -H "Authorization: Bearer hf_xxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d "{\"inputs\": \"I love Discourse!\"}"
Salida de curl (mostrando el nuevo formato de array anidado):
[[{\"label\":\"LABEL_2\",\"score\":0.9891520738601685},{\"label\":\"LABEL_1\",\"score\":0.009014752693474293},{\"label\":\"LABEL_0\",\"score\":0.0018332178005948663}]]
Problema: El modelo twitter-roberta-base-sentiment solía devolver un único array de hashes de etiqueta-puntuación: [{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]. Sin embargo, ahora devuelve un array anidado: [[{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]].
La lógica de procesamiento codificada del plugin Discourse AI (específicamente, classification["label"][/\d+/].to_i como indica el backtrace) no tiene en cuenta esta capa de array externa. Esto provoca un TypeError cuando intenta acceder a un Símbolo como si fuera un Entero.
Mensaje de Error (de la Excepción del Job):
no implicit conversion of Symbol into Integer (TypeError)
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in block in transform_result’
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in each’
/var/www/discourse/plugin…`
Backtrace Completo para el Problema de Hugging Face:
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1268:in `raise'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1268:in `wait_until_resolved!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:998:in `value!'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:93:in `bulk_classify!'
/var/www/discourse/plugins/discourse-ai/app/jobs/scheduled/sentiment_backfill.rb:27:in `execute'
/var/www/discourse/app/jobs/base.rb:316:in `block (2 levels) in perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management/null_instance.rb:49:in `with_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rails_multisite-6.1.0/lib/rails_multisite/connection_management.rb:21:in `with_connection'
/var/www/discourse/app/jobs/base.rb:303:in `block in perform'
/var/www/discourse/app/jobs/base.rb:299:in `each'
/var/www/discourse/app/jobs/base.rb:299:in `perform'
/var/www/discourse/app/jobs/base.rb:379:in `perform'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:137:in `process_queue'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:77:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mini_scheduler-0.18.0/lib/mini_scheduler/manager.rb:63:in `block (2 levels) in ensure_worker_threads'
internal:kernel:187:in `loop'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:341:in `block (2 levels) in create_worker'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `catch'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:340:in `block in create_worker'
no implicit conversion of Symbol into Integer (TypeError)
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in `block in transform_result'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in `each'
/var/www/discourse/plugin...
Problema 2: La Configuración del Modelo de Microsoft Azure Conduce a un Error de Hugging Face
Cuando intenté cambiar al modelo de Microsoft Text Analytics dentro de la configuración de Discourse AI, encontré un error de 404 Resource not found, y sorprendentemente, el backtrace todavía apunta a hugging_face_text_embeddings.rb.
Mensaje de Error (de la Excepción del Job):
Job exception: 416 errors
{"error":{"code":"404","message": "Resource not found"}} (Net::HTTPBadResponse)
Fragmento de Backtrace Relevante (apuntando a Hugging Face a pesar de que se selecciona el modelo de Microsoft):
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:76:in `do_request!'
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:51:in `classify_by_sentiment!'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:156:in `request_with'
Observación: Esto indica que incluso cuando selecciono y configuro el endpoint y la clave API del modelo de Microsoft, el plugin Discourse AI parece estar codificado o enrutando incorrectamente las solicitudes de análisis de sentimiento a través de la lógica o endpoints específicos de Hugging Face. Esto impide que el modelo de Microsoft se utilice en absoluto.
Capturas de Pantalla de la Configuración:
He adjuntado capturas de pantalla de mi configuración de Discourse AI para mostrar la configuración:
- Configuración detallada para modelos de IA de sentimiento (mostrando modelos Hugging Face y Microsoft) - Probé solo con la configuración del modelo Hugging Face o solo con el modelo de Microsoft con el mismo resultado
Estos problemas hacen que la función de análisis de sentimiento sea efectivamente inutilizable. Parece que el plugin requiere una actualización para manejar el nuevo formato de respuesta de Hugging Face y para enrutar correctamente las solicitudes cuando se configuran diferentes proveedores de sentimiento.
Agradecería cualquier ayuda o guía sobre estos problemas.
¡Gracias!