Миша Вербицкий,
Wed, 25 Jul 2007

Проект реформы яндекс-рейтинга

ЗАДАЧА

1. Задача. Топ забит политизированными уродами, освоившими технику накрутки топа. Недавно это были поклонники Тесака, сейчас это поклонники Тупикина. Но в принципе - кто угодно может. Надо добиться, чтоб топом нельзя было манипулировать.

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

АЛГОРИТМ МОДЕРАЦИИ

3. Рассмотрим граф G, состоящий из всех юзеров, ссылавшихся на топ. Два юзера соединены ребром, если они ссылались на одну и ту же запись.

Граф этот не очень большой (тысяч двадцать вершин, тысяч двести ребер) и математические операции с ним много не потребуют.

Клака есть кластер в этом графе. Пусть у нас задано какое-то количество кластеров (к примеру: нашисты, ДПНИ, Ф18, антифа, КБ, крокодилы). Это группы авторитетных пользователей, усвоивших технику накрутки, и целеустремленно ею пользующихся для своих групповых нужд. Кластеров будет штук 10-20, я думаю. Как определять кластеры, я напишу чуть ниже.

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

Каждому кластеру K выделим квоту a(K) - процент записей из данного кластера, "безнакруточно" попавших в топ. От балды, более-менее.

При появлении в топе новой записи, усреднением из кластерных профилей сославшихся юзеров составляется кластерный профиль записи. Если коэффициент, соответствующий кластеру K, больше, чем у (100-a(K))% записей, попавших в топ, запись считается спонсируемой этим кластером.

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

НАХОЖДЕНИЕ КЛАСТЕРОВ

4. Как найти кластеры. Делать это придется весьма редко, ибо дальнейшей доводкой занимается алгоритм модерации топа, который я только что описал.

Для нахождения кластеров в графах есть специальная наука. Я на нее не ссылаюсь. Вот вместо этого простой алгоритм, который для топа Яндекса будет наверное адекватен.

Рассмотрим возрастающую функцию v(N) (брать можно любую, но для наших целей хорошо пойдет N^2 - потом можно посмотреть, с какой функцией оно лучше работает).

Длиной ребра от юзера к юзеру назовем 1/v(N), где N есть число записей, на которые эти два юзера сослались совместно. Это задает метрику на графе. Метрический граф, составленный из юзеров (вершин) и ребер (совместно сосланных записей) с метрикой (числом таких записей) есть источник всей работы кластер-анализатора, никаких других данных он не использует.

Я расскажу два метода нахождения кластеров: один из них чисто математический, но требует доводки, другой более априорный.

АЛГОРИТМ 1. Будем считать, что у кластера есть n_1 лидеров, n_2 участников, n_3 сочувствующих, а общее число лидеров равно n_0 (5, 20 и 50 и 100 для ситуации, сложившейся в топе).

Рассмотрим граф как метрическое пространство (с длиной ребра, заданной выше). Для каждой вершины x найдем число a(x), которое есть радиус минимального метрического шара, содержащего n_3 вершин графа. Это число, характеризующее интегрированность юзера в блогосферу и в топ Яндекса в частности (чем меньше, тем лучше он интегрирован).

Потенциальные лидеры клаки есть люди с минимальным a(x). Выберем n_0 из них. Пусть A есть максимальный a(x) для таких юзеров. Если у n_1 (или больше) человек шары с радиусом A в пересечении содержат n_2 вершин, это клака. Таким образом составляется список кластеров. Его придется доводить вручную, убивая дубликаты. Но задача обозримая, ибо речь идет о примерно 100 вершинах графа. Возможно, придется поиграть с коэффициентами n_i.

Фиксируем убывающую положительнозначную функцию V, стремяющуюся к \infty в нуле. V(x)=1/x например.

Кластерный коэффициент юзера положим равным V(z), где z есть сумма расстояний от юзера до всех лидеров кластера. Чем ближе пользователь к лидерам, тем больше его коэффициент.

АЛГОРИТМ 2. (Возможно, имеет смысл сначала запустить алгоритм 1, и посмотреть, с чем мы примерно имеем дело).

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

Теперь, изначальный кластерный коэффициент юзера будет V(z), где z есть сумма расстояний от юзера до всех лидеров клаки, а V определено выше.

Неидеально, но после автоматической доводки из пункта 3 должно работать.

ДОБАВЛЕНИЕ КЛАСТЕРОВ

5. Теперь, предположим, что в блогосфере появился новый кластер. Старые кластеры автоматический доводкой пришли в какой-то гомеостаз, надо привести новый кластер в похожее изначальное состояние и запустить. Сделать это надо так: написать кластерные коэффициенты по всем кластерам, как если бы мы запускали эти кластеры с нуля (пункт 4). Сравнить их с теми, которые у нас образовались после доводки. Анализируя полученную гистограмму, подобрать убывающую функцию V таким образом, чтобы эти коэффициенты для старых кластеров были похожи на те, которые у нас сейчас. Запустить новый кластер, пользуясь функцией V, полученной таким образом.

* * *

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

Топ Яндекса есть модель прямой демократии в миниатюре, и в интересах всех демократически мыслящих товарищей, чтоб она хорошо работала.





Advertisement on IMPERIUM.LENIN.RU:
"...Выступление прервалось из-за массовых беспорядков..."
С ВАМИ БУДЕТ ГОВОРИТЬ НАТО! | Деррида - говно | Тезисы свободного программирования

:ЛЕНИН: