Discourse AI - التحليل العاطفي

:bookmark: يشرح هذا الدليل كيفية ضبط تصنيف المشاعر والعواطف في Discourse AI واستخدام التقارير لاستكشاف منشورات مجتمعك.

:person_raising_hand: مستوى المستخدم المطلوب: مدير (Administrator) للضبط؛ مدير أو مشرف (Moderator) لعرض التقارير.

يساعدك تصنيف المشاعر والعواطف على استكشاف الأنماط في نقاشات مجتمعك:

  • المشاعر (Sentiment) تصنف المنشورات إلى إيجابية، محايدة أو سلبية.
  • العاطفة (Emotion) توزع درجات عبر 28 تسمية، بما في ذلك الامتنان، الفضول، الغضب والحزن.

هذه قدرات منفصلة. يمكنك تفعيل أي منها أو كلاهما، واختيار فئة مختلفة للمعالجة الخلفية لكل منها. تعد التقارير المنشورات المصنفة، وليس الأشخاص الفريدين أو أنواع الشخصية. استخدمها للعثور على النقاشات الجديرة بالقراءة، وليس كبديل لفهم سياقها.

قبل أن تبدأ

تحتاج إلى تمكين Discourse AI عبر discourse_ai_enabled وفئة معالجة خلفية مضبوطة للتصنيف.

مستضاف عبر Discourse؟ قد يكون موقعك يضم بالفعل نقاط نهاية مخصصة للتصنيف مهيأة مسبقًا. تحقق من تكوينه الحالي قبل تغييره. اتصل بـ team@discourse.org إذا احتجت إلى مساعدة بشأن التوفر، تكوين نقاط النهاية أو حدود إعادة المعالجة التاريخية (backfill).

مستضاف ذاتيًا؟ اضبط نقطة نهاية مخصصة متوافقة، أو وكيل ذكاء اصطناعي مع نموذج لغوي، أو نموذج قرار. تمكين الميزة وحده لا يوفر خدمة استنتاج.

راجع سياسة الخصوصية، قواعد الاحتفاظ بالبيانات والتكاليف لدى مزودك قبل تمكين المعالجة التلقائية. يرسل التصنيف نص المنشور إلى فئة المعالجة الخلفية المحددة. تستخدم لقطات الشاشة أدناه منشورات مبتكرة على موقع اختباري ونموذج قرار؛ وهي لا توصي بهذا المزود لمحتوى المجتمع الخاص.

ضبط المشاعر والعواطف

  1. افتح الإدارة → الإضافات → الذكاء الاصطناعي → الميزات.
  2. افتح “المشاعر والعواطف”.
  3. تحت “المشاعر”، اختر “مُفعّل” إذا كنت تريد تصنيفًا إيجابيًا، محايدًا وسلبيًا. يتحكم هذا في ai_sentiment_enabled.
  4. اختر “فئة المعالجة الخلفية” الخاصة به وقم بتكوين نقطة النهاية، الوكيل أو النموذج المقابل كما هو موضح أدناه.
  5. تحت “العاطفة”، اختر “مُفعّل” إذا كنت تريد تصنيف العواطف. يتحكم هذا في ai_sentiment_emotion_enabled.
  6. اختر فئة المعالجة الخلفية الخاصة به وقم بتكوينه بشكل مستقل.
  7. اضبط حدود المعالجة في الخلفية الموضحة في القسم التالي.
  8. انقر على “إرسال” وتأكد من حفظ اختياراتك.

يستخدم هذا المثال نموذج قرار لكلا القدرتين. تم ضبط “المنشورات في الساعة” عمدًا على 0 لإيقاف الفحص التلقائي أثناء الاختبار. استخدم قيمة موجبة لمعالجة المنشورات الجديدة والتاريخية تلقائيًا.

استخدام نقاط نهاية مخصصة للتصنيف

اختر “نقطة نهاية مخصصة للتصنيف” لكل قدرة ترغب في تشغيلها بنموذج مخصص. اتبع “تكوين نقاط نهاية مخصصة للتصنيف” حتى الإعداد ai_sentiment_model_configs.

