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
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
È 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.
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
-- [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.
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.
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
@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).
Solo nuovi post d’ora in poi. Possiamo considerare di riempire retroattivamente tali informazioni dopo aver iniziato a segnalare i dati e averli convalidati.
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
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.
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?