Алгоритм для рейтинга комментариев, поощряющий хорошие аргументы

e725ac5b15bde9d91f46a2813a290e69

Сайты вроде Хабра, Пикабу, Реддита, и Hacker News имеют древовидные системы комментариев к постам. Зарегистрированные пользователи могут голосовать за комментарии. Сайты используют рейтинги комментариев двумя способами:

  • Управляют вниманием читателей комментариев. «Лучшие» комментарии отображаются сразу под постом, «худшие» — в подвале. Хабр почти не управляет вниманием читателей: он лишь блюрит «плохие» комментарии, но не переупорядочивает их. Впрочем, я (как наверное и многие другие читатели) часто листаю комментарии только цепляясь взглядом за двузначное значение рейтинга.

  • Дают какие-то плюшки авторам «хороших» комментариев. Например, в некоторых сабреддитах нужно иметь определенный рейтинг комментариев в данном сабреддите чтобы опубликовать пост.

Кроме того, рейтинг комментариев, естественно, влияет на их авторов: положительный рейтинг поощряет авторов писать больше таких комментариев, а отрицательный — меньше. Таким образом, рейтинги комментариев еще неявно влияют на дискуссию на сайте.

Как считается рейтинг комментария?

На большинстве сайтов можно проголосовать «за» или «против» комментария. Далее в посте я рассматриваю только этот вариант. На Hacker News можно проголосовать только «за», но не «против». На Медиуме, в каком-то смысле, можно проголосовать «за» комментарий числом от 1 до 50 (также можно проголосовать и за посты; на самом деле, комментарии на Медиуме считаются мини-постами).

На большинстве сайтов рейтинг комментария считается как простая разница между голосами «за» и «против». Я не припомню ни одного сайта, который бы учитывал рейтинг голосующих пользователей. Реддит считает рейтинг комментариев по более хитрой формуле, суть которой в том, что помимо общей разницы голосов «за» и «против» еще учитывается однозначность поддержки: комментарий с 10 голосами «за» и 0 «против» получает рейтинг выше, чем комментарий со 100 голосами «за» и 80 «против».

Любой алгоритм расчета рейтинга комментариев, в конечном счете, отвечает на вопрос: какие комментарии считаются «хорошими» и достойными внимания, а какие — «плохими» и не достойными внимания? Простейшая разница голосов отвечает на этот вопрос «демократически»: чем больше человек согласны с комментарием и чем меньше — не согласны, тем комментарий «лучше» и заслуживает больше внимания. В целом, это же относится и к алгоритму Реддита.

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

В чем проблема?

Оценка комментариев по грубой популярной поддержке приводит к следующим проблемам:

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

Результат: почти во всех сабреддитах, от посвященных технологиям вроде Java или Golang до посвященных политическим партиям, вере в Бога, и глобальному потеплению, царит монокультура. О предмете обсуждения можно или хорошо, или никак. Это же в какой-то степени относится и к Хабру, хотя в меньшей.

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

Дискуссии не развиваются: на сайте в основном циркулирует лишь несколько аргументов по основным позициям. Чтобы получить больше плюсов, авторы стараются зарядить комментарии «главными» аргументами в поддержку своей позиции (часто сдабривая их эмоциями), аргументами которые получили больше всего плюсов в предыдущих обсуждениях. Люди, которые следят за дискуссиями вроде C++ против Rust, либерализм против социализма, «нескептиков» против «скептиков» ковида, могут заранее и с большой точностью предсказать, что именно и даже как будет написано в поддержку той или иной точки зрения. Новички в споре тоже видят только эти избитые аргументы и с большей вероятностью будут повторять их в потом.

Система располагает к разведению ботов чтобы голосовать за определенные точки зрения.

Ниже я предлагаю идею нового алгоритма для расчета рейтинга комментариев. Алгоритм должен затормозить перечисленные выше процессы (хотя едва ли остановить их полностью).

Переубеждающие комментарии

Идея алгоритма очень проста: сайт должен натренировать ML-систему которая будет оценивать, насколько неожиданно что пользователь проголосовал «за» или «против» определенного комментария. Неожиданный голос должен влиять на рейтинг комментария гораздо сильнее, чем ожидаемый голос.

Довольно часто (возможно, в половине случаев или даже больше) неожиданные голоса — простые ошибки, поэтому сайт с такой системой должен обязательно давать переголосовать.

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

Неожиданный голос «против» скорее всего означает грубость.

Если комментарий не содержит явных признаков определенной дискуссионной позиции (таких комментариев большинство), или голосующий почти не голосовал раньше, или голосовал бессистемно, ни голос «за», ни голос «против» нельзя назвать ни неожиданным, ни ожидаемым. Такие голоса стоят в несколько раз меньше, чем неожиданные голоса.

Ожидаемые голоса стоят на порядок или даже два меньше, чем неожиданные.

Как оценить ожидаемость голоса?

Можно прогонять sentiment analysis на всех комментариях на сайте, и смотреть, за какие мнения пользователь раньше голосовал «за» и «против». Потом сравнивать семантический вектор комментария * (1 при голосе «за», -1 при голосе «против») c вектором пользователя. Если вектора почти совпадают, голос считается ожидаемым, если почти противоположны — неожиданным, если почти перпендикулярны — голос не считается ни ожидаемым, ни неожиданным.

Мне кажется, что такую оценку можно сделать даже при текущем доступном качестве sentiment analysis достаточно точной чтобы сделать в целом предложенную систему рейтинга скорее полезной, чем мусорной.

© Habrahabr.ru