Para aquellos que se preguntan cómo ver la base de datos de resultados de clasificación para los módulos de Community Sentiment y Toxicity, esto se puede hacer usando el plugin Data Explorer y la tabla classification_results.
Esto es útil para ver cómo está funcionando el plugin de IA en su sitio y clasificando las publicaciones.
Sentimiento de IA
SELECT target_id as post_id,
model_used,
classification->'negative' as negative,
classification->'neutral' as neutral,
classification->'positive' as positive
from classification_results
WHERE model_used = 'sentiment'
order by id desc
SELECT target_id as post_id,
model_used,
classification->'neutral' as neutral,
classification->'sadness' as sadness,
classification->'surprise' as surprise,
classification->'fear' as fear,
classification->'anger' as anger,
classification->'joy' as joy,
classification->'disgust' as disgust
from classification_results
WHERE model_used = 'emotion'
order by id desc
SELECT target_id as post_id,
classification->'toxicity' as toxicity,
classification->'severe_toxicity' as severe_toxicity,
classification->'obscene' as obscene,
classification->'identity_attack' as identity_attack,
classification->'insult' as insult,
classification->'threat' as threat,
classification->'sexual_explicit' as sexual_explicit
From classification_results
WHERE classification_type = 'toxicity'
order by id desc
¿Hay alguna forma de añadir un filtro a esta consulta para obtener las publicaciones de un hilo concreto? Ahora mismo, parece que está obteniendo publicaciones de toda la comunidad, lo cual está bien, pero también es engorroso encontrar una publicación/hilo concreto que se busca, sin mencionar que te encontrarás con el límite de filas para esto.
¿Funciona esto para temas específicos? Tendrás que especificar el ID del tema en los parámetros.
-- [params]
-- int :topic_id =
SELECT cr.target_id as post_id,
cr.model_used,
cr.classification->'negative' as negative,
cr.classification->'neutral' as neutral,
cr.classification->'positive' as positive
FROM classification_results cr
JOIN posts p ON p.id = cr.target_id
WHERE cr.model_used = 'sentiment'
AND p.topic_id = :topic_id
ORDER BY cr.id DESC
Pero aquí tienes uno para una publicación específica también, solo para no sentir que mi respuesta fue en vano:
-- [params]
-- topic_id :topic_id
-- int :post_number
SELECT
cr.target_id as post_id,
cr.model_used,
cr.classification->'negative' as negative,
cr.classification->'neutral' as neutral,
cr.classification->'positive' as positive
FROM classification_results cr
JOIN posts p ON p.id = cr.target_id
WHERE cr.model_used = 'sentiment'
AND p.topic_id = :topic_id
AND p.post_number = :post_number
El topic_id y el post_number se pueden encontrar ambos en la URL, por lo que es bastante fácil de usar.
-- [params]
-- int :category_id =
SELECT cr.target_id as post_id,
cr.model_used,
cr.classification->'negative' as negative,
cr.classification->'neutral' as neutral,
cr.classification->'positive' as positive
FROM classification_results cr
JOIN posts p ON p.id = cr.target_id
JOIN topics t ON t.id = p.topic_id
WHERE cr.model_used = 'sentiment'
AND t.category_id = :category_id
ORDER BY cr.id DESC
¡Gracias a ambos! Cuando ejecuto estos, no encuentra temas/IDs de temas antiguos. Me pregunto, ¿el análisis de sentimiento solo ocurre en publicaciones nuevas?
@JammyDodger sabría mejor, pero sí, creo que el análisis de sentimiento funciona en las nuevas publicaciones. Creo que para que utilice las publicaciones antiguas probablemente se requerirían algunos comandos de Rails para procesarlas a través del modelo de sentimiento y en la tabla classification_results (donde están los resultados de los análisis de las nuevas publicaciones).
Solo nuevas publicaciones a partir de ahora. Podemos considerar rellenar esa información después de que comencemos a informar sobre los datos y los validemos.
¿Podría alguno de ustedes (o algún otro brillante experto en consultas) ayudarme a ajustar esto un poco? Me gustaría tener parámetros para las fechas y que esas fechas correspondan a la fecha de publicación. El objetivo final sería poder ver los cambios a lo largo del tiempo mientras espero a ver si el panel puede hacer eso en el futuro
Si quisieras refinar esas consultas para incluir parámetros de fecha de inicio y fin, podrías usar una consulta como esta:
-- [params]
-- date :start_date = 2023-01-01
-- date :end_date = 2024-01-01
SELECT
p.created_at,
cr.target_id as post_id,
cr.model_used,
cr.classification->'negative' as negative,
cr.classification->'neutral' as neutral,
cr.classification->'positive' as positive
FROM classification_results cr
JOIN posts p ON p.id = cr.target_id
WHERE cr.model_used = 'sentiment'
AND p.created_at BETWEEN :start_date AND :end_date
ORDER BY cr.id DESC
Resultados de ejemplo:
created_at
post
model_used
negative
neutral
positive
2023-11-08T21:21:23.913Z
post_id
sentiment
58
38
2
La parte importante que se agregó aquí es unir la tabla posts con la tabla classification_results para que podamos agregar:
AND p.created_at BETWEEN :start_date AND :end_date
A la declaración WHERE para filtrar las publicaciones por su fecha created_at.
Dado que las consultas de clasificación de emotion y toxicity son similares, podrías modificar esas consultas con esta adición para incluir también parámetros de fecha de inicio y fin.
Intenté usar esta consulta (nuestra configuración de sentimiento está configurada) pero no devuelve ningún resultado. ¿Hay algo que deba intentar para solucionar problemas?