Consultas sobre sentimento da comunidade e toxicidade

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

AI Emotion:

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

AI Toxicity:

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

8 curtidas

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.

2 curtidas

Olá @Samantha_O :wave:

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
6 curtidas
-- [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. :slight_smile:

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.

Topic_id:

Post_number:

5 curtidas

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

5 curtidas

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?

editado para clareza

2 curtidas

@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).

3 curtidas

Funciona em novas postagens depois de ativado. :+1: Não tenho certeza se há uma opção de preenchimento retroativo para isso?

4 curtidas

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.

6 curtidas

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 :crossed_fingers:

Olá Samantha,

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. :slightly_smiling_face:

4 curtidas
4 curtidas

Adicionando este aqui também:

2 curtidas

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?

Atualizei os guias em Dashboard Report - Overall Sentiment e Dashboard Report - Post Emotion, você pode tentar novamente com as consultas atualizadas?

3 curtidas