Поисковая система видит не «важные страницы», а огромный ориентированный
граф. PageRank превращает структуру ссылок в вероятностный эксперимент: где
окажется читатель, если очень долго переходить по ссылкам и иногда начинать
путь заново? Ответ — стационарное распределение цепи, и почти вся инженерия
метода состоит в том, чтобы это распределение существовало, было единственным
и считалось быстро.
Голоса, которые имеют разный вес
Пусть каждая веб-страница является вершиной, а гиперссылка — ориентированным
ребром. Уже здесь возникает отличие от школьного голосования. Страница A, на
которую ссылаются сто никому не известных каталогов, не обязательно важнее
страницы B, на которую ведёт одна ссылка с главной страницы университета.
Голос сам имеет вес, а этот вес ещё только предстоит найти.
Формально мы хотим числа πi≥0, удовлетворяющие рекурсивному условию:
важность страницы складывается из важностей тех, кто на неё ссылается,
поделённых на число их исходящих ссылок,
πj=i→j∑diπi,
где di — исходящая степень вершины i. Определение выглядит порочным
кругом: чтобы узнать πj, надо знать πi. Весь урок — рассказ о том,
почему этот круг не порочен, а разрешим, и что именно превращает его в
корректную задачу о собственном векторе.
Матрица переходов и один шаг читателя
Если из вершины i выходит di ссылок, простейший случайный читатель
выбирает каждую с вероятностью 1/di. Переходы задаёт строко-стохастическая
матрица
Pij={1/di,0,еслиi→j,иначе,j∑Pij=1.
Вектор-строка pt хранит вероятности положения после t кликов, поэтому
pt+1=ptP,pt=p0Pt.
Эта формула связывает тему с цепями Маркова, а способ
многократно умножать вектор на матрицу — со степенным методом для собственных
векторов. Никаких меток «хорошая страница» алгоритм не получает.
Ранг рождается из геометрии графа и правила движения.
Возьмём три страницы: A ссылается на B и C, B — только на C, C —
только на A. Тогда
Рис. 65.1. Один граф — три языка: рёбра, матрица, поток вероятности
Слева — три страницы и направления ссылок. В центре та же система записана
матрицей P: строка «откуда», столбец «куда», сумма каждой строки равна
единице. Справа — первые шаги потока и красными точками предел
π=(0,4;0,2;0,4). Одна и та же модель на трёх языках: рёбра,
числа, вероятность.
Неподвижное распределение
Если после долгого движения распределение перестаёт заметно меняться, его
предел π удовлетворяет
π=πP,πi≥0,i∑πi=1.
Это левый собственный вектор матрицы P для собственного числа 1.
Компонента πi имеет ясный частотный смысл: доля времени, которую длинная
траектория проводит на странице i. В отличие от отдельной прогулки,
стационарное распределение описывает весь поток сразу.
Для нашего примера баланс потоков даёт систему
πA=πC,πB=21πA,πC=21πA+πB,
и после нормировки πA+πB+πC=1 получаем
(πA,πB,πC)=(0,4;0,2;0,4).
Входящая степень у C равна двум, а у A — единице, но один из входов C
несёт только половину потока. Поэтому просто считать ссылки недостаточно —
тезис, к которому мы вернёмся уже на настоящих данных.
Это редкий случай, когда инженерная метафора и математический объект совпадают
буквально: «становится скучно» — это телепортация, «нажимает на ссылки» — это
матрица P, а «доля времени на странице» — это π.
Тупики: куда утекает вероятность
Реальный граф неудобнее учебного. У страницы без исходящих ссылок строка
матрицы состоит из нулей, и суммарная вероятность перестаёт сохраняться.
Возьмём цепочку A→B→C, где у C выходов нет, и стартуем с равномерного
p0=(1/3,1/3,1/3). Суммарная масса ∑ipt,i падает по шагам как
1⟶32⟶31⟶0.
Через три шага «читателей» не остаётся вовсе: они провалились в тупик и
исчезли из модели. Формально P перестала быть стохастической — это
субстохастическая матрица, и единственный её неотрицательный предел нулевой.
Лечение прямое: нулевую строку заменяют на распределение v — равномерное
или заданное. Читатель, попавший в тупик, просто начинает заново. В нашем
реальном графе такая починка понадобится 24 раза — ровно столько там вершин
без исходящих рёбер.
Ловушки: когда ответ перестаёт быть единственным
Вторая неприятность тоньше. Группа страниц может ссылаться только друг на
друга. Попав внутрь такого замкнутого множества, случайный читатель больше не
выйдет: множество поглощающее. Тогда предел зависит от начальной точки, а
несколько стационарных распределений конкурируют между собой.
Возьмём шесть вершин: A→B→C, C→A и C→D, а внутри — цикл
D→E→F→D. Стартуя с равномерного распределения и не применяя никакой
телепортации, после четырёхсот шагов мы получаем
πD+πE+πF=1,000,
то есть весь поток оказался в ловушке, а вершины A,B,C обнулились. Спам-фермы
начала двухтысячных эксплуатировали именно это: достаточно построить плотный
клубок страниц, ссылающихся только внутрь, чтобы накопить в нём весь ранг.
Телепортация чинит обе болезни сразу
PageRank смешивает следование ссылкам со случайным перезапуском:
G=αP+(1−α)1v⊤,0<α<1,
то есть
pt+1=αptP+(1−α)v.
С вероятностью α читатель нажимает ссылку, а с вероятностью 1−α
выбирает новую страницу по вектору интересов v. При положительных
компонентах v из любой вершины можно попасть в любую другую за один прыжок,
и матрица G становится строго положительной.
На графе с ловушкой при α=0,85 ранг перестаёт быть вырожденным: в
ловушке остаётся 0,763 вероятности вместо всей, а вершины снаружи получают
πA=0,0644, πB=0,0798, πC=0,0928; внутри ловушки
πD=0,2689, πE=0,2536, πF=0,2405. Заметьте: перекос не
исчез — он стал конечным. Телепортация не объявляет ловушку несуществующей,
она лишь мешает ей забрать всё.
Слева: вершины D,E,F образуют ловушку, войти в неё можно через C, выйти —
нельзя. Справа серые столбцы — предел без телепортации (α=1): ровно
1,000 массы внутри ловушки и ноль снаружи. Зелёные столбцы — PageRank при
α=0,85: в ловушке остаётся 0,763, остальное возвращается в A,B,C
через случайные прыжки.
Сходимость: почему всё держится на альфе
Пусть p и q — два распределения. Один шаг PageRank не увеличивает
расстояние между ними больше чем в α раз:
Отображение сжимающее с коэффициентом α, значит по теореме о
неподвижной точке решение единственно, а ошибка убывает геометрически:
∥pt−π∥1≤2αt.
Чтобы получить точность ε, достаточно
t≥ln(1/α)ln(2/ε)
итераций. Это и есть весь секрет масштабируемости: число шагов не зависит от
размера графа — только от α и требуемой точности.
На нашем реальном графе счёт до порога ∥pt+1−pt∥1<10−12
занимает 40 итераций при α=0,70, 57 при 0,85 и 75 при
0,95. Практика оказалась лучше теории: у матрицы G второе по модулю
собственное число равно 0,6314, а не 0,85 — граф хорошо перемешан, и
реальная скорость определяется именно этой величиной,
∥pt−π∥∼∣λ2∣t.
Рис. 65.3. Скорость сходимости задаёт альфа: ошибка падает геометрически
Сплошные линии — реальная невязка ∥pt+1−pt∥1 на графе из
383 фильмов, штриховые — теоретическая оценка 2αt. Прямая на
полулогарифмической бумаге означает геометрическое убывание. Порог 10−12
достигается за 40, 57 и 75 итераций; наклон реальных кривых круче
теоретического, потому что ∣λ2∣=0,6314<0,85.
Как это считают на миллиарде страниц
Для миллиарда страниц нельзя хранить плотную матрицу 109×109: это
1018 чисел. Но веб-граф разрежен, каждая страница содержит лишь небольшое
число ссылок. На одной итерации достаточно пройти по списку рёбер и
распределить массу pi между соседями:
qj+=αdipiдлякаждогоребраi→j,q+=(1−α)v.
Цена шага близка к O(∣E∣), память — O(∣V∣+∣E∣). В нашем учебном графе
плотная матрица заняла бы 146689 клеток, а список рёбер — всего 3582
записи: в 41 раз меньше. На веб-масштабе выигрыш становится вопросом
принципиальной возможности счёта, а не удобства; та же логика цены матричных
операций разбиралась в уроке о стоимости умножения матриц.
Живой граф: фильмы вместо страниц
Настоящего снимка веба у нас под рукой нет, зато есть реальные данные о
поведении людей: MovieLens 100K — сто тысяч оценок, поставленных
943 зрителями. Построим из них честный ориентированный граф. Скажем, что
фильм iссылается на фильм j, если из тех, кто поставил i оценку не
ниже четырёх, не менее 60% поставили не ниже четырёх и фильму j:
P(jнравится∣iнравится)≥0,6.
Это условная вероятность, и она несимметрична: из того, что почти все
поклонники нишевого фильма любят блокбастер, не следует обратное. Именно
поэтому получается ориентированный граф, а не сеть похожести. Взяв фильмы,
набравшие хотя бы 45 поклонников, получаем 383 вершины и 3582 ребра:
средняя исходящая степень 9,35, максимальная входящая — 332, и 24
вершины оказались тупиками, у которых ни один другой фильм не собирает
шестидесяти процентов их аудитории.
Ранг против входящей степени
Теперь главный эксперимент урока. Считаем PageRank при α=0,85 и
равномерном v, а рядом — обычный подсчёт входящих ссылок. По всему списку
ранговая корреляция Спирмена (со связными рангами: входящих степеней с
совпадающими значениями много) высока, ρ=0,996: в целом популярное
остаётся популярным. Но интересна вершина списка, и там согласия нет.
Первое место по числу входящих ссылок занимает Star Wars (1977) с 332
входами. Первое место по PageRank занимает Return of the Jedi (1983), у
которого входов почти вдвое меньше — 177, зато
πJedi=0,2381>πStar Wars=0,2169.
Почему? Смотрим на исходящие рёбра. У Star Wars исходящая степень равна
единице: единственный фильм, который любят шестьдесят процентов её поклонников,
— это как раз Return of the Jedi. Значит вся полученная масса
απStar Wars⋅11=0,85⋅0,2169=0,1844
уходит одному адресату. А сам Jedi имеет две исходящие ссылки и делит свой
поток пополам, по 0,5 каждому. Побеждает не тот, у кого больше входов, а
тот, кому достаётся более концентрированный поток от сильных соседей.
Рис. 65.4. Ранг растёт со степенью, но не определяется ею
Каждая точка — фильм. По горизонтали log10(1+diвх), по
вертикали log10πi. Облако вытянуто — связь есть; но подписанные точки
показывают, что порядок на вершине определяется не степенью. Штриховая линия —
равномерный уровень 1/383=0,00261. У Braveheart (1995)58 входящих
ссылок и ранг всего 0,0020: его поклонники расходятся по разным кластерам,
и входящий поток приходит от слабых вершин.
Разброс рангов огромен: от πmin=0,00043 до πmax=0,23809,
отношение 554,4. Список из десяти лучших по степени и десяти лучших по
PageRank совпадает на девяти позициях из десяти — и всё же расходится там, где
решение важнее всего, на первом месте. Именно поэтому спор «зачем считать
собственный вектор, если есть счётчик ссылок» решается не корреляцией по всей
выборке, а поведением верхушки.
Персонализация и её линейность
Вектор v не обязан быть равномерным. Сосредоточим всю телепортацию на 41
фильме с жанровой меткой Sci-Fi:
vi=411{i∈Sci-Fi}.
Первая пятёрка меняет не только числа, но и состав. Return of the Jedi
поднимается с 0,2381 до 0,2613, Star Wars — с 0,2169 до
0,2299. Коэффициент Жаккара между старой и новой первой десяткой равен
0,667: два фильма — Contact (1997) и Back to the Future (1985) —
входят в неё впервые.
Тонкий эффект: выигрывают и фильмы, которых нет среди источников телепортации.
Мультфильм Toy Story (1995), не помеченный как фантастика, прибавляет
16,4% ранга (с 0,0030 до 0,0035) — просто потому, что на него
ведут рёбра из «фантастического» кластера. Поток идёт по рёбрам, а не по
жанровым ярлыкам.
Рис. 65.5. Персонализация двигает не только числа, но и порядок
Для фильмов из верхушки обоих списков показаны два ранга: синий — при равномерной
телепортации, фиолетовый — при телепортации только в фантастику. Длина
отрезка — величина сдвига. Часть фильмов растёт, часть падает; сумма всех
рангов в обоих случаях равна единице, поэтому чей-то выигрыш всегда чей-то
проигрыш.
У персонализации есть замечательное алгебраическое свойство. Отображение
v↦π(v) линейно: решая
π=απP+(1−α)v⟺π=(1−α)v(I−αP)−1,
видим, что π линейно зависит от v. Значит для смеси
v=λv(1)+(1−λ)v(2)
выполняется
π(v)=λπ(v(1))+(1−λ)π(v(2)).
Мы проверили это численно: для λ=1/2 максимальное расхождение между
пересчитанным рангом и полусуммой двух рангов составило 1,0⋅10−13,
то есть чистая ошибка округления. Практическое следствие огромно: можно
заранее посчитать несколько тематических векторов и мгновенно комбинировать их
под конкретного пользователя, не запуская степенной метод заново.
Чувствительность: насколько устойчив рейтинг
Рейтинг, который переворачивается от смены одного параметра, нельзя подавать
как объективную шкалу. Проверим устойчивость первой десятки по α.
Коэффициент Жаккара с эталонной десяткой при α=0,85 равен 1,000
для всех α от 0,60 до 0,95 и падает до 0,818 на краях, при
α=0,50 и α=0,99. Цена итераций при этом растёт монотонно: от
27 шагов при α=0,50 до 85 при α=0,99.
Рис. 65.6. Один параметр управляет и смыслом, и стоимостью
Слева: совпадение первой десятки с эталоном при α=0,85. Внутри
диапазона 0,60–0,95 верхушка не меняется вовсе, у краёв теряет две
позиции. Справа: число итераций до 10−12 растёт от 27 до 85.
Устойчивость и цена тянут α в разные стороны, и выбирать приходится
осознанно.
Такой же анализ полезно проводить по данным, а не только по параметру: удалить
одно ребро у лидера, добавить ссылку от середняка к аутсайдеру, превратить
страницу в тупик — и посмотреть на
Δi=πi(new)−πi(0)
и на перестановки в первой пятёрке. Логика та же, что и в разговоре о
случайных отклонениях выборочных оценок: прежде чем объявлять
разницу содержательной, надо понять, какие возмущения её создают.
Русская линия: Романовский и теория цепей
Язык, на котором записан PageRank, создан задолго до веба. Андрей Андреевич
Марков в начале XX века ввёл цепи зависимых испытаний и в 1913 году пересчитал
чередование гласных и согласных в «Евгении Онегине», доказывая, что закон
больших чисел не требует независимости.
Систематическую же теорию конечных цепей построил Владимир Иванович
Романовский (1879–1954), основатель ташкентской математической школы. Его
монография «Дискретные цепи Маркова» (1949) — первая в мире книга, целиком
посвящённая этому предмету; в ней цепи изучаются именно матричным,
спектральным способом: классификация состояний на существенные и
несущественные, разложение матрицы переходов на эргодические классы, поведение
Pt через характеристические числа. Всё, что нам понадобилось сегодня —
разложимость графа, единственность π, скорость забывания старта через
∣λ2∣, — это словарь Романовского. Разница лишь в том, что он изучал
цепи с десятками состояний, а мы применяем те же теоремы к графам с миллиардом
вершин.
Лаборатория: поток по живому графу
Случайный читатель, ловушка и стационарное распределение
График шире экрана — листайте по горизонтали →
Загружается живая иллюстрация…
Сначала выберите граф «ловушка», установите α=0,99 и запустите
прогулку. Серые столбцы — доля времени, которую читатель провёл в вершине;
красные точки — точный вектор π. Вы увидите, как почти вся масса уходит в
D,E,F. Затем верните α=0,85 и проследите, как частоты сходятся к
новым точкам: это закон больших чисел в действии, только для
зависимых испытаний.
Дальше переключите граф на «тупик» и убедитесь, что вершина без исходящих
рёбер не обнуляет модель — сработала починка строки. Наконец, включите
телепортацию «70% в A» и сравните ранги: персонализация меняет не только
величину, но и порядок. Записывайте число итераций степенного метода: оно
растёт вместе с α ровно так, как предсказывает оценка αt.
Не ограничивайтесь первой строкой рейтинга. Отмечайте расхождение
∑i∣p^i−πi∣ и то, сколько шагов нужно, чтобы оно стало меньше
0,05. Небольшое изменение вероятностей может заметно поменять порядок
почти равных страниц — и это не шум измерения, а свойство самой шкалы.
Чего PageRank не измеряет
Авторы метода сказали это в той же работе, где ввели формулу. PageRank
измеряет не истину и не качество, а положение вершины в потоке — при данном
графе, данном α и данном v. Отсюда три честные оговорки.
Во-первых, граф собирает робот, и он видит не весь веб: закрытые разделы,
динамические страницы и медленные сайты представлены хуже. Во-вторых, ребро не
различает одобрение и осуждение — ссылка в разоблачительной статье поднимает
разоблачаемого. В-третьих, персонализация переносит власть на того, кто выбрал
v: связь с рекомендательными системами прямая, и сужение
разнообразия источников здесь такое же реальное, как в ленте новостей.
Алгоритм HITS Клейнберга, появившийся одновременно с PageRank, разделяет две
роли: собиратель ссылок и источник. Полезно помнить, что «важность» — не одно
число, а семейство определений, и выбор между ними есть проектное решение, а
не открытие закона природы.
Что унести с собой
PageRank — не магическая мера истины, а стационарный поток в выбранном графе.
Тупики съедают вероятность, ловушки разрушают единственность, и обе болезни
лечит одна и та же телепортация, которая заодно превращает задачу в сжимающее
отображение с коэффициентом α. Разреженный степенной метод делает счёт
возможным на миллиардах вершин: цена шага O(∣E∣), число шагов не зависит от
размера графа. Персонализация линейна по v и потому дёшева.
А интерпретация результата требует знать три вещи: как собран граф, что
означает ребро и для кого определена релевантность. Первые две задаёте вы,
третью — тот, кто выбирает v.