Trastorno del Discurso

:warning: Esta función ahora forma parte de Discourse AI. Este plugin está obsoleto.

|||
-|-|-|
:discourse2: | Resumen | Disorder ayuda a los moderadores a marcar automáticamente el contenido potencialmente tóxico en tu foro de Discourse.
:hammer_and_wrench: | Enlace al Repositorio | https://github.com/xfalcox/disorder
:open_book: | Guía de Instalación | Cómo instalar plugins en Discourse

Si estás utilizando nuestro servicio oficial de alojamiento, ponte en contacto con nuestro soporte para registrar tu interés en este plugin.

Toxicidad

Como dijo @hawk en Dealing with Toxicity in Online Communities, gestionar la toxicidad en tu comunidad es fundamental.

Si bien Discourse viene listo para usar con muchas herramientas diferentes para ayudar a gestionar la toxicidad en tu comunidad, siempre estamos investigando formas de mejorarla aún más. En particular, he estado investigando sobre posibles aplicaciones de Machine Learning e IA en foros en línea. Que ahora es un plugin experimental, disponible para todas las comunidades.

El plugin

Disorder aprovecha la Inteligencia Artificial y el Machine Learning para ayudarte a moderar tu comunidad, facilitando que tu equipo de moderación esté al tanto del contenido potencialmente problemático e incluso dando un empujón opcional a tus usuarios para que revisen las publicaciones tóxicas antes de publicarlas.

Esta es una primera incursión en el uso de modelos de ML autoalojados en Discourse, y aunque es un modelo simple, establece un patrón que puede reutilizarse para aplicar modelos más complejos en el futuro.

Características

Marcado en segundo plano

Este es el modo de operación principal de Disorder, ya que es completamente transparente para tus usuarios, que no serán conscientes de ningún cambio.

Cada vez que se crea una nueva publicación (o mensaje de chat usando Discourse Chat), se pondrá en una cola de clasificación de forma asíncrona. En caso de que la clasificación supere un umbral configurable, la publicación/mensaje de chat se marcará para que tu equipo de moderación sea advertido y pueda tomar la decisión final sobre la marca.

Intervención en nuevas publicaciones

Si crees que la prevención es la mejor medicina, puede que te interese esta opción más activa.

Puedes habilitar una clasificación síncrona de cualquier publicación nueva que, si supera un umbral configurable de toxicidad, desencadenará una intervención en el flujo de nuevas publicaciones, pidiendo al usuario que revise y enmiende el mensaje que pueda estar fuera de los límites establecidos por las reglas de tu comunidad.

Esto solo ocurrirá una vez, y después de cerrar la ventana modal, el usuario podrá publicar normalmente.

¿Cómo funciona?

Este plugin integra los modelos de código abierto de Detoxify, utilizando un modelo de llamada a API remota para permitir a los administradores escalar adecuadamente la tasa de inferencia a las necesidades de cada comunidad.

Proporcionamos una imagen simple que proporciona una API HTTP delgada que Discourse llamará para realizar la clasificación de contenido, la cual puede ejecutarse tanto en el mismo servidor donde ejecutas Discourse, como en un servidor diferente.

El plugin de Discourse escucha los eventos de nuevas publicaciones / nuevos mensajes de chat, y pone en cola un trabajo de clasificación en la cola de fondo. Los resultados se almacenan en la base de datos para que puedas extraer informes, y marcamos el contenido utilizando un usuario bot separado para que podamos rastrear la precisión de sus marcas a lo largo del tiempo.

Opciones

Primero, el plugin funciona directamente, por lo que no es necesario cambiar ninguna configuración de inmediato. Sin embargo, si deseas cambiar el comportamiento del plugin, hay algunas opciones que puedes usar.

Proporcionamos 3 modelos de clasificación diferentes que puedes elegir en las opciones del plugin:

  • unbiased (predeterminado): Un modelo que intenta reducir el sesgo involuntario del modelo en la clasificación de toxicidad.

  • multilingual: Un modelo que puede clasificar italiano, francés, ruso, portugués, español y turco.

  • original: El modelo más simple.

También puedes ajustar si el plugin:

  • marcará automáticamente
  • habilitará la intervención síncrona en publicaciones tóxicas con advertencia (experimental)
  • habilitará la intervención síncrona en publicaciones tóxicas (no recomendado)

Todo lo anterior solo ocurre cuando el comentario se clasifica por encima de los umbrales para cada tipo de clasificación:

  • toxicidad
  • toxicidad_severa
  • ataque_identidad
  • insulto
  • amenaza
  • sexual_explícito

