Карма, основанная на кластерах
По мотивам статьи Кармическое проклятье Хабра и десятков подобных. Здесь предлагается почелленджить идею, как можно сделать лучше. Есть куча алгоритмов ранжирования контента, среди пользователей Хабра лучшие умы России, предлагаю обсудить этот вопрос и придумать решение. Затравку для обсуждения я дам, а дальше в комментариях доработаем. Погнали!
Очевидно, что пользователи не одинаковы и контент не одинаков. Возьмём простой пример из мира JavaScript: есть сторонники ООП и есть сторонники ФП, эти парадигмы считаются конфликтующими. В среднем сторонники каждой парадигмы лайкают статьи своей школы и дизлайкают статьи противоположной. Подобные холивары происходят не только с ООП и ФП: React vs Angular, Java vs C#, Python vs R, Windows vs Linux vs Mac, и так далее. Это очень распространённое явление. Формируем задачу:
Можно ли сделать такую систему ранжирования, чтобы пользователям показывались статьи их школы, которые они больше лайкают, и не показывались те, которые они дизлайкают?
В идеале должна возникнуть ситуация, когда исходя из оценок и схожести интересов пользователи принадлежат каким-то кластерам. Сторонники ООП имеют свой рейтинг, сторонники ФП — свой. Конечно кластеры должны не создаваться модераторами, а высчитываться динамически, так как с каждой новой технологией, новой идеей будут появляться новые кластеры и со временем исчезать старые. В результате будет два важных следствия:
каждому пользователю показывается интересный ему контент. Адептам парадигм и фреймворков — соответствующие их убеждениям, докторам наук — написанный для докторов наук, школьникам — адаптированный для школьников, исходя из уровня читателя. Мне например во многих статьях не хватает глубины, хочется чтобы показывалось больше вдумчивых статей, но я понимаю, что среднему читателю приятнее читать что-то верхнеуровневое, нужно дать возможность разным людям потреблять контент исходя их своих потребностей.
лайк-дизлайк не разрушает карму, а просто переносит статью в другой кластер. Все м…даки попадут в кластер с такими же, сторонники какой-то редкой технологии будут в первую очередь получать статьи по своей зоне интересов. Даже от ботов и накруток не нужно будет защищаться, просто боты попадут в кластер с ботами и раскрученные ботами статьи будут показываться только таким же ботам.
Как это можно сделать? Вопрос открытый. Я вижу два варианта: кластеризация пользователь-пользователь и кластеризация пользователь-контент.
Первый механизм похож на личную репутацию: я лайкнул какого-то пользователя, значит я считаю его интересным, его контент показывается в приоритетно. Так же можно подумать над показом контента пользователей, которых он лайкнул, к каким-то коэффициентом, или даже пользователей, который его лайкнули, с защитой от лайк-спама. Таким образом естественно и не очень дорого сформируются кластеры по интересам. Кроме того, можно будет даже вывести некоторый персональный рейтинг одного пользователя по отношению к другому, или рейтинг пользователя среди 10% самых близких к нему по духу пользователей Хабра. Преимущество такой системы в том, что сильно усложняются репрессии несогласных с доминирующей концепцией пользователей. Можно писать что угодно и если есть такие-же чокнутые, которым это интересно — ваша карма в безопасности. Существенный плюс такого механизма в масштабируемости. Я докажу, что текущая система кармы не масштабируема: допустим, что сейчас достаточно много статей на Хабре на тему паттернов проектирования, кому-то это более интересно, кому-то менее, но все понимают что это такое и статьи получают свое заслуженное место в рейтинге. Представим, что мы захотели демократизировать Хабр и привлечь людей всех профессий, и врачей, и юристов, и поваров, и шахтёров. Как будет воспринята в такой среде статья про паттерны проектирования? Она получит кучу минусов, потому что она большинству не интересна. Тоже самое происходит с со статьями про узкие нишевые технолигии сейчас, есть ограниченный набор тегов, которые не расширяются, и глобальный список лучшего за день или неделю, куда попадают самые статьи на самые попсовые темы. Если ввести хотя-бы кластеризацию по сходству пользователей — мы увидим совсем другой Хабр.
Второй механизм, во многом классический, кластеризация пользователя и контента. Показ контента, который лайкнули пользователи, похожие на вас. Похожесть определяется сходством профиля лайков. Если одни пользователи лайкают только собачек React, а другие — только кошечек Angular, то мы делим их на кластеры, и когда следующий раз собачник что-то лайкнет — мы скорее покажем это другому собачнику, чем кошатнику. Похожий подход реализован в социальных сетях, в Яндекс Дзен, ранее был Имхонет и другие сервисы. Кажется это не очень сложно реализовать в коде, и за последние годы знания науки об алгоритмах персонификации контента ушли далеко вперёд.
Такой подход не исключает глобальный рейтинг и рейтинг по тегам/хабам. Просто появится ещё один способ, как вылавливать интересное из хаоса. А самое главное — можно будет не бояться говорить не популярные вещи, баниться будет только самое маргинальное, а адекватное, но принадлежащее другой школе, будет просто менять веса рекомендательной машины. Можно полностью отменить запрет на публикации и комментарии пользователей с «отрицательной кармой», но показывать их только схожим пользователям, которые такие публикации и комментарии ценят.
Предлагаю делиться в комментариях идеями по требованиям, а так же ссылками на конкретные алгоритмы и методики, как можно это реализовать. Возможно если мы сможем достаточно проработать реализацию — администрация Хабра прислушается и реализует это. А если нет — план будет отличной базой для создания альтернативного сервиса, просто бери и делай, здесь же все профильные специальности. В общем всё в наших руках, давайте подумаем как сделать Хабр снова интересным
P.S.: Делитесь статьёй с друзьями если считаете, что проблема живая и нужно какое-то решение.