Trouble de la Discours

:warning: Cette fonctionnalité fait maintenant partie de Discourse AI. Ce plugin est obsolète.

|||
-|-|-|
:discourse2: | Résumé | Disorder aide les modérateurs en signalant automatiquement le contenu potentiellement toxique sur votre forum Discourse.
:hammer_and_wrench: | Lien vers le dépôt | https://github.com/xfalcox/disorder
:open_book: | Guide d’installation | Comment installer des plugins dans Discourse

Si vous utilisez notre service d’hébergement officiel, veuillez contacter notre support pour enregistrer votre intérêt pour ce plugin.

Toxicité

Comme l’a dit @hawk dans Dealing with Toxicity in Online Communities, la gestion de la toxicité dans votre communauté est fondamentale.

Bien que Discourse soit livré avec de nombreux outils pour aider à gérer la toxicité dans votre communauté, nous recherchons toujours des moyens de l’améliorer davantage. En particulier, j’ai recherché les applications possibles de l’apprentissage automatique et de l’IA dans les forums en ligne. Il s’agit maintenant d’un plugin expérimental, disponible pour toutes les communautés.

Le plugin

Disorder exploite l’intelligence artificielle et l’apprentissage automatique pour vous aider à modérer votre communauté, facilitant ainsi le travail de votre équipe de modération pour être au courant du contenu potentiellement problématique et même pour inciter vos utilisateurs à réviser les messages toxiques avant de les publier.

C’est une première incursion dans l’utilisation de modèles ML auto-hébergés dans Discourse, et bien que ce soit un modèle simple, il établit un schéma qui peut être réutilisé pour appliquer des modèles plus complexes par la suite.

Fonctionnalités

Signalement en arrière-plan

C’est le mode de fonctionnement principal de Disorder, car il est complètement transparent pour vos utilisateurs, qui ne seront pas au courant des changements.

Chaque fois qu’un nouveau message (ou message de chat utilisant Discourse Chat) est créé, il sera mis dans une file d’attente de classification de manière asynchrone. Si la classification dépasse un seuil configurable, le message/message de chat sera signalé afin que votre équipe de modération en soit avertie et puisse prendre la décision finale sur le signalement.

Intervention sur nouveau message

Si vous pensez que la prévention est le meilleur remède, cette option plus active pourrait vous intéresser.

Vous pouvez activer une classification synchrone de tout nouveau message qui, s’il dépasse un seuil de toxicité configurable, déclenchera une intervention sur le flux du nouveau message, demandant à l’utilisateur de réviser et de modifier le message qui pourrait être en dehors des limites fixées par les règles de votre communauté.

Cela ne se produira qu’une seule fois, et après avoir fermé la modale, l’utilisateur pourra poster normalement.

Comment ça marche ?

Ce plugin intègre les modèles open source de Detoxify, en utilisant un modèle d’appel d’API à distance pour permettre aux administrateurs de mettre à l’échelle le taux d’inférence en fonction des besoins de chaque communauté.

Nous fournissons une image simple qui fournit une API HTTP mince que Discourse appellera pour effectuer la classification du contenu, qui peut être exécutée soit sur le même serveur où vous exécutez Discourse, soit sur un serveur différent.

Le plugin Discourse écoute les événements de nouveaux messages / nouveaux messages de chat, et met en file d’attente un travail de classification dans la file d’attente d’arrière-plan. Les résultats sont stockés dans la base de données afin que vous puissiez extraire des rapports, et nous signalons le contenu à l’aide d’un utilisateur bot distinct afin que nous puissions suivre la précision de ses signalements au fil du temps.

Options

Tout d’abord, le plugin fonctionne tel quel, il n’est donc pas nécessaire de modifier les paramètres immédiatement. Cependant, si vous souhaitez modifier le comportement du plugin, vous disposez de quelques options.

Nous proposons 3 modèles de classification différents que vous pouvez choisir dans les options du plugin :

  • unbiased (par défaut) : Un modèle qui tente de réduire le biais involontaire du modèle dans la classification de la toxicité
  • multilingual : Un modèle qui peut classifier l’italien, le français, le russe, le portugais, l’espagnol et le turc.
  • original : Le modèle le plus simple.

Vous pouvez également ajuster si le plugin va :

  • signaler automatiquement
  • activer l’intervention synchrone sur les messages toxiques avec avertissement (expérimental)
  • activer l’intervention synchrone sur les messages toxiques (non recommandé)