Puedes ajustar cada uno de los umbrales de clasificación para acciones automáticas.

Servicio de Clasificación

El plugin viene preconfigurado y funciona directamente. Para ello, se pone en contacto con un servicio administrado por Discourse (CDCK) para clasificar el contenido del usuario. Ese servicio de API de clasificador es de código abierto, y puedes ejecutar tu propia copia del servicio si es necesario.

39 Me gusta

Solo por curiosidad, ¿cuáles son las diferencias entre la implementación de “Disorder” y la de Discourse de la API Google Perspective?

7 Me gusta

En cuanto al código, son plugins completamente diferentes.

A primera vista, cubren la misma necesidad, pero están diseñados de manera diferente:

  • Disorder funciona con chats y publicaciones, Perspective solo con publicaciones.

  • Perspective se basa en una API propietaria y de terceros, con todas las implicaciones de privacidad, fiabilidad y transparencia que ello conlleva.

  • Disorder establece un patrón que permite la adición de nuevos modelos fácilmente, por lo que podemos evolucionar el servicio o incluso añadir funcionalidades completamente nuevas.

  • La API autoalojable de Disorder proporciona flexibilidad y libertad de los pagos por llamada a la API y los límites de tasa.

  • La interfaz de usuario de Disorder es bastante más pequeña, por lo que debería ser más resistente a las actualizaciones de Discourse.

16 Me gusta

Genial. ¿Dónde y cómo lo hacemos?

5 Me gusta

Envía un correo electrónico a team@discourse.org :slight_smile:

6 Me gusta

No es necesario responder aquí, pero si está buscando sugerencias sobre los próximos pasos, un sugeridor de etiquetas de IA basado en el texto de un tema podría ser útil. Me imagino algo similar a cómo Soundcloud sugiere etiquetas de género musical después de realizar un análisis sobre una carga. Es útil para organizar el contenido generado por el usuario en un sitio concurrido.

9 Me gusta

¿Entiendo correctamente que la instancia de la API de desorden debe iniciarse para complementar el plugin? Hay una configuración prellenada disorder inference service api endpoint con https://disorder-testing.demo-by-discourse.com preestablecida. Sin embargo, hay disorder inference service api key que está vacía por defecto.

Estamos interesados en probar este plugin, ya que nos enfrentamos a mucho comportamiento tóxico entre los usuarios, que finalmente se resuelve marcando y con la ayuda de los Líderes, sin embargo, nos gustaría prevenir proactivamente que los usuarios difundan publicaciones negativas si es posible, y este plugin parece encajar en esa función.

¿Podemos usar algún endpoint listo para probarlo? Advertencia: tenemos ~150k visitas a la página diariamente y podría saturar algunos servidores no preparados.

Somos independientes.

4 Me gusta

Si bien puedes ejecutar tu propio servidor de API, el plugin viene preconfigurado apuntando a https://disorder-testing.demo-by-discourse.com/ para que funcione de inmediato.

Por favor, utiliza este endpoint para tu instancia, ya que se proporciona exactamente para tu caso de uso de instancias autoalojadas que desean probar este plugin. En la configuración predeterminada, todas las llamadas a la API se realizan en segundo plano, por lo que si la API no funciona, no afectará a tu sitio de ninguna manera, por lo que es seguro usarla.

La configuración de api key es opcional y solo se necesita si tu servidor de API la tiene habilitada. La instancia pública en https://disorder-testing.demo-by-discourse.com/ no la tiene habilitada.

6 Me gusta

¡Gracias! Suena perfecto y lo probaré en los próximos días :heart:

4 Me gusta

¿Hay otras aplicaciones de ML planificadas para el futuro?

2 Me gusta

Lo probé durante una semana y fue absurdamente agresivo al marcar publicaciones. Recomiendo usar esto solo si tienes un sitio enorme sin suficientes moderadores. Espero que la IA mejore, pero simplemente no está ahí todavía.

6 Me gusta

¡Este es un gran comentario! ¿Estarías dispuesto a compartir algunas estadísticas de depuración para ayudarme a entender exactamente qué sucedió?

Algo como el resultado 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'

aquí o en un mensaje privado sería de gran ayuda.

5 Me gusta

¡Ah sí, me olvidé por completo de eso! Aquí tienes. Realmente no eran tantos, pero eran innecesarios y los miembros y moderadores los encontraban molestos. Tampoco estoy seguro de que escanee los mensajes directos, sé que podría tener valor si alguien está acosando a alguien por mensaje directo, pero la mayoría de las veces simplemente provocará que la gente sepa que estamos mirando sus mensajes directos.

