Para aqueles que estão se perguntando como visualizar o banco de dados de resultados de classificação para os módulos Community Sentiment e Toxicity, isso pode ser feito usando o plugin Data Explorer e a tabela classification_results.
Isso é útil para ver como o plugin de IA está funcionando em seu site e classificando as postagens.
AI Sentiment
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
Existe uma maneira de adicionar um filtro a esta consulta para obter as postagens de um thread específico? No momento, parece que ela está obtendo postagens de toda a Comunidade, o que é bom, mas também complicado para encontrar uma postagem/thread específica que você está procurando, sem mencionar que você atingirá o limite de linhas para isso.
Isso funciona para tópicos específicos? você terá que especificar o ID do tópico nos params.
-- [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
-- [params]
-- topic_id :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 p.id
Ah, você chegou antes de mim.
Mas aqui está um para um post específico também, apenas para não parecer uma resposta desperdiçada:
-- [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
O topic_id e o post_number podem ser encontrados na URL, então é bastante amigável para o usuário.
Eu acho que isso deve ter como alvo o ID da categoria:
-- [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
Obrigado a ambos! Quando executo estes, ele não encontra tópicos/IDs de tópicos mais antigos. Eu me pergunto - a análise de sentimento só acontece em novas postagens?
@JammyDodger saberia dizer melhor, mas sim, acho que a análise de sentimento funciona em novas postagens. Acho que para que ela use as postagens antigas, provavelmente seriam necessários alguns comandos do Rails para processá-las através do modelo de sentimento e inseri-las na tabela classification_results (onde estão os resultados das análises das novas postagens).
Apenas novas postagens a partir de agora. Podemos considerar o preenchimento retroativo dessas informações depois que começarmos a relatar os dados e os validarmos.
Um de vocês (ou outro brilhante criador de consultas) poderia me ajudar a refinar isso um pouco? Eu gostaria de ter parâmetros para datas e essas datas corresponderiam à data da postagem. O objetivo final seria poder observar as mudanças ao longo do tempo enquanto se espera para ver se o painel pode fazer isso no futuro
Se você quisesse refinar essas consultas para incluir parâmetros de data de início e fim, você poderia usar uma 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
Exemplo de Resultados:
created_at
post
model_used
negative
neutral
positive
2023-11-08T21:21:23.913Z
post_id
sentiment
58
38
2
A parte importante adicionada aqui é unir a tabela posts com a tabela classification_results para que possamos adicionar:
AND p.created_at BETWEEN :start_date AND :end_date
ao WHERE statement para filtrar os posts por sua data de created_at.
Como as consultas de classificação emotion e toxicity são semelhantes, você poderia modificar essas consultas com esta adição para incluir parâmetros de data de início e fim também.
Tentei usar esta consulta (nossa configuração de sentimento está configurada), mas ela não está retornando nenhum resultado. Algo que eu deveria tentar para solucionar problemas?