Tout ce qui précède ne se produit que lorsque le commentaire est classé comme dépassant les seuils pour chaque type de classification :

  • toxicité
  • toxicité sévère
  • attaque identitaire
  • insulte
  • menace
  • contenu sexuellement explicite

Vous pouvez ajuster chacun des seuils de classification pour les actions automatiques.

Service de classification

Le plugin est préconfiguré et fonctionne dès l’installation. Pour cela, il contacte un service géré par Discourse (CDCK) pour classifier le contenu de l’utilisateur. Ce service d’API de classification est open-source, et vous pouvez exécuter votre propre copie du service si nécessaire.

39 « J'aime »

Juste par curiosité, quelles sont les différences entre l’implémentation de l’API Google Perspective par « Disorder » et Discourse ?

7 « J'aime »

D’un point de vue technique, ce sont des plugins complètement différents.

Vue de loin, ils répondent au même besoin, mais ils sont conçus différemment :

  • Disorder fonctionne avec les chats et les publications, Perspective uniquement avec les publications.

  • Perspective repose sur une API propriétaire et tierce, avec toutes les implications que cela implique en matière de confidentialité, de fiabilité et de transparence.

  • Disorder établit un schéma qui permet l’ajout facile de nouveaux modèles, afin que nous puissions faire évoluer le service ou même ajouter de nouvelles fonctionnalités.

  • L’API auto-hébergeable de Disorder offre une flexibilité et une liberté par rapport au paiement par appel API et aux limites de débit.

  • L’interface utilisateur de Disorder est beaucoup plus petite, elle devrait donc être plus résiliente aux mises à jour de Discourse.

16 « J'aime »

Cool. Où et comment faisons-nous cela ?

5 « J'aime »

Envoyez un e-mail à team@discourse.org :slight_smile:

6 « J'aime »

Pas besoin de répondre ici, mais si vous cherchez des suggestions sur la suite, un suggéreur d’étiquettes IA basé sur le texte d’un sujet pourrait être utile. J’imagine quelque chose de similaire à la façon dont Soundcloud suggère des étiquettes de genre musical après avoir analysé un téléchargement. C’est utile pour organiser le contenu généré par les utilisateurs sur un site fréquenté.

9 « J'aime »

Ai-je bien compris que l’instance de l’API disorder doit être lancée pour accompagner le plugin ? Il y a un paramètre pré-rempli disorder inference service api endpoint avec l’adresse https://disorder-testing.demo-by-discourse.com prédéfinie. Pourtant, il y a disorder inference service api key qui est vide par défaut.

Nous souhaitons tester ce plugin car nous sommes confrontés à de nombreux comportements toxiques entre utilisateurs, qui finissent par être résolus par le signalement et l’aide des Leaders, mais nous aimerions pouvoir empêcher proactivement les utilisateurs de diffuser des messages négatifs si cela est possible, et ce plugin semble correspondre à ce rôle.

Pouvons-nous utiliser un point d’accès prêt à l’emploi pour essayer ? Attention, nous avons environ 150 000 pages vues par jour et cela pourrait surcharger des serveurs non préparés.

Nous sommes indépendants.

4 « J'aime »

Bien que vous puissiez exécuter votre propre serveur API, le plugin est préconfiguré pour pointer vers https://disorder-testing.demo-by-discourse.com/, il fonctionne donc dès la sortie de la boîte.

Veuillez utiliser ce point de terminaison pour votre instance, car il est fourni exactement pour votre cas d’utilisation d’instances auto-hébergées souhaitant essayer ce plugin. Dans la configuration par défaut, tous les appels API se font en arrière-plan, donc l’indisponibilité de l’API n’aura aucun impact sur votre site, il est donc sûr de l’utiliser.

Le paramètre api key est facultatif et n’est nécessaire que si votre serveur API l’a activé. L’instance publique à https://disorder-testing.demo-by-discourse.com/ ne l’a pas activé.

6 « J'aime »

Merci ! Ça semble parfait et je vais essayer dans les prochains jours :heart:

4 « J'aime »

D’autres applications ML sont-elles prévues pour l’avenir ?

2 « J'aime »

J’ai essayé cela pendant une semaine, et c’était d’une agressivité absurde pour signaler les publications. Je recommande de l’utiliser uniquement si vous avez un site énorme sans assez de modérateurs. J’espère que l’IA s’améliorera, mais elle n’y est tout simplement pas encore.

6 « J'aime »