نماذج المخصصة المرجعية هي:

القدرة النموذج
المشاعر cardiffnlp/twitter-roberta-base-sentiment-latest
العاطفة SamLowe/roberta-base-go_emotions

يحدد كل مدخل تكوين classification_type الخاص به (sentiment أو emotion)، model_name، endpoint وapi_key. قم بتوفير مدخل منفصل لكل مصنف مخصص تستخدمه. حافظ على سرية بيانات الاعتماد؛ لا تقم بتضمينها في منشورات الدعم أو لقطات الشاشة.

راجع استضافة ذاتية للمشاعر والعواطف لـ Discourse AI لنشر خادم الاستنتاج. قم بتمكين واختيار كل قدرة بشكل منفصل باستخدام عناصر التحكم أعلاه.

تتوقع فئة المعالجة الخلفية المخصصة واجهة برمجة تطبيقات تصنيف متوافقة. نسخ نقطة نهاية Anthropic أو دردشة OpenAI أو Azure Language في هذا الإعداد لا يجعلها متوافقة. اختبار اتصال ناجح لنموذج لغوي في مكان آخر في Discourse لا يختبر نقطة نهاية المشاعر المخصصة.

استخدام وكيل ذكاء اصطناعي أو نموذج قرار

بالنسبة لـ “وكيل LLM”، اختر وكيلًا مناسبًا للمصنفين مع نموذج لغوي مضبوط. يتضمن Discourse وكلاء مصنفين للمشاعر والعواطف. ليس الوكيل المحادثاتي العام بديلاً عن وكيل مضبوط لإعادة درجات التسمية المتوقعة.

بالنسبة لـ “نموذج القرار”، قم أولاً بتكوين واختبار نموذج قرار متوافق، ثم اختر لكل قدرة مفعلة. لا يتطلب نموذج القرار نموذج لغة محادثاتي منفصلًا لهذا التصنيف.

يمكن أن تتكبد طلبات الوكيل ونموذج القرار رسومًا لدى المزود أو تستهلك أرصدة. راجع قواعد معالجة البيانات للنموذج المحدد قبل تعيينه لميزة معالجة تلقائية.

التحكم في المعالجة والتغطية التاريخية

يتحقق وظيفة مجدولة من المنشورات التي تعاني من تصنيفات مفقودة كل خمس دقائق. تشارك المنشورات الجديدة والتاريخية في هذا الفحص؛ لا تتوفر النتائج بالضرورة فورًا بعد النشر. لا يوجد عدد أدنى من المنشورات أو أيام قبل ظهور البيانات: يمكن لمنشور واحد تم تصنيفه بنجاح أن يساهم.

عنصر التحكم إعداد الموقع الافتراضي التأثير
المنشورات في الساعة ai_sentiment_backfill_maximum_posts_per_hour 240 العدد التقريبي للمنشورات المعالجة في الساعة. 0 يوقف الفحص المجدول، بما في ذلك المنشورات الجديدة.
حد عمر المنشور، بالأيام ai_sentiment_backfill_post_max_age_days 60 افحص المنشورات المنشأة ضمن نافذة العمر هذه. 0 يعني اليوم، وليس تاريخًا غير محدود.

زد حد العمر لتضمين المنشورات الأقدم. تعالج الوظيفة المجدولة النتائج المفقودة بمرور الوقت؛ لا يصنف النطاق الزمني المحدد للتقرير تلك البيانات التاريخية بحد ذاته.