1 me gusta

¿Usas chat? ¿Estaban todas las banderas molestas en las publicaciones / MP?

Usamos chat, pero estoy bastante seguro de que todas las advertencias estaban en publicaciones y mensajes privados.

1 me gusta

En primer lugar, estoy muy agradecido por los comentarios y los datos que compartiste y que me permitieron depurar esto aún más.

¡Ahora a mis hallazgos!

Durante esta semana, tuviste 1942 publicaciones nuevas de usuarios no administradores. ¡Una comunidad bastante activa! Sin embargo, no diría que la IA es “absurdamente agresiva al marcar publicaciones”, ya que solo se marcaron 7 publicaciones.

Dicho esto, de esas 7, la mitad son claramente falsos positivos activados por umbrales predeterminados demasiado bajos, la otra mitad son más complicadas para que la IA entienda el contexto (llamar a tu interlocutor imbécil vs contar una historia sobre cómo alguien fue un imbécil contigo hoy mientras comprabas) y una, en mi opinión, es un acierto correcto.

Si estás dispuesto a intentarlo de nuevo, mover todos los umbrales a 85 y pasar al modelo original podría resolver casi todos los problemas de marcado de publicaciones demasiado sensibles que has tenido hasta ahora. Añadiré una configuración del sitio para permitir omitir los mensajes privados, ya que puedo ver cómo eso puede ser molesto para algunas comunidades.

8 Me gusta

Gracias Falco, me disculpo por decir que era absurdamente agresivo. Ya tenía mucho drama sucediendo en el sitio y la marcación solo se sumó a eso y estaba bastante molesto en ese momento.

Agradezco las sugerencias y lo intentaré de nuevo. Pregunta, ¿qué sucede cuando deshabilitas marcar desorden automáticamente? ¿Aún seré notificado de alguna manera si una publicación se considera desordenada? Esto sería bueno para probarlo y averiguar qué configuración funciona sin que se marquen las publicaciones.

4 Me gusta

Sin esa configuración, ejecutará las publicaciones contra la IA pero no realizará ninguna acción. Puede dejarla así y luego ejecutar esa consulta de Data Explorer para hacer un análisis de las tasas de falsos positivos/falsos negativos.

También hay otra configuración que le permite agregar grupos a una lista de omisión, donde podría, por ejemplo, omitir la clasificación de publicaciones de TL4/3. Eso también podría ayudar.

Estimado @Falco,

Hemos comenzado a probar Disorder. La retroalimentación general es positiva: realmente detecta cosas inapropiadas, al tiempo que marca muchas cosas que nuestra comunidad acepta. Debido a la naturaleza del foro donde probamos este plugin (Adulto), la comunicación involucra varios aspectos que activan a Disorder para marcar muchas, muchas publicaciones. Su Consulta SQL realmente ayuda a verificar qué umbrales ajustar, pero ¿puedo sugerir agregar estos a la tabla de Puntuación Revisable para cada publicación marcada?

Este

No sé si es posible que un plugin introduzca sus propios datos en esta vista, pero ayudaría mucho al personal a comprender qué criterios ajustar para reducir los falsos positivos para nosotros. La forma en que lo veo es agregar un menú desplegable con un desglose por criterio activado dentro de esta vista. No es necesario incluir criterios que igualen 0. Aquellos que estén por encima de 0 deberían estar presentes allí, pero solo aquellos que excedan los umbrales de configuración actuales deberían marcarse en negrita/rojo.

Ejemplo de Puntuación de Disorder
  • Toxicidad 65% [1]
  • Insulto 73% [2]
  • Amenaza 12% [3]
  • Explicación sexual 2% [4]

Si es necesario, puedo proporcionarle los resultados de la Consulta SQL. Estamos lejos de terminar de revisar la Cola de Banderas…
Estamos utilizando un modelo multilingüe y no hemos probado otros. Decidimos que sería bueno comenzar considerando que tenemos algunos usuarios que prefieren publicar en su idioma original.


  1. excediendo, fuente roja ↩︎

  2. excediendo, fuente roja ↩︎

  3. normal, fuente normal ↩︎

  4. normal, fuente normal ↩︎

1 me gusta

Hola de nuevo,

Quería informarte que estamos recibiendo errores en los registros relacionados con Disorder al usar el modelo “original”. Acabo de cambiarlo de nuevo a multilingüe para ver si hacía alguna diferencia.

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

Detalles

/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’

Detalles 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.D. Sí, el modo multilingüe no produce estos errores. El modelo imparcial tampoco produce errores.

1 me gusta