Sondaggio sul sentimento della comunità e tossicità

Per coloro che si chiedono come visualizzare il database dei risultati della classificazione per i moduli Community Sentiment e Toxicity, è possibile farlo utilizzando il plugin Data Explorer e la tabella classification_results.

Questo è utile per vedere come funziona il plugin AI sul tuo sito e classifica i post.

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 Mi Piace

È possibile aggiungere un filtro a questa query per ottenere i post da un thread specifico? Al momento, sembra che stia ottenendo post dall’intera community, il che è utile, ma anche macchinoso per trovare un post/thread specifico che si sta cercando, per non parlare del fatto che si andrà a sbattere contro il limite di righe per questo.

2 Mi Piace

Ciao @Samantha_O :wave:

Funziona per argomenti specifici? dovrai specificare l’ID dell’argomento nei parametri.

-- [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 Mi Piace
-- [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, mi hai battuto sul tempo. :slight_smile:

Ma eccone uno anche per un post specifico, giusto per non far sembrare la risposta inutile:

-- [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

Il topic_id e il post_number si trovano entrambi nell’URL, quindi è piuttosto user-friendly.

Topic_id:

Post_number:

5 Mi Piace

Penso che questo dovrebbe puntare all’ID della 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 Mi Piace

Grazie a entrambi! Quando li eseguo, non trova argomenti/ID di argomenti più vecchi. Mi chiedo: l’analisi del sentiment avviene solo sui nuovi post?

modificato per chiarezza

2 Mi Piace

@JammyDodger ne saprebbe di più, ma sì, penso che l’analisi del sentiment funzioni sui nuovi post. Penso che per farlo funzionare anche sui vecchi post sarebbero probabilmente necessari alcuni comandi rails per elaborarli attraverso il modello di sentiment, e inserirli nella tabella classification_results (dove sono i risultati delle analisi dei nuovi post).

3 Mi Piace

Funziona sui nuovi post una volta attivato. :+1: Non sono sicuro se ci sia un’opzione di riempimento per questo?

4 Mi Piace

Solo nuovi post d’ora in poi. Possiamo considerare di riempire retroattivamente tali informazioni dopo aver iniziato a segnalare i dati e averli convalidati.

6 Mi Piace

Uno di voi (o un altro brillante esperto di query) potrebbe aiutarmi a ottimizzare un po’ questo? Vorrei avere dei parametri per le date e quelle date dovrebbero corrispondere alla data di pubblicazione. L’obiettivo finale sarebbe poter osservare i cambiamenti nel tempo, in attesa di vedere se la dashboard potrà farlo in futuro :crossed_fingers:

Ciao Samantha,

Se volessi perfezionare quelle query per includere i parametri di data di inizio e fine, potresti usare una query come questa:

-- [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

Esempio di risultati:

created_at post model_used negative neutral positive
2023-11-08T21:21:23.913Z post_id sentiment 58 38 2

La parte importante aggiunta qui è l’unione della tabella posts con la tabella classification_results in modo da poter aggiungere:

AND p.created_at BETWEEN :start_date AND :end_date

all’istruzione WHERE per filtrare i post in base alla loro data created_at.

Poiché le query di classificazione emotion e toxicity sono simili, potresti modificare anche quelle query con questa aggiunta per includere i parametri di data di inizio e fine. :slightly_smiling_face:

4 Mi Piace
4 Mi Piace

Aggiungo anche questo:

2 Mi Piace

Ho provato a usare questa query (la nostra impostazione di sentiment è configurata) ma non restituisce alcun risultato. C’è qualcosa che dovrei provare per risolvere il problema?

Ho aggiornato le guide su Dashboard Report - Overall Sentiment e Dashboard Report - Post Emotion, puoi riprovare con le query aggiornate?

3 Mi Piace