المعدل تقريبي، وليس حدًا دقيقًا للطلبات أو الإنفاق. يمكن أن يؤدي تمكين كل من المصنفين إلى إجراء طلبين لكل منشور. يمكن إعادة محاولة الطلبات الفاشلة أو الرفض. يتم فحص المنشورات المعدلة بشكل منفصل ولا يتم التحكم بها بواسطة معدل الفحص المجدول أو حدود العمر. يتم استبعاد الرسائل الخاصة، المنشورات المحذوفة، الموضوعات المحذوفة وأنواع المنشورات غير القياسية من فحص إعادة المعالجة التاريخية المجدولة. لا يضمن استبعاد الرسائل الخاصة في الماسح والتقارير ضمانًا لجميع مسارات التصنيف: وظيفة المنشور المعدل لا تطبق فلتر الرسائل الخاصة نفسه. ضع هذا في الاعتبار قبل تكوين مزود خارجي.

استكشاف المشاعر حسب الفئة أو الوسم

  1. افتح الإدارة → التقارير → تحليل المشاعر، أو زور /admin/reports/sentiment_analysis على موقعك.
  2. حدد تواريخ البداية والنهاية.
  3. اختر “الفئة” أو “الوسم” لتجميع النتائج.
  4. استخدم فلتر الفئة أو الوسم المقابل لتضييق النتائج. يوفر التصفية حسب الفئة أيضًا خيارًا لتضمين الفئات الفرعية.
  5. اقرأ المجموع لكل مجموعة وتفصيلها الإيجابي، السلبي والمحايد.
  6. انقر على صف المجموعة لفحص رسمها البياني والمنشورات الأساسية.

يحتوي المثال على تسعة منشورات مصنف: ثلاث إيجابية، ثلاث سلبية وثلاث محايدة. يتم تضمين المنشورات المحايدة في هذا التقرير.

في عرض التفاصيل:

  • اختر “الكل”، “إيجابي”، “محايد” أو “سلبي” لتصفية المنشورات المحملة.
  • افتح موضوع المنشور لقراءة النقاش المحيط.
  • استخدم أيقونة الرابط بجانب الرسم البياني لنسخ عنوان URL لعرض التقرير ذاك. يحتاج المتلقون إلى وصول موظف (Staff).
  • انقر على “رجوع” للعودة إلى النتائج المجمعة.

تشير تواريخ التقرير إلى وقت إنشاء المنشورات، وليس وقت تشغيل التصنيف. يمكن للمنشور أن يساهم في مجموعات وسوم متعددة إذا كان موضوعه يحمل وسومًا متعددة، لذا فإن إضافة مجاميع الوسوم يمكن أن تعد المنشور نفسه أكثر من مرة.

قراءة اتجاه المشاعر العام

افتح تقرير “المشاعر العامة” من الإدارة → التقارير، أو زور /admin/reports/overall_sentiment.

الدرجة هي:

عدد المنشورات الإيجابية − عدد المنشورات السلبية

يجب أن تكون الدرجة الإيجابية أو السلبية أكبر من 0.6 ليتم احتساب المنشور في تلك المجموعة. إذا لم تتجاوز أي منها العتبة، تعامل التقرير المجمعة المنشور على أنه محايد. العتبة ثابتة؛ لا يوجد إعداد موقع لتغييرها.

المشاعر العامة هي صافي عدد المنشورات، وليست متوسطًا احتماليًا أو نسبة سعادة. ثلاث منشورات إيجابية وثلاث منشورات سلبية ينتج عنها درجة عامة من 0، بغض النظر عن عدد المنشورات المحايدة. افحص التفصيل المجمّع والنقاشات الأساسية قبل تفسير الاتجاه المسطح على أنه غياب للآراء القوية.

استكشاف العواطف

لكل عاطفة تقرير تحت الإدارة → التقارير. على سبيل المثال، زور /admin/reports/emotion_anger لـ “الغضب” أو /admin/reports/emotion_curiosity لـ “الفضول”. اختر نطاقًا زمنيًا وتجميعًا يوميًا، أسبوعيًا أو شهريًا لاستكشاف الاتجاه.

يعد تقرير العاطفة المنشورات التي تكون درجتها لتلك التسمية أكبر من 0.1. هذه العتبة ثابتة أيضًا. يمكن أن تنطبق أكثر من عاطفة على نفس المنشور، لذا فإن مجاميع العواطف ليست حصرية متبادلة.

