Discourse AI 感情分析の問題:Hugging Face モデルの形式と Azure エンドポイントの障害
Discourse コミュニティおよび開発者の皆様、
フォーラム内の Discourse AI プラグインで感情分析機能を設定および使用しようとすると、重大な問題に直面しています。正しく機能しないようにしている問題が 2 つあるようです。
問題 1:Hugging Face モデルの応答形式の不一致
Hugging Face の cardiffnlp/twitter-roberta-base-sentiment モデルを感情分析用に設定しました。API キーは有効で、Discourse インスタンスから curl を使用して API を正常に呼び出すことができますが、Discourse AI プラグインは、Hugging Face モデルの出力形式の変更により、応答を正しく解析していないようです。
私の curl コマンド(有効な API キーと新しい形式を確認):
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!\"}"
curl からの出力(新しいネストされた配列形式を示しています):
[[{\"label\":\"LABEL_2\",\"score\":0.9891520738601685},{\"label\":\"LABEL_1\",\"score\":0.009014752693474293},{\"label\":\"LABEL_0\",\"score\":0.0018332178005948663}]]
問題: twitter-roberta-base-sentiment モデルは、以前は ラベルとスコアのハッシュの単一の配列を返していました:[{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]. しかし、現在はネストされた配列 [[{\"label\": \"LABEL_2\", \"score\": 0.98}, ...]] を返します。
Discourse AI プラグインのハードコードされた解析ロジック(具体的には、バックトレースで示されている classification[\"label\"][/\\d+/].to_i)は、この外側の配列レイヤーを考慮していません。これにより、シンボルを整数としてアクセスしようとすると TypeError が発生します。
エラーメッセージ(ジョブ例外から):
シンボルから整数への暗黙の変換はありません (TypeError)
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:in transform_result' の block/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:163:ineach’
/var/www/discourse/plugin…`
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'
シンボルから整数への暗黙の変換はありません (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...
問題 2:Microsoft Azure モデルの設定が Hugging Face エラーを引き起こす
Discourse AI 設定内で Microsoft Text Analytics モデルに切り替えようとしたところ、404 Resource not found エラーが発生し、驚くべきことに、バックトレースは依然として hugging_face_text_embeddings.rb を指していました。
エラーメッセージ(ジョブ例外から):
Job exception: 416 errors
{"error":{"code":"404","message": "Resource not found"}} (Net::HTTPBadResponse)
関連するバックトレーススニペット(Microsoft モデルが選択されているにもかかわらず Hugging Face を指しています):
/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'
観察: これは、Microsoft モデルのエンドポイントと API キーを選択して設定した場合でも、Discourse AI プラグインが、異なる感情分析プロバイダーが設定されている場合に、感情分析リクエストを Hugging Face 固有のロジックまたはエンドポイントを介してハードコードまたは誤ってルーティングしているように見えることを示しています。これにより、Microsoft モデルがまったく使用できなくなります。
設定スクリーンショット:
設定を示すために Discourse AI 設定のスクリーンショットを添付しました。
- AI 感情分析モデルの詳細な設定(Hugging Face と Microsoft の両方のモデルが表示されています)- Hugging Face または Microsoft モデルのみの設定でテストしましたが、結果は同じでした。
これらの問題により、感情分析機能は事実上使用できなくなっています。プラグインは、新しい Hugging Face 応答形式を処理し、異なる感情分析プロバイダーが設定されている場合にリクエストを正しくルーティングするために更新が必要なようです。
これらの問題に関する支援やガイダンスをいただければ幸いです。
ありがとうございます!