Trastorno del Discurso

También he modificado tu consulta para mostrar la puntuación de una manera más conveniente utilizando el Explorador de Datos.
Los créditos van a ChatGPT y Pistas de PostgreSQL de Leonardo:

SELECT
  json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS severe_toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS obscene,
  json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS identity_attack,
  json_extract_path_text(pcf.value::json, 'classification', 'insult') AS insult,
  json_extract_path_text(pcf.value::json, 'classification', 'threat') AS threat,
  json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS sexual_explicit,
  json_extract_path_text(pcf.value::json, 'model') AS model,
  pcf.created_at,
  p.raw
FROM
  post_custom_fields AS pcf
INNER JOIN
  posts AS p ON p.id = pcf.post_id
INNER JOIN
  topics AS t ON t.id = p.topic_id
WHERE
  pcf.name = 'disorder' 
  AND t.archetype = 'regular'
ORDER BY created_at DESC
Y esta modificación devolverá aquellas filas donde cualquiera de los valores de clasificación sea mayor que 50 (o lo que sea que establezcas)
-- [params]
-- int :threshold = 50
SELECT DISTINCT ON (p.id, pcf.created_at)
  json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS severe_toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS obscene,
  json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS identity_attack,
  json_extract_path_text(pcf.value::json, 'classification', 'insult') AS insult,
  json_extract_path_text(pcf.value::json, 'classification', 'threat') AS threat,
  json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS sexual_explicit,
  json_extract_path_text(pcf.value::json, 'model') AS model,
  p.id as post_id,
  pcf.created_at,
  p.raw
FROM
  post_custom_fields AS pcf
INNER JOIN
  posts AS p ON p.id = pcf.post_id
INNER JOIN
  topics AS t ON t.id = p.topic_id
WHERE
  pcf.name = 'disorder' 
  AND t.archetype = 'regular'
GROUP BY p.id, pcf.value, pcf.created_at
HAVING 
  CAST(json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'insult') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'threat') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS FLOAT) > :threshold
ORDER BY pcf.created_at DESC, p.id

También puedes modificarlo introduciendo varios parámetros más para poder establecer diferentes umbrales para informar utilizando el explorador de datos.

Ten en cuenta: esto solo devolverá publicaciones públicas, sin acceder a mensajes privados.

3 Me gusta

¡Estamos trabajando en esta función exacta ahora mismo!

También estamos planeando usar las tasas de falsos positivos/negativos para ejecutar un optimizador que pueda sugerirle los mejores umbrales para cada opción, así que conserve esa información, ya que será útil en el futuro cercano.

5 Me gusta

Suena genial. Me alegra oír eso.
Hasta ahora, tiendo a rechazar/ignorar todas las advertencias que hace Disorderbot, incluso habiendo aumentado los umbrales hasta un máximo de 90-100. Pero, debido a la naturaleza del foro en el que lo estamos probando (NSFW), la IA se confunde fácilmente si la comunicación es realmente tóxica o no. Mientras no sea tan fiable para nuestro caso de uso, seguiremos utilizándolo, pero solo usaremos sus informes para “reforzar” otros informes sobre publicaciones realmente tóxicas.

Tan pronto como encontremos umbrales mejores para usar a largo plazo, podremos habilitar advertencias preventivas cuando un usuario intente publicar algo realmente tóxico.

Eso es lo que sospecho cuando la IA se generalice. Permitirá la censura y limitará el cuestionamiento genuino del status quo que es necesario para la salud de todas las comunidades del mundo.

No limitar ni prohibir, educar y debatir. Quizás haya una manera de usar las herramientas sin el efecto secundario (ya que mis preocupaciones son que ese es el efecto deseado), pero veo que no es posible en este momento.

Gracias por tus comentarios, tienen valor para mí. Y, por supuesto, gracias al equipo por mantener Discourse actualizado y mejorando como siempre :slight_smile:

Establecer todos los umbrales en 100 y confiar solo en los más extremos, como “toxicidad severa” y “amenaza”, es algo que puedo ver adoptado en comunidades como esa.

3 Me gusta

Gracias. Actualmente está configurado así y sigue siendo demasiado sensible. Aumentaré algunas más y veré cómo va

1 me gusta

Tendría que ver las clasificaciones brutas, pero también aumentaría primero la de insultos.

Mejor te mantendré alejado de leer eso :smiley: Podrían ser realmente NSFW, incluso en forma de texto.
He aumentado el primer umbral a 100 también, ya veré cómo va ahora :smiley:

1 me gusta

Espero sinceramente que en futuras versiones sea posible que Disorder no revise (o no informe sobre) los mensajes privados. No los consultamos y sentimos que la IA que revisa conversaciones privadas es muy poco ética.

4 Me gusta

Sí, eso es lo mismo que preguntó @davidkingham, lo pondremos en nuestra hoja de ruta.

3 Me gusta

…¿y el inglés? :sweat_smile:

Además, me pregunto hasta qué punto esto puede reemplazar a Akismet. Tenemos una tasa de desacuerdo del 97% en las marcas de Akismet en este momento. Parece que simplemente reacciona a las publicaciones con muchos dígitos, por lo que si publicas registros de trabajo, donde cada línea comienza con una marca de tiempo…

1 me gusta

La guerra armamentista entre el spam y la detección de spam acaba de volverse nuclear con la llegada de los LLM ampliamente disponibles. Estamos trabajando arduamente en funciones que utilizan una amplia gama de modelos y, si bien el spam no es nuestra prioridad en este momento, es algo que investigaremos.

4 Me gusta

De acuerdo, entonces: Lo encendí. ¿Cómo sé que está funcionando?

Aparte de bajar los umbrales al mínimo para capturar todo, quiero decir.

¿Hay un modo de diagnóstico o un registro donde pueda ver qué puntuación ha obtenido una publicación determinada?

2 Me gusta

La forma más fácil es provocarlo publicando algo insultante. Asegúrate de que el grupo de tu usuario no se omita en la configuración del plugin.

La mejor manera es consultar Data Explorer. Consulte una de mis consultas en esta publicación:

1 me gusta

Gracias. Eso está devolviendo ceros en todos los ámbitos para todas las publicaciones hasta ahora… ¿se espera eso?

1 me gusta

La mayoría de nuestras publicaciones también tienen 0 en todos los criterios. Esto es normal para un foro con una comunicación saludable.

2 Me gusta

Genial — no estaba seguro de lo rápido que reacciona el modelo. :slight_smile:

1 me gusta

Instalé el plugin, pero no funciona, ¿tengo que hacer alguna configuración adicional?

Estoy viendo un gran número de los siguientes errores del plugin:
Job exception: uninitialized constant Jobs::ClassifyChatMessage::ChatMessage

El problema parece ocurrir cuando uno de mis plugins crea un mensaje de chat usando el siguiente comando:
Chat::MessageCreator.create(chat_channel: matching_channel, user: message_user, content: raw).chat_message

Gracias

1 me gusta

Ohhh, esto debería haberse roto con la nueva reorganización del chat. Estamos a punto de lanzar un nuevo plugin que incorporará la funcionalidad de este en los próximos días, así que estad atentos.

5 Me gusta