Расстройство дискурса

Я также модифицировал ваш запрос, чтобы отображать оценки более удобным способом с помощью Data Explorer.
Заслуга принадлежит ChatGPT и PostgreSQL clues by Leonardo:

SELECT
  json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS severe_toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS obscene,
  json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS identity_attack,
  json_extract_path_text(pcf.value::json, 'classification', 'insult') AS insult,
  json_extract_path_text(pcf.value::json, 'classification', 'threat') AS threat,
  json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS sexual_explicit,
  json_extract_path_text(pcf.value::json, 'model') AS model,
  pcf.created_at,
  p.raw
FROM
  post_custom_fields AS pcf
INNER JOIN
  posts AS p ON p.id = pcf.post_id
INNER JOIN
  topics AS t ON t.id = p.topic_id
WHERE
  pcf.name = 'disorder' 
  AND t.archetype = 'regular'
ORDER BY created_at DESC
А эта модификация вернёт те строки, где любое из значений классификации больше 50 (или того, что вы установите)
-- [params]
-- int :threshold = 50
SELECT DISTINCT ON (p.id, pcf.created_at)
  json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS severe_toxicity,
  json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS obscene,
  json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS identity_attack,
  json_extract_path_text(pcf.value::json, 'classification', 'insult') AS insult,
  json_extract_path_text(pcf.value::json, 'classification', 'threat') AS threat,
  json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS sexual_explicit,
  json_extract_path_text(pcf.value::json, 'model') AS model,
  p.id as post_id,
  pcf.created_at,
  p.raw
FROM
  post_custom_fields AS pcf
INNER JOIN
  posts AS p ON p.id = pcf.post_id
INNER JOIN
  topics AS t ON t.id = p.topic_id
WHERE
  pcf.name = 'disorder' 
  AND t.archetype = 'regular'
GROUP BY p.id, pcf.value, pcf.created_at
HAVING 
  CAST(json_extract_path_text(pcf.value::json, 'classification', 'toxicity') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'severe_toxicity') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'obscene') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'identity_attack') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'insult') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'threat') AS FLOAT) > :threshold 
  OR CAST(json_extract_path_text(pcf.value::json, 'classification', 'sexual_explicit') AS FLOAT) > :threshold
ORDER BY pcf.created_at DESC, p.id

Вы также можете модифицировать его, добавив несколько дополнительных параметров, чтобы иметь возможность устанавливать разные пороги для отчётов в Data Explorer.

Обратите внимание: это вернёт только публичные посты, без доступа к личным сообщениям.

3 лайка

Мы прямо сейчас работаем над этой функцией!

Мы также планируем использовать показатели ложноположительных и ложноотрицательных результатов для работы оптимизатора, который сможет предлагать вам наилучшие пороги для каждого варианта. Поэтому сохраняйте эту информацию — она пригодится в ближайшем будущем.

5 лайков

Звучит отлично. Рад это слышать.
Пока я склоняюсь к тому, чтобы отклонять/игнорировать все флаги, которые ставит Disorderbot, даже повышая пороги до максимума — 90–100. Однако из-за специфики форума, на котором мы его тестируем (NSFW), ИИ легко путается, определяя, действительно ли общение токсично или нет. Пока он не станет достаточно надёжным для нашего случая использования, мы продолжим его применять, но будем использовать его отчёты только для того, чтобы «подкрепить» другие жалобы на действительно токсичные сообщения.

Как только мы найдём более подходящие пороги для долгосрочного использования, сможем включить превентивные предупреждения, когда пользователь попытается опубликовать что-то действительно токсичное.

Именно этого я и опасался, когда ИИ станет мейнстримом. Это откроет путь к цензуре и ограничению подлинного вопроса статус-кво, который необходим для здоровья каждого сообщества в мире.

Не ограничивать и не запрещать, а обучать и обсуждать. Возможно, существует способ использовать эти инструменты без побочных эффектов (как я полагаю, это и есть желаемый эффект), но сейчас я вижу, что это невозможно.

Спасибо за ваш отзыв, он для меня ценен. И, конечно, спасибо команде за то, что они, как всегда, обновляют и совершенствуют Discourse :slight_smile:

Установка всех пороговых значений на 100 и опора только на наиболее экстремальные критерии, такие как «серьезная токсичность» и «угроза», — это подход, который, как я вижу, может быть принят в подобных сообществах.

3 лайка

Спасибо. В данный момент оно настроено так, но всё ещё слишком чувствительно. Я ещё больше повышу некоторые значения и посмотрю, как это сработает.

1 лайк

Нужно посмотреть на исходные классификации, но я бы тоже сначала увеличил порог для оскорблений.

Лучше не читай это :smiley: Это может быть действительно NSFW, даже в текстовом виде
Я также поднял первый порог до 100, посмотрим, как теперь пойдет дело :smiley:

1 лайк

Я очень надеюсь, что в будущих версиях Disorder перестанет проверять (или сообщать о) личные сообщения. Мы не получаем к ним доступ и считаем, что использование ИИ для проверки личных переписок крайне неэтично.

4 лайка

Да, это тот же вопрос, который задавал @davidkingham. Мы включим его в наш план развития.

3 лайка

…а английский? :sweat_smile:

Также меня интересует, в какой степени это может заменить Akismet. Сейчас у нас уровень несогласия с пометками Akismet составляет 97%. Похоже, он просто реагирует на сообщения с большим количеством цифр, поэтому, если вы публикуете логи заданий, где каждая строка начинается с временной метки…

1 лайк

Война между спамом и системами его обнаружения перешла на новый уровень с появлением широко доступных больших языковых моделей (LLM). Мы активно работаем над функциями, использующими широкий спектр моделей. Хотя спам в данный момент не является нашим приоритетом, мы обязательно изучим этот вопрос.

4 лайка

Ладно, значит: я его включил. Как я могу узнать, что он работает?

Ну, кроме того, чтобы опустить пороги очень низко, чтобы ловить всё подряд, я имею в виду.

Есть ли диагностический режим или лог, где я мог бы увидеть, какой балл получил тот или иной пост?

2 лайка

Самый простой способ — спровоцировать это, опубликовав что-то оскорбительное. Убедитесь, что группа вашего пользователя не исключена в настройках плагина.

Более правильный способ — использовать запросы в Data Explorer. Пожалуйста, обратитесь к одному из моих запросов в этом посте:

1 лайк

Спасибо. Пока что для всех постов возвращаются нули… это нормально?

1 лайк

Большинство наших сообщений также имеют нулевые значения по всем критериям. Это нормально для форума с здоровым общением.

2 лайка

Круто — я не был уверен, насколько модель склонна к поспешным решениям. :slight_smile:

1 лайк

Я установил плагин, но он не работает. Нужно ли выполнить дополнительную настройку?

Я вижу множество следующих ошибок от плагина:
Исключение в задаче: неопределённая константа Jobs::ClassifyChatMessage::ChatMessage

Проблема, похоже, возникает, когда один из моих плагинов создаёт сообщение в чате с помощью следующей команды:
Chat::MessageCreator.create(chat_channel: matching_channel, user: message_user, content: raw).chat_message

Спасибо

1 лайк

Ох, это должно было сломаться из-за новой реорганизации чата. Мы на грани запуска нового плагина, который в ближайшие дни включит функционал этого, так что следите за новостями.

5 лайков