Problèmes d’analyse de sentiment avec Discourse AI : Format du modèle Hugging Face et échec du point de terminaison Azure
Bonjour Communauté Discourse et Développeurs,
Je rencontre des problèmes importants lors de la configuration et de l’utilisation de la fonctionnalité d’analyse de sentiment dans le plugin Discourse AI sur mon forum. Il semble y avoir deux problèmes distincts qui empêchent son bon fonctionnement.
Problème 1 : Inadéquation du format de réponse du modèle Hugging Face
J’ai configuré le modèle cardiffnlp/twitter-roberta-base-sentiment de Hugging Face pour l’analyse de sentiment. Bien que ma clé API soit valide et que je puisse appeler l’API avec succès depuis mon instance Discourse en utilisant curl, le plugin Discourse AI semble analyser la réponse de manière incorrecte en raison d’un changement dans le format de sortie du modèle Hugging Face.
Ma commande curl (confirmant la clé API valide et le nouveau format) :
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!\"}"
Sortie de curl (affichant le nouveau format de tableau imbriqué) :
[[{\"label\":\"LABEL_2\",\"score\":0.9891520738601685},{\"label\":\"LABEL_1\",\"score\":0.009014752693474293},{\"label\":\"LABEL_0\",\"score\":0.0018332178005948663}]]
Problème : Le modèle twitter-roberta-base-sentiment renvoyait auparavant un seul tableau de hachages label-score : [{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]. Cependant, il renvoie maintenant un tableau imbriqué : [[{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]].
La logique d’analyse codée en dur du plugin Discourse AI (spécifiquement, classification[\"label\"][/\\d+/].to_i comme indiqué par la trace d’appels) ne tient pas compte de cette couche de tableau externe. Cela entraîne une TypeError lorsqu’il tente d’accéder à un Symbole comme un Entier.
Message d’erreur (provenant de l’exception de tâche) :
conversion implicite de Symbol en Integer impossible (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…`
Trace d’appels complète pour le problème 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'
conversion implicite de Symbol en Integer impossible (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...
Problème 2 : La configuration du modèle Microsoft Azure conduit à une erreur Hugging Face
Lorsque j’ai tenté de passer au modèle Microsoft Text Analytics dans les paramètres de Discourse AI, j’ai rencontré une erreur 404 Resource not found, et de manière surprenante, la trace d’appels pointe toujours vers hugging_face_text_embeddings.rb.
Message d’erreur (provenant de l’exception de tâche) :
Job exception: 416 errors
{"error":{"code":"404","message": "Resource not found"}} (Net::HTTPBadResponse)
Extrait de trace d’appels pertinent (pointant vers Hugging Face malgré la sélection du modèle 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'
Observation : Cela indique que même lorsque je sélectionne et configure le point de terminaison et la clé API du modèle Microsoft, le plugin Discourse AI semble être codé en dur ou acheminer incorrectement les requêtes d’analyse de sentiment via une logique ou des points de terminaison spécifiques à Hugging Face. Cela empêche l’utilisation du modèle Microsoft.
Captures d’écran de la configuration :
J’ai joint une capture d’écran de mes paramètres Discourse AI pour montrer la configuration :
- Configuration détaillée des modèles d’IA pour le sentiment (montrant les modèles Hugging Face et Microsoft) - J’ai testé avec uniquement la configuration du modèle Hugging Face ou uniquement celle du modèle Microsoft avec le même résultat
Ces problèmes rendent la fonctionnalité d’analyse de sentiment pratiquement inutilisable. Il semble que le plugin nécessite une mise à jour pour gérer le nouveau format de réponse Hugging Face et pour acheminer correctement les requêtes lorsque différents fournisseurs de sentiment sont configurés.
Toute aide ou orientation sur ces problèmes serait grandement appréciée.
Merci !