Discourse AI 감정 분석 문제: Hugging Face 모델 형식 및 Azure 엔드포인트 실패
안녕하세요, Discourse 커뮤니티 및 개발자 여러분,
저는 포럼의 Discourse AI 플러그인에서 감정 분석 기능을 설정하고 사용하려고 할 때 심각한 문제를 겪고 있습니다. 올바르게 작동하지 않도록 하는 두 가지 별개의 문제가 있는 것으로 보입니다.
문제 1: Hugging Face 모델 응답 형식 불일치
감정 분석을 위해 Hugging Face의 cardiffnlp/twitter-roberta-base-sentiment 모델을 구성했습니다. API 키는 유효하며 curl을 사용하여 Discourse 인스턴스에서 API를 성공적으로 호출할 수 있지만, Hugging Face 모델의 출력 형식이 변경된 것으로 인해 Discourse AI 플러그인이 응답을 올바르게 파싱하지 못하고 있는 것 같습니다.
제 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 model은 과거에 단일 배열의 라벨-스코어 해시([{"label": "LABEL_2", "score": 0.98}, ...])를 반환했습니다. 그러나 이제는 중첩된 배열([[{"label": "LABEL_2", "score": 0.98}, ...]])을 반환합니다.
Discourse AI 플러그인의 하드코딩된 파싱 로직(특히, 백트레이스에 표시된 바와 같이 classification["label"][/\d+/].to_i)은 이 외부 배열 계층을 고려하지 않습니다. 이로 인해 Symbol에 Integer로 접근을 시도할 때 TypeError가 발생합니다.
에러 메시지 (Job Exception에서):
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…`
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...
문제 2: Microsoft Azure 모델 구성 시 Hugging Face 오류 발생
Discourse AI 설정에서 Microsoft Text Analytics 모델로 전환을 시도했을 때 404 Resource not found 오류가 발생했으며, 놀랍게도 백트레이스는 여전히 hugging_face_text_embeddings.rb를 가리키고 있습니다.
에러 메시지 (Job Exception에서):
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 응답 형식을 처리하고, 다른 감정 제공자가 구성된 경우 요청을 올바르게 라우팅하도록 업데이트가 필요한 것으로 보입니다.
이러한 문제에 대한 도움이나 지침을 주시면 감사하겠습니다.
감사합니다!