Для тех, кто интересуется, как просмотреть базу данных результатов классификации для модулей «Community Sentiment» и «Toxicity», это можно сделать с помощью плагина Data Explorer и таблицы classification_results.
Это полезно для того, чтобы увидеть, как работает плагин ИИ на вашем сайте и как он классифицирует сообщения.
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
Можно ли добавить фильтр к этому запросу, чтобы получать посты из конкретной ветки? Сейчас, похоже, извлекаются посты со всего сообщества, что удобно, но затрудняет поиск нужного поста или ветки, не говоря уже о том, что вы упрётесь в лимит строк для этого.
Это работает для конкретных тем? Вам нужно указать ID темы в параметрах.
-- [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
Ах, ты меня опередил.
Но вот ещё один запрос для конкретного поста, чтобы ответ не казался пустой тратой времени:
-- [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
topic_id и post_number можно найти в URL, так что это довольно удобно для пользователя.
Я думаю, что здесь должен использоваться идентификатор категории:
-- [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, вероятно, знает лучше, но да, я думаю, что анализ тональности работает с новыми постами. Чтобы заставить его обрабатывать старые посты, скорее всего, потребуются команды Rails для прогона их через модель анализа тональности и записи результатов в таблицу classification_results (туда же, куда попадают результаты анализа новых постов).
Только новые посты с этого момента. Мы можем рассмотреть возможность заполнения этой информации после того, как начнем отчетность по данным и подтвердим их достоверность.
Не мог бы кто-нибудь из вас (или другой гениальный специалист по запросам) помочь мне немного доработать это? Я хотел бы добавить параметры для дат, которые соответствовали бы дате публикации. Конечная цель — иметь возможность отслеживать изменения со временем, пока мы ждём, появится ли такая функция в панели управления в будущем
Если ты хочешь уточнить эти запросы, добавив параметры даты начала и окончания, можно использовать такой запрос:
-- [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
Пример результатов:
created_at
post
model_used
negative
neutral
positive
2023-11-08T21:21:23.913Z
post_id
sentiment
58
38
2
Ключевое изменение здесь — соединение таблицы posts с таблицей classification_results, чтобы можно было добавить:
AND p.created_at BETWEEN :start_date AND :end_date
в условие WHERE для фильтрации записей по дате их создания (created_at).
Поскольку запросы для классификации по эмоциям (emotion) и токсичности (toxicity) аналогичны, ты можешь внести это же изменение и в них, чтобы также добавить параметры даты начала и окончания.
Я попробовал использовать этот запрос (настройка тональности у нас уже настроена), но он не возвращает никаких результатов. Что можно попробовать для устранения проблемы?