يمكنك أيضًا تصفية الموضوعات حسب عاطفة. زور /filter?q=order:emotion_anger للعثور على الموضوعات المطابقة، مصنفة حسب عدد المنشورات المؤهلة المصنفة بالغضب وليس حسب متوسط درجة العاطفة. استخدم order:emotion_anger-asc لعكس الترتيب. بدون فلتر activity-after:، يحسب هذا الترتيب المنشورات المؤهلة من العام الماضي. تنطبق أذونات الوصول المعتادة لقائمة الموضوعات.

تسميات العواطف المتاحة

الإعجاب، المتعة، الغضب، الانزعاج، الموافقة، الرعاية، الارتباك، الفضول، الرغبة، خيبة الأمل، عدم الموافقة، الاشمئزاز، الإحراج، الإثارة، الخوف، الامتنان، الحزن، الفرح، الحب، العصبية، المحايد، التفاؤل، الفخر، الإدراك، الارتياح، الندم، الحزن والمفاجأة.

فهم القيود

  • التصنيف يعتمد على النموذج. يمكن أن يتم تفسير السخرية، المواد المقتبسة، اللغة المتخصص والنقاشات متعددة اللغات بشكل خاطئ. تعتمد تغطية اللغة والدقة على النموذج المختار. لا تتم معايرة الدرجات من فئات معالجة خلفية مختلفة بالضرورة بشكل متماثل.
  • تغطي التقارير فقط النتائج المخزنة. يمكن أن ينتج عن ميزة مفعلة بدون فئة معالجة خلفية عاملة، معالجة متوقفة أو تغطية تاريخية غير كافية تقارير فارغة أو غير مكتملة.
  • يتم إعادة استخدام التصنيفات الحالية. لا يؤدي تعديل منشور مصنّف إلى استبدال نتائجه تلقائيًا. لا يؤدي تغيير الوكيل المحدد أو نموذج القرار ضمن نفس فئة المعالجة الخلفية إلى إعادة تصنيف النتائج الحالية أيضًا.
  • يغير تغيير فئة المعالجة الخلفية مصدر نتائج التقرير. لا يتم تحويل النتائج القديمة إلى فئة المعالجة الخلفية المحددة. يمكن أن تظهر التقارير فارغة بينما يتم معالجة التصنيفات المفقودة.
  • تستبعد التقارير الرسائل الخاصة. هذا الاستبعاد في التقارير منفصل عن قيود معالجة البيانات الموصوفة أعلاه.

استكشاف الأخطاء وحل النتائج المفقودة أو غير المتوقعة

المشكلة ما يجب التحقق منه
لا توجد نتائج بعد التمكين تأكد من تمكين القدرة ذات الصلة، تكوين فئة المعالجة الخلفية، أن “المنشورات في الساعة” موجب، وأن وظائف الخلفية تعمل. اسمح بالوقت للفحص كل خمس دقائق وطابور المعالجة.
يعمل تصنيف المشاعر لكن العاطفة فارغة قم بتمكين وتكوين “العاطفة” بشكل منفصل. لا توفر نقطة نهاية مخصصة للمشاعر فقط تصنيفات العاطفة.
التواريخ الأقدم ليس لها نتائج زد حد عمر المنشور، اسمح بوقت المعالجة، وتأكد من أن نطاق التقرير يشمل تواريخ إنشاء المنشورات.
ترجع نقطة النهاية المخصصة خطأً تحقق من عنوان URL، بيانات الاعتماد، النموذج وصيغة الاستجابة. يتوقع المحول مصفوفة مسطحة من التسميات والدرجات، مع تسميات المشاعر مثل positive، neutral وnegative، وليست استجابات دردشة اعتباطية أو تسميات من نوع LABEL_0.
لا يمكن الوصول إلى نقطة نهاية الشبكة الخاصة تحقق من الاتصال و، حيثما لزم الأمر، أضف فقط اسم المضيف أو IP نقطة نهاية الاستنتاج الموثوقة إلى allowed_internal_hosts. لا تقم بتعطيل حماية تزوير الطلبات من جانب الخادم على نطاق واسع.
لا تتغير النتائج بعد التعديل أو اختيار النموذج يتم إعادة استخدام النتائج الحالية. لا تفترض أن تعديل المحتوى أو حفظ نموذج آخر يحدد موعدًا لإعادة التصنيف الكاملة.
يعرض فلتر عددًا من المنشورات أقل من عددها يصف العدد المجموعة بأكملها، بينما تصف علامات تبويب المشاعر المنشورات المحملة. تحقق من المزيد من النتائج للتحميل وافتح الموضوعات الأصلية عند التحقيق في التناقضات.

يمكن للمسؤولين مراجعة سجلات طلبات الوكيل ونموذج القرار في الإدارة → الإضافات → الذكاء الاصطناعي → السجلات. تحقق من /logs لأخطاء التصنيف في الخلفية، بما في ذلك إخفاقات نقطة النهاية المخصصة. تعامل مع محتويات السجلات على أنها حساسة: يمكن أن تحتوي على نص المنشور واستجابات النموذج. احذف بيانات الاعتماد والمحتوى الخاص قبل مشاركة التشخيصات.

موارد إضافية

10 إعجابات

تم دمج منشور في موضوع موجود: مشاكل مع الملء الخلفي للمشاعر

تم دمج منشور في موضوع موجود: مشاكل مع الملء الخلفي للمشاعر

تم تحديث المنشور الأصلي بمقطع فيديو جديد يعرض الميزات المحدثة لـ Sentiment بما في ذلك المزيد من المشاعر وفهم المواضيع/المنشورات المرتبطة بكل شعور

لقد قمت بتكوين إعدادات نموذج المشاعر باستخدام اسم نموذج ونقطة نهاية ومفتاح API تم نسخهما من إعدادات LLM، حيث يجتاز الاختبار، ولكني أتلقى الخطأ أدناه في /logs.

(ولكن ربما لا أفهم بشكل صحيح، لماذا لا يستخدم نموذج المشاعر أحد نماذج LLM المكونة؟)

باستخدام claude-3-5-sonnet.