C’est un excellent retour ! Seriez-vous prêt à partager des statistiques de débogage pour m’aider à comprendre exactement ce qui s’est passé ?

Quelque chose comme le résultat de

SELECT
  pcf.value,
  p.raw
FROM
  post_custom_fields AS pcf
INNER JOIN
  posts AS p ON p.id = pcf.post_id
WHERE
  pcf.name = 'disorder'

ici ou dans un message privé serait extrêmement utile.

5 « J'aime »

Ah oui, j’avais complètement oublié ! Voici. Il n’y en avait pas beaucoup, mais ils étaient inutiles et les membres et les modérateurs les trouvaient ennuyeux. Je ne suis pas non plus sûr qu’il scanne les messages privés, je sais qu’il pourrait y avoir une utilité si quelqu’un harcèle quelqu’un via un message privé, mais la plupart du temps, cela ne fera que déclencher les gens en sachant que nous regardons leurs messages privés.

1 « J'aime »

Utilisez-vous le chat ? Tous les drapeaux gênants se trouvaient-ils dans les publications / MP ?

Nous utilisons le chat, mais je suis à peu près sûr que tous les avertissements étaient dans les publications et les messages privés.

1 « J'aime »

Tout d’abord, je suis très reconnaissant pour vos commentaires et les données que vous avez partagés, qui m’ont permis de déboguer davantage.

Voici mes conclusions !

Au cours de cette semaine, vous avez eu 1942 nouvelles publications d’utilisateurs non-staff. Une communauté assez active ! Cependant, je ne dirais pas que l’IA est “absurdement agressive dans le signalement des publications”, car seulement 7 publications ont été signalées.

Cela dit, sur ces 7, la moitié sont clairement de faux positifs déclenchés par des seuils par défaut trop bas, l’autre moitié est plus délicate pour l’IA à comprendre le contexte (appeler votre interlocuteur un imbécile vs raconter une histoire sur la façon dont quelqu’un a été un imbécile envers vous aujourd’hui pendant que vous faisiez des courses) et une est, à mon avis, un succès correct.

Si vous êtes prêt à réessayer, déplacer tous les seuils à 85 et passer au modèle original pourrait résoudre presque tous les problèmes de signalement trop zélé que vous avez eus jusqu’à présent. J’ajouterai un paramètre de site pour permettre de sauter les MP, car je peux voir à quel point cela peut être ennuyeux pour certaines communautés.

8 « J'aime »

Merci Falco, je m’excuse d’avoir dit que c’était agressivement absurde. J’avais déjà beaucoup de drames sur le site et le signalement n’a fait qu’ajouter à cela et j’étais assez agacé à l’époque.

J’apprécie les suggestions et je vais réessayer. Question, que se passe-t-il lorsque vous désactivez disorder flag automatically ? Serai-je quand même notifié d’une manière ou d’une autre si un message est jugé désordonné ? Ce serait bien de tester cela et de déterminer quels paramètres fonctionnent sans que les messages soient signalés.

4 « J'aime »

Sans ce réglage, il exécutera les publications contre l’IA mais n’entreprendra aucune action. Vous pouvez le laisser ainsi, puis exécuter cette requête Data Explorer pour analyser les taux de faux positifs/faux négatifs.

Il existe également un autre réglage qui vous permet d’ajouter des groupes à une liste d’exclusion, où vous pourriez, par exemple, exclure les publications des TL4/3 de la classification. Cela pourrait également aider.

Cher @Falco,

Nous avons commencé à tester Disorder. Les retours généraux sont positifs : il détecte vraiment les éléments inappropriés tout en signalant beaucoup de choses que notre communauté accepte. Compte tenu de la nature du forum où nous testons ce plugin (Adulte), la communication implique plusieurs aspects qui déclenchent le signalement de nombreux messages par Disorder. Votre requête SQL aide vraiment à vérifier quels seuils ajuster, mais puis-je suggérer de les ajouter au tableau de notation des éléments révisables pour chaque message signalé ?

Celui-ci

Je ne sais pas s’il est possible pour un plugin d’introduire ses propres données dans cette vue, mais cela aiderait beaucoup le personnel à comprendre quels critères ajuster pour réduire les faux positifs pour nous. La façon dont je le vois, c’est d’ajouter un menu déroulant avec une ventilation par critère déclenché dans cette vue. Il n’est pas nécessaire d’inclure les critères égaux à 0. Ceux qui sont supérieurs à 0 devraient y être présents, mais seuls ceux qui dépassent les seuils de configuration actuels devraient être marqués en gras/rouge.