{"type":"error","error":{"type":"invalid_request_error","message":"anthropic-version: header is required"}} (Net::HTTPBadResponse)
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:71:in `classify'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:142:in `request_with'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:78:in `block (4 levels) in bulk_classify!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1593:in `evaluate_to'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/concurrent-ruby-1.3.5/lib/concurrent-ruby/concurrent/promises.rb:1776:in `block in on_resolvable'
/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:359:in `run_task'
/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:350:in `block (3 levels) in create_worker'

<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'
الحالة: 400

{"type":"error","error":{"type":"invalid_request_error","message":"anthropic-version: header is required"}} (Net::HTTPBadResponse)
/var/www/discourse/plugins/discourse-ai/lib/inference/hugging_face_text_embeddings.rb:71:in `classify'
/var/www/discourse/plugins/discourse-ai/lib/sentiment/post_classification.rb:142:in `request_wit...

لا تستخدم وحدة المشاعر نماذج لغوية كبيرة عامة، بل نماذج تم ضبطها بدقة لتصنيف المشاعر. إذا كنت ترغب في تشغيل هذه النماذج بنفسك، فسيتم توثيق ذلك في استضافة المشاعر والعواطف لـ DiscourseAI بنفسك

3 إعجابات

@Falco لقد لاحظت للتو أن التحليل العاطفي توقف عن العمل اعتبارًا من يناير 2025. تخميني هو أن هناك إعدادًا جديدًا يسمى ai_sentiment_model والذي كما يوضح الرابط أعلاه مخصص لتشغيل نموذج/صورة تحليل عاطفي مخصصة خاصة بك. لاحظت أنه بعد تحديث discourse الآن، فإن ai_sentiment_model_configs فارغ بالكامل (هل يجب أن يكون كذلك؟).عندما أحاول تشغيل أمر rake للاسترجاع العكسي، يظهر لي خطأ:

rake ai:sentiment:backfill
تم إلغاء تشغيل rake!
ActiveRecord::StatementInvalid: PG::SyntaxError: خطأ في بناء الجملة في أو بالقرب من ")" (ActiveRecord::StatementInvalid)
LINE 1: ...e_upload_id", "posts"."outbound_message_id" FROM () as posts..

افتراضيًا، كان المكون الإضافي يستخدم خادمًا موجودًا في DigitalOcean قمت بإعداده لتسهيل الاختبار.

لقد قمت منذ ذلك الحين بتغيير الإعدادات الافتراضية للمكون الإضافي إلى حالة نظيفة، وعلى الأشخاص الذين يريدون تصنيف الذكاء الاصطناعي تشغيل خوادم باتباع الوثائق هنا على Meta.

بالتأكيد، لكننا كنا ندفع هذه التكلفة لأغراض الاختبار. لا يمكن الاستمرار في تقديم ذلك لكل مستضيف ذاتي.

تجدر الإشارة إلى أننا نقدم خدمة التصنيف هذه على خوادم مسرّعة بوحدة معالجة الرسومات (GPU) كجزء من خدمة الاستضافة لدينا.

إعجابَين (2)

مشاكل تحليل المشاعر في Discourse AI: تنسيق نموذج Hugging Face وفشل نقطة نهاية Azure


مرحباً بمجتمع ومطوري Discourse،

أواجه مشاكل كبيرة عند محاولة تكوين واستخدام ميزة تحليل المشاعر ضمن إضافة Discourse AI على منتدى الخاص بي. يبدو أن هناك مشكلتين منفصلتين تمنعانها من العمل بشكل صحيح.


المشكلة 1: عدم تطابق تنسيق استجابة نموذج Hugging Face

لقد قمت بتكوين نموذج cardiffnlp/twitter-roberta-base-sentiment من Hugging Face لتحليل المشاعر. بينما مفتاح API الخاص بي صالح ويمكنني استدعاء API بنجاح من مثيل Discourse الخاص بي باستخدام curl، يبدو أن إضافة Discourse AI تقوم بتحليل الاستجابة بشكل غير صحيح بسبب تغيير في تنسيق إخراج نموذج Hugging Face.

أمر curl الخاص بي (يؤكد صحة مفتاح API والتنسيق الجديد):

Bashcurl -X POST https://api-inference.huggingface.co/models/cardiffnlp/twitter-roberta-base-sentiment \\\n-H \"Authorization: Bearer hf_xxxxxxxxxxx\" \\\n-H \"Content-Type: application/json\" \\\n-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 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'
لا يوجد تحويل ضمني لرمز إلى عدد صحيح (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

عندما حاولت التبديل إلى نموذج Microsoft Text Analytics ضمن إعدادات Discourse AI، واجهت خطأ 404 Resource not found، والمفاجئ أن تتبع المكدس لا يزال يشير إلى hugging_face_text_embeddings.rb.

رسالة الخطأ (من استثناء المهمة):

Job exception: 416 errors
{"error":{"code":"404","message": "Resource not found"}} (Net::HTTPBadResponse)

مقتطف تتبع المكدس ذي الصلة (يشير إلى Hugging Face على الرغم من تحديد نموذج 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'

ملاحظة: يشير هذا إلى أنه حتى عندما أقوم بتحديد وتكوين نقطة نهاية نموذج Microsoft ومفتاح API الخاص بها، يبدو أن إضافة Discourse AI تقوم بتوجيه طلبات تحليل المشاعر بشكل ثابت أو خاطئ عبر منطق أو نقاط نهاية خاصة بـ Hugging Face. هذا يمنع استخدام نموذج Microsoft على الإطلاق.


لقطات شاشة التكوين:

لقد أرفقت لقطات شاشة لإعدادات Discourse AI الخاصة بي لإظهار التكوين:

  • تكوين مفصل لنماذج الذكاء الاصطناعي للمشاعر (يظهر كلاً من نماذج Hugging Face و Microsoft) - لقد اختبرت باستخدام نموذج Hugging Face فقط أو نموذج Microsoft فقط مع نفس النتيجة

هذه المشاكل تجعل ميزة تحليل المشاعر غير قابلة للاستخدام فعليًا. يبدو أن الإضافة تتطلب تحديثًا للتعامل مع تنسيق استجابة Hugging Face الجديد وتوجيه الطلبات بشكل صحيح عند تكوين مزودي مشاعر مختلفين.

أي مساعدة أو توجيه بشأن هذه المشاكل سيكون موضع تقدير كبير.

شكراً!

إعجابَين (2)

أنا فضولي لمعرفة ما إذا كان الإبلاغ عن المشاعر يعمل لدى الآخرين، أو إذا كنت قد أخطأت في تكوين شيء ما. أود أن أعرف ما الذي أحتاج إلى التحقق منه أو تكوينه لتمكين الإبلاغ عن المشاعر، حيث ما زلت أواجه نفس المشكلة.

إعجاب واحد (1)

نحن نحاول استخدام هذه الميزة مع Azure AI Language (من مثيل Discourse المستضاف ذاتيًا) - حيث أننا نستخدم بالفعل اشتراك Azure الخاص بنا لدمج GPT-4.5 مع Discourse (لوظائف التلخيص وروبوت الدردشة):

… ولكننا لا نحصل على أي بيانات في لوحة معلومات المشاعر، ويمكننا رؤية هذه الأخطاء في السجلات:

Discourse AI: Errors during bulk classification: Failed to classify 208 posts (example ids: 2256, 909, 2270, 2260, 2797) : JSON::ParserError : An empty string is not a valid JSON string.

يظهر تتبع المكدس أن Discourse قد يحاول استخدام HuggingFace - هل هذه هي النماذج الوحيدة المدعومة في الوقت الحالي؟

شكرًا،

ن

إعجاب واحد (1)

إذًا، هل الطريقة الوحيدة لاستخدام هذه الميزة هي إعداد مثيلات خاصة بك من النماذج (والتي تحتاج إلى مثيلات GPU كثيفة الموارد والتي ستكون مكلفة)؟ تبدو هذه الميزة مفيدة جدًا، ولكن يبدو أنها ستكلفني أكثر للإعداد من استضافة Discourse الفعلية الخاصة بي.

نعم، النماذج المدعومة هي تلك المدرجة في المنشور الأول.

سنضيف في النهاية دعمًا لتصنيف المنشورات باستخدام نماذج اللغة الكبيرة (LLMs) للأشخاص الذين لا تشكل التكلفة مشكلة بالنسبة لهم.

حسنًا، الميزة بأكملها مبنية حول تصنيف المنشورات باستخدام نماذج التعلم الآلي (ML)، لذا نعم، تحتاج إلى مكان لتشغيلها.

وبما أن Discourse يمكن تشغيله على أرخص خادم افتراضي خاص (VPS) متاح، فإن تشغيل نماذج التعلم الآلي (ML) أكثر تكلفة بالفعل. إذا كنت ترغب في الحصول على الميزة بأقل تكلفة ممكنة، فمن الممكن تشغيلها على خادم به عدد قليل من نوى وحدة المعالجة المركزية (CPU) فقط، طالما لديك ذاكرة وصول عشوائي (RAM) كافية لتحميل النماذج.

إعجاب واحد (1)

عذرًا إذا تم طرح هذا السؤال من قبل، لكنني لم أتمكن من العثور على مرجع لمكان تكوين الدرجة الحدية بالضبط :sweat_smile:

إعجاب واحد (1)

للأسف، درجة العتبة ليست شيئًا يمكن للمستخدمين أو المسؤولين تكوينه. إنها قيمة محددة تم تعيينها في قاعدة التعليمات البرمجية.

إعجاب واحد (1)