Exemple de notation Disorder
  • Toxicité 65% [1]
  • Insulte 73% [2]
  • Menace 12% [3]
  • Explicite sexuel 2% [4]

Si nécessaire, je peux vous fournir les résultats de la requête SQL. Nous sommes loin d’avoir terminé la révision de la file d’attente des signalements…
Nous utilisons un modèle multilingue et n’avons pas essayé d’autres modèles. Nous avons décidé que ce serait un bon point de départ, étant donné que nous avons des utilisateurs qui préfèrent poster dans leur langue d’origine.


  1. dépassement, police rouge ↩︎

  2. dépassement, police rouge ↩︎

  3. normal, police normale ↩︎

  4. normal, police normale ↩︎

1 « J'aime »

Bonjour,

Je voulais vous informer que nous rencontrons des erreurs dans les journaux liées à Disorder lors de l’utilisation du modèle « original ». Je viens de le rebasculer en multilingue pour voir si cela faisait une différence.

Job exception: undefined method `>=’ for nil:NilClass @classification[label] >= SiteSetting.send(“disorder_flag_threshold_#{label}”) ^^

Détails

/var/www/discourse/plugins/disorder/lib/classifier.rb:39:in `block in consider_flagging’

/var/www/discourse/plugins/disorder/lib/classifier.rb:38:in `filter’

/var/www/discourse/plugins/disorder/lib/classifier.rb:38:in `consider_flagging’

/var/www/discourse/plugins/disorder/lib/classifier.rb:25:in `classify!’

/var/www/discourse/app/jobs/regular/classify_post.rb:14:in `execute’

/var/www/discourse/app/jobs/base.rb:249:in `block (2 levels) in perform’

rails_multisite-4.0.1/lib/rails_multisite/connection_management.rb:80:in with_connection' /var/www/discourse/app/jobs/base.rb:236:in block in perform’

/var/www/discourse/app/jobs/base.rb:232:in `each’

/var/www/discourse/app/jobs/base.rb:232:in `perform’

sidekiq-6.5.8/lib/sidekiq/processor.rb:202:in `execute_job’

sidekiq-6.5.8/lib/sidekiq/processor.rb:170:in `block (2 levels) in process’

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:177:in `block in invoke’

/var/www/discourse/lib/sidekiq/pausable.rb:134:in `call’

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:179:in `block in invoke’

sidekiq-6.5.8/lib/sidekiq/middleware/chain.rb:182:in `invoke’

sidekiq-6.5.8/lib/sidekiq/processor.rb:169:in `block in process’

sidekiq-6.5.8/lib/sidekiq/processor.rb:136:in `block (6 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:113:in `local’

sidekiq-6.5.8/lib/sidekiq/processor.rb:135:in `block (5 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq.rb:44:in `block in module:Sidekiq

sidekiq-6.5.8/lib/sidekiq/processor.rb:131:in `block (4 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq/processor.rb:263:in `stats’

sidekiq-6.5.8/lib/sidekiq/processor.rb:126:in `block (3 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:13:in `call’

sidekiq-6.5.8/lib/sidekiq/processor.rb:125:in `block (2 levels) in dispatch’

sidekiq-6.5.8/lib/sidekiq/job_retry.rb:80:in `global’

sidekiq-6.5.8/lib/sidekiq/processor.rb:124:in `block in dispatch’

sidekiq-6.5.8/lib/sidekiq/job_logger.rb:39:in `prepare’

sidekiq-6.5.8/lib/sidekiq/processor.rb:123:in `dispatch’

sidekiq-6.5.8/lib/sidekiq/processor.rb:168:in `process’

sidekiq-6.5.8/lib/sidekiq/processor.rb:78:in `process_one’

sidekiq-6.5.8/lib/sidekiq/processor.rb:68:in `run’

sidekiq-6.5.8/lib/sidekiq/component.rb:8:in `watchdog’

sidekiq-6.5.8/lib/sidekiq/component.rb:17:in `block in safe_thread’

Détails 2
hostname
process_id 65460
application_version 2f8ad17aed81bbfa2fd20b6cc9210be92779bd74
current_db default
current_hostname
job Jobs::ClassifyPost
problem_db default
time 1:52 pm
opts
post_id 604063
current_site_id default

P.S. Oui, le mode multilingue ne produit pas ces erreurs. Le modèle non biaisé ne produit pas non plus d’erreurs.

1 « J'aime »