Обзор модуляЧасть III · ~10 ч · Сложность: (продвинутый) · Пререквизиты: Модуль 1
Документы в вебе не существуют изолированно: они ссылаются друг на друга. Совокупность страниц (вершин) и гиперссылок между ними (направленных рёбер) образует ссылочный граф (link graph) — гигантскую направленную структуру, которую поисковая система строит параллельно с обходом и индексированием. Этот модуль о том, как извлекать из топологии графа сигнал авторитетности: какие документы «важнее» других не по своему тексту, а по тому, как на них ссылается остальной веб.
В сквозном конвейере «обход → индекс → факторы → ранжирование → выдача → постобработка → измерение» ссылочный анализ живёт на стыке двух стадий. Сам граф собирается на этапе обхода и каноникализации (каждое извлечённое рёбро источник → цель нормализуется по канонической форме URL). Вычисление авторитетности — это уже производство запросо-независимых факторов (query-independent features): значение ранга вершины не зависит от конкретного запроса и предрассчитывается оффлайн, чтобы в момент поиска его можно было прочитать за константу. Эти факторы затем подаются в каскад ранжирования (Модуль 12) как один из множества входов модели.
Мы разберём два классических алгоритма — PageRank (запросо-независимый ранг через модель случайного блуждания) и HITS (запросо-зависимое разделение на «хабы» и «авторитеты»), их персонализированные и тематические расширения, инженерию вычисления на больших графах, а затем — отдельную важную тему — обнаружение и нейтрализацию манипуляций ссылочным графом (link spam). Завершим разговором о том, почему классические ссылочные сигналы со временем деградировали и как современная система обращается с ними сегодня.
Как читать по трекамВнимание. Это продвинутый модуль ((продвинутый)). Он опирается на базовые понятия графов, векторов и итеративных численных методов из Модуля 1. Если степенная итерация и собственные векторы для вас новы — вернитесь к нему.
- Студент — обязательны главы 7.1 и 7.2 (математика PageRank и HITS, доказательство сходимости, связь с собственными векторами). Глава 7.3 — обязательна на уровне идей, доказательства спам-устойчивости — опционально. Глава 7.4 — для общего кругозора.
- Инженер — всё обязательно. Особое внимание: инженерные заметки о вычислении на распределённом графе, обработке «тупиков» (dangling nodes), сходимости и инкрементальном пересчёте. Глава 7.3 критична для построения антиспам-сигналов.
- SEO — главы 7.1 и 7.3 (что такое «вес ссылки» на самом деле, как работает обнаружение накрутки), и особенно глава 7.4 (почему покупка ссылок — плохая инвестиция). SEO-врезки разбросаны по всему модулю.
- Смешанный — последовательно весь модуль; формальные доказательства можно бегло просмотреть при первом проходе.
- 7.1. PageRank — случайное блуждание, демпфирование, степенная итерация, сходимость. (продвинутый)
- 7.2. HITS — хабы и авторитеты; тематический и персонализированный ранг. (продвинутый)
- 7.3. Качество ссылок и обнаружение накрутки — link spam, link farms, покупные ссылки, TrustRank-подобные методы. (продвинутый)
- 7.4. Деградация классических ссылочных сигналов — почему «мёртвые» факторы и принудительное обнуление манипулятивных ссылок на уязвимых классах запросов. (средний)
Цели обучения
После главы студент сможет:
- Объяснить интуицию PageRank через модель случайного блуждания «сёрфера» по вебу.
- Записать формулу PageRank в скалярном и матричном виде и вывести роль коэффициента демпфирования (damping factor).
- Связать вектор PageRank со стационарным распределением цепи Маркова и доминантным собственным вектором матрицы переходов.
- Реализовать вычисление PageRank степенной итерацией (power iteration), корректно обработав «тупики» (dangling nodes).
- Обосновать сходимость итерации и оценить число итераций до заданной точности.
От подсчёта ссылок к случайному блужданию
Наивная идея: «важность страницы = число входящих ссылок». Она ломается сразу — тысяча ссылок с мусорных автогенерируемых страниц должна весить меньше, чем одна ссылка с авторитетного ресурса. Нужна рекурсивная мера: страница важна, если на неё ссылаются важные страницы, причём каждая страница делит свою «важность» между теми, на кого ссылается сама.
Формально это стационарное распределение случайного блуждания по графу — цепи Маркова, состояния которой суть страницы.Интуиция. Представьте «случайного сёрфера», который бесконечно бродит по вебу: стоя на странице, он с равной вероятностью переходит по одной из её исходящих ссылок. Доля времени, которую он в среднем проводит на странице, и есть её PageRank. Популярные страницы посещаются часто не потому, что у них «много ссылок», а потому что на них ведут пути из других часто посещаемых мест.
Скалярная формула
Обозначим PR(p) — ранг страницы p, In(p) — множество страниц, ссылающихся на p, а L(q) — число исходящих ссылок страницы q. Базовая (без демпфирования) формула:
Код: Выделить всё
PR(p) = Σ_{q ∈ In(p)} PR(q) / L(q)
Демпфирование: почему нужен коэффициент dПример. Граф из трёх страниц: A → B, A → C, B → C, C → A. У A две исходящие ссылки, поэтому она отдаёт B и C по PR(A)/2. У B одна — она отдаёт весь PR(B) странице C. У C одна — она отдаёт весь PR(C) странице A. Итеративно (начиная с равных рангов) система сходится к распределению, где C — самая авторитетная, потому что на неё указывают и A, и B.
Чистое блуждание ломается на двух патологиях:
- Тупики (dangling nodes) — страницы без исходящих ссылок (PDF, картинки, ещё не обойдённые страницы). Сёрфер попадает в них и «застревает»: ранг утекает из системы.
- Ловушки-петли (rank sinks) — группа страниц, ссылающихся только друг на друга. Они накапливают весь ранг и не отдают его наружу.
Формула с демпфированием:
Код: Выделить всё
PR(p) = (1 − d)/N + d · Σ_{q ∈ In(p)} PR(q) / L(q)
Матричная форма и связь с собственным векторомИнтуиция. Демпфирование d — это «терпение» сёрфера. При d = 0.85 он в среднем проходит примерно 1/(1−d) ≈ 6.7 ссылок подряд, прежде чем перепрыгнуть в случайное место. Чем выше d, тем сильнее ранг следует топологии графа, но тем медленнее сходится итерация и тем чувствительнее результат к спам-структурам.
Введём матрицу переходов H размера N×N, где H[q][p] = 1/L(q), если q → p, иначе 0. Это стохастическая по строкам матрица (сумма строки = 1) для страниц с исходящими ссылками.
Тупики дают нулевые строки. Их «чинят» заменой нулевой строки на равномерный вектор 1/N (как будто из тупика можно перейти куда угодно) — получаем матрицу S. Затем добавляем телепортацию:
Код: Выделить всё
G = d · S + (1 − d) · (1/N) · E
Код: Выделить всё
π = π · G , Σ π_i = 1
Степенная итерацияИнженерная заметка. Матрицу G никогда не материализуют — она плотная (N²), а N исчисляется миллиардами. Вместо этого хранят разрежённую H (списки рёбер) и применяют демпфирование/тупики «на лету» внутри итерации. Память — O(рёбра), а не O(N²).
Доминантный собственный вектор стохастической матрицы находят степенной итерацией:
Код: Выделить всё
π^(0) = равномерный вектор (1/N, ..., 1/N)
повторять:
π^(k+1) = π^(k) · G
пока ||π^(k+1) − π^(k)||₁ > ε
Код: Выделить всё
def pagerank(out_links, N, d=0.85, eps=1e-8, max_iter=100):
pr = [1.0 / N] * N
for _ in range(max_iter):
new = [(1.0 - d) / N] * N # вклад телепортации
dangling_sum = 0.0
for q in range(N):
if not out_links[q]: # тупик
dangling_sum += pr[q]
else:
share = d * pr[q] / len(out_links[q])
for p in out_links[q]:
new[p] += share
# ранг из тупиков размазываем равномерно
for p in range(N):
new[p] += d * dangling_sum / N
diff = sum(abs(new[i] - pr[i]) for i in range(N))
pr = new
if diff < eps:
break
return pr
СходимостьВнимание. Частая ошибка реализации — «потеря массы» из-за тупиков. Если ранг тупиковых вершин не перераспределить, сумма Σ PR перестаёт быть равной 1 и числа «текут к нулю». Строка dangling_sum в коде — именно про это.
Скорость сходимости степенной итерации определяется вторым по модулю собственным значением матрицы G. Для матрицы переходов доказано: |λ₂| ≤ d. Значит, ошибка убывает геометрически со множителем ≈ d за итерацию:
Код: Выделить всё
||π^(k) − π|| ≲ C · d^k
Пример. При d = 0.85 для точности ε = 10⁻⁶ нужно примерно k ≈ log(ε)/log(d) ≈ log(10⁻⁶)/log(0.85) ≈ 85 итераций. При d = 0.95 — уже около 270. Вот цена «доверия топологии».
Частые заблужденияSEO-врезка. «Вес» страницы (её запросо-независимый ранг) — это не счётчик ссылок, а доля от ранга ссылающихся страниц, поделённая на их исходящую степень. Поэтому ссылка со страницы, где 200 исходящих ссылок, передаёт в ~200 раз меньше, чем единственная ссылка с равноценной по рангу страницы. И никакой ранг не «копится» сам по себе — он перетекает. Это базовая модель; реальный современный скоринг ссылок устроен сложнее (см. 7.3 и 7.4), но интуиция «делёж и перетекание» остаётся верной.
Заблуждение. «PageRank — это число ссылок на страницу.» Нет. Это вероятность застать на ней случайного сёрфера. Одна ссылка с авторитетной малосвязной страницы может перевесить тысячу ссылок с «болтливых» страниц с огромной исходящей степенью.
Заблуждение. «Чем больше демпфирование, тем лучше ранжирование.» При d → 1 цепь теряет неприводимость, итерация сходится крайне медленно, а ранг полностью захватывается ловушками-петлями и спам-фермами. d ≈ 0.85 — эмпирический баланс.
Лаба / практикаЗаблуждение. «PageRank — главный фактор ранжирования.» Он лишь один запросо-независимый сигнал среди сотен, и его влияние со временем сильно ослабло (см. 7.4). Релевантность запросу даёт текстовый и поведенческий слой, а не топология графа.
Задача. Реализуйте PageRank степенной итерацией и исследуйте влияние d.
Вход. Граф из 6 страниц (списки рёбер):
A→B, A→C, B→C, C→A, D→C, E→{B,C,D}, F→{} (F — тупик).
Шаги.
- Постройте out_links, обработайте тупик F.
- Реализуйте итерацию (см. псевдокод выше) с d = 0.85, ε = 10⁻⁸.
- Выведите отсортированный ранг и проверьте, что Σ PR ≈ 1.
- Повторите для d ∈ {0.5, 0.85, 0.95}. Постройте таблицу: ранг каждой страницы и число итераций до сходимости.
- Уберите обработку тупика F (намеренно «сломайте») и покажите, как Σ PR уплывает от 1.
Критерий «сделано». Суммарная масса сохраняется (|Σ PR − 1| < 10⁻⁶); порядок страниц совпал с эталоном; объяснено, как d влияет на разброс рангов и скорость сходимости.
Время ~60 мин.
Контрольные вопросы
- Почему без демпфирования стационарное распределение может не существовать или быть неединственным?
- Что физически означает член (1 − d)/N в формуле?
- Как обработка тупиковых вершин связана со свойством стохастичности матрицы?
- Чему равна верхняя граница |λ₂| для матрицы переходов и почему это определяет скорость сходимости?
- Две страницы имеют одинаковое число входящих ссылок, но разный PageRank. Назовите две причины.
- Как изменится число итераций до точности ε, если поднять d с 0.85 до 0.9?
- Почему матрицу G не хранят явно и какова реальная сложность одной итерации по памяти и времени?
- Можно ли по PageRank ранжировать ответ на конкретный запрос напрямую? Почему нет?
Цели обучения
После главы студент сможет:
- Объяснить двойственность «хаб ↔ авторитет» и почему она запросо-зависима.
- Записать взаимно-рекурсивные уравнения HITS и связать их с собственными векторами матриц AᵀA и AAᵀ.
- Реализовать итерацию HITS на подграфе, построенном вокруг запроса.
- Сравнить HITS и PageRank по запросо-зависимости, устойчивости к спаму и стоимости вычисления.
- Описать персонализированный (Personalized PageRank) и тематический (Topic-Sensitive) ранг через смещённый вектор телепортации.
Две роли страницы: хаб и авторитет
PageRank даёт каждой странице одно число, не зависящее от запроса. HITS (Hyperlink-Induced Topic Search) исходит из другой идеи: важность страницы двойственна и определяется относительно темы запроса.
- Авторитет (authority) — страница с ценным контентом по теме (на неё ссылаются многие хорошие обзоры).
- Хаб (hub) — страница-каталог, которая ссылается на многие хорошие авторитеты.
Взаимно-рекурсивные уравненияИнтуиция. Хорошая обзорная статья (хаб) ссылается на лучшие первоисточники (авторитеты). А хороший первоисточник — тот, на который ссылаются лучшие обзоры. Определения переплетены: качество хаба определяется качеством авторитетов, на которые он указывает, и наоборот. Это взаимная рекурсия.
Каждой странице p приписываем два веса: a(p) (авторитет) и h(p) (хаб).
Код: Выделить всё
a(p) = Σ_{q → p} h(q) (авторитет = сумма хабовости ссылающихся)
h(p) = Σ_{p → q} a(q) (хабовость = сумма авторитетности тех, на кого ссылаюсь)
Матричная форма и собственные векторы
Пусть A — матрица смежности подграфа (A[j] = 1, если i → j). Тогда:
Код: Выделить всё
a = Aᵀ h , h = A a
Код: Выделить всё
a = (Aᵀ A) a , h = (A Aᵀ) h
Запросо-зависимость: базовый подграф
Ключевое отличие: HITS работает не на всём вебе, а на базовом множестве (base set), построенном под конкретный запрос:
- Текстовым поиском берут «корневое множество» (root set) — топ-k документов по запросу.
- Расширяют его: добавляют страницы, которые ссылаются на корневые и на которые ссылаются корневые (соседство в графе).
- На этом небольшом подграфе (тысячи вершин) запускают итерацию HITS.
Инженерная заметка. Это и сила, и слабость HITS. Подграф мал — итерация дёшева. Но строить его надо в момент запроса (online), что дорого для нагруженной выдачи, тогда как PageRank считается оффлайн и читается за константу. Поэтому в продакшен-каскадах запросо-независимый ранг типа PageRank используется шире, а HITS-подобные идеи живут как офлайн-факторы или в специализированных подсистемах.
Сравнение HITS и PageRankПример. Запрос «инструменты для сборки проектов». Корневое множество — топ текстового поиска. Хабами окажутся страницы-подборки «10 лучших систем сборки», авторитетами — официальные страницы самих инструментов, на которые эти подборки массово ссылаются. Заметьте: авторитет здесь высок именно по этой теме, а не «вообще».
Код: Выделить всё
Свойство | PageRank | HITS
---------------------------+-------------------------------------+-----------------------------------------------
Зависимость от запроса | нет (запросо-независимый) | да (на подграфе запроса)
Когда считается | оффлайн, заранее | online, в момент запроса
Число величин на страницу | одно (ранг) | два (хаб, авторитет)
Масштаб вычисления | весь веб | малый подграф
Устойчивость к спаму | выше (телепортация, глобальность) | ниже (легко «накрутить» хаб ссылками на цель)
Тупики/петли | требуют демпфирования | нормировка решает
Персонализированный PageRankВнимание. HITS уязвим к topic drift (расплывание темы) и накрутке: достаточно создать страницу-хаб с массой ссылок на нужную цель, чтобы поднять её авторитет на маленьком подграфе. Поэтому чистый HITS почти не используется в открытом вебе без серьёзной защиты.
Вернёмся к телепортации. В классическом PageRank сёрфер прыгает на равномерно случайную страницу — вектор телепортации v = (1/N, ..., 1/N). Заменим его на смещённый вектор v, где масса сосредоточена на множестве «любимых» страниц T:
Код: Выделить всё
π = d · π · S + (1 − d) · v , где v_i > 0 только для i ∈ T
Тематический (Topic-Sensitive) рангИнтуиция. Если T — это страницы, которые любит конкретный пользователь, получаем персонализированную авторитетность: «насколько эта страница близка к вашим интересам в графе ссылок». Если T — одна страница, PPR измеряет её «гравитационное поле» — близость остальных к ней.
Промежуточный вариант между «один глобальный ранг» и «ранг под каждого пользователя»: заранее, оффлайн, считают несколько векторов PageRank — по одному на каждую тему из фиксированного набора (например, по широким тематическим категориям). Вектор телепортации каждого смещён на страницы соответствующей темы.
В момент запроса определяют тематический профиль запроса и смешивают предрассчитанные тематические ранги с весами этого профиля:
Код: Выделить всё
PR_query(p) = Σ_тем w_тема(запрос) · PR_тема(p)
Инженерная заметка. Это лучшее из двух миров: тематическая чувствительность есть, но тяжёлые векторы посчитаны оффлайн (их немного — по числу тем), а online остаётся лишь дешёвое взвешенное смешивание. PPR «под каждого» в чистом виде на весь веб неподъёмен — его аппроксимируют (локальные методы, предрассчитанные опорные множества).
Частые заблужденияSEO-врезка. Тематический ранг означает: ссылка из тематически близкого источника ценнее ссылки «вообще». Сотня ссылок с нерелевантных площадок не заменит десяток с авторитетных ресурсов вашей ниши. «Тематическая близость источника» — то, что нельзя сымитировать массовой закупкой ссылок на случайных сайтах.
Заблуждение. «HITS и PageRank — одно и то же, просто разные формулы.» Нет: PageRank запросо-независим и глобален, HITS запросо-зависим и локален, даёт две величины вместо одной. Это разные парадигмы.
Заблуждение. «Персонализированный PageRank — это другой алгоритм.» Это тот же PageRank, отличается только вектор телепортации v. Вся математика и сходимость сохраняются.
Лаба / практикаЗаблуждение. «Хаб важнее, потому что у него много ссылок.» Хаб важен только если ссылается на хорошие авторитеты. Страница с тысячей ссылок на мусор — плохой хаб с весом, близким к нулю.
Задача. Реализуйте HITS на подграфе и сравните результат с PageRank.
Вход. Двудольный по смыслу граф из 7 страниц: три «каталога» H1, H2, H3, каждый ссылается на подмножество из четырёх «целей» T1..T4; например H1→{T1,T2}, H2→{T1,T2,T3}, H3→{T2,T4}, плюс несколько перекрёстных ссылок между целями.
Шаги.
- Постройте матрицу смежности A.
- Инициализируйте a = h = (1,...,1), итерируйте a = Aᵀh, h = Aa, нормируйте после каждого шага.
- Сойдитесь по ||Δa|| < 10⁻⁸. Выведите топ-авторитеты и топ-хабы.
- Посчитайте PageRank того же графа (лаба 7.1) и сравните порядок авторитетов с порядком PageRank.
- Атака: добавьте фейковый хаб Hx, ссылающийся 20 раз на T4. Покажите, как подскочил авторитет T4 в HITS, и сравните, насколько (не)сильно сдвинулся PageRank.
Критерий «сделано». Сошлись оба вектора; объяснено, почему T2 лидирует; продемонстрирована и прокомментирована разная спам-устойчивость HITS и PageRank.
Время ~70 мин.
Контрольные вопросы
- Сформулируйте словами обе взаимно-рекурсивные формулы HITS.
- Собственными векторами каких матриц являются векторы хабов и авторитетов?
- Зачем после каждой итерации HITS нужна нормировка?
- Почему HITS считают online, а PageRank — оффлайн? Какие из этого следствия для архитектуры?
- В чём состоит атака на HITS через фальшивый хаб и почему PageRank к ней устойчивее?
- Чем Personalized PageRank отличается от обычного на уровне формулы?
- Почему тематический ранг — компромисс, а не «полная персонализация»? Что считается оффлайн, что online?
- Дайте пример запроса, где разделение на хабы и авторитеты особенно осмысленно.
Цели обучения
После главы студент сможет:
- Классифицировать типы манипуляций ссылочным графом: фермы ссылок, обмен, покупка, инъекции в чужой контент.
- Объяснить принцип распространения доверия (TrustRank) и анти-доверия (BadRank/anti-trust) по графу.
- Описать топологические и статистические признаки спам-структур и принцип их обнаружения.
- Оценить методы нейтрализации манипулятивного веса: понижение, обнуление, изоляция подграфа.
- Связать ссылочный антиспам с общим антиспамом (Модуль 16) и со скорингом для коммерческих запросов.
Раз ранг перетекает по ссылкам, появляется экономический стимул производить ссылки искусственно. Ссылочный спам (link spam) — целенаправленная манипуляция топологией графа ради завышения ранга цели. Антиспам ссылочного графа — отдельная инженерная дисциплина на стыке с Модулем 16.
Таксономия манипуляций
Код: Выделить всё
Тип | Суть | Топологический след
-----------------------------------+---------------------------------------------------------------------+---------------------------------------------------------------
Ферма ссылок (link farm) | много страниц/доменов, плотно ссылающихся друг на друга и на цель | плотная клика, аномально высокая взаимность
Обмен ссылками (link exchange) | «ты мне — я тебе» | избыток двунаправленных рёбер
Покупные ссылки (paid links) | размещение за деньги, без редакционного смысла | ссылки из нерелевантных по теме доменов, всплески в динамике
Инъекции (comment/forum/UGC spam) | ссылки в комментариях, профилях, взломанных сайтах | масса ссылок из «шумных» зон, одинаковый анкор
PBN (сеть подставных сайтов) | сеть внешне независимых сайтов под одним владельцем | общие хостинги/регистрации, схожие шаблоны, скрытая связность
Распространение доверия: TrustRankИнтуиция. Честный ссылочный граф растёт «органически»: ссылки появляются по редакционным причинам, распределены по разным независимым источникам, тематически связаны. Спам-структуры выдают себя аномалиями: слишком плотные, слишком взаимные, слишком однородные, слишком быстро растущие, слишком оторванные от темы.
Идея TrustRank-подобных методов — персонализированный PageRank, засеянный доверием. Берут небольшое семя (seed set) заведомо качественных, проверенных вручную страниц и пускают из него ранг по ссылкам — но только «вперёд», по исходящим ссылкам.
Код: Выделить всё
trust = d · trust · S + (1 − d) · v_seed
Распространение анти-доверия: BadRankИнтуиция. Доверие затухает с расстоянием: страница в одном клике от авторитетного семени, скорее всего, хорошая; в десяти кликах через сомнительные хабы — уже под подозрением. Спам-фермы, оторванные от честного ядра веба, получают мало TrustRank — это и есть сигнал.
Зеркальный приём: берут семя заведомо спамных страниц и пускают «анти-доверие» назад, по входящим ссылкам (A вместо Aᵀ). Логика: кто ссылается на известный спам, сам подозрителен.
Топологические и статистические признакиВнимание. Anti-trust опасен побочными эффектами: честная страница может случайно сослаться на ставший спамным ресурс. Поэтому анти-доверие используют как сигнал для модели, а не как приговор: жёсткое «обнуление» применяют только при высокой уверенности или на чувствительных классах запросов (см. 7.4).
Обнаружение спама — задача распознавания аномалий на графе. Типичные признаки:
- Плотность подграфа. Спам-фермы — почти полные клики; у честных кластеров плотность намного ниже.
- Взаимность рёбер. Доля двунаправленных ссылок у обменных схем аномально высока.
- Распределение анкоров. Естественный анкор-текст разнообразен; накрутка под запрос даёт неестественный пик одинаковых коммерческих анкоров.
- Корреляция роста. Резкий синхронный всплеск входящих ссылок («ссылочный взрыв») за короткое время.
- Источники. Кластеризация ссылающихся по хостингу, регистратору, IP-подсети, шаблону — признак PBN.
- Тематическая когерентность. Ссылки из тематически несвязанных доменов — слабый редакционный сигнал.
- Несоответствие профиля. Страница с огромной ссылочной массой, но нулевым органическим трафиком и вовлечённостью.
Способы нейтрализации манипулятивного весаИнженерная заметка. Эти признаки не используют по отдельности — их подают как факторы в обученный классификатор спама (Модуль 16) либо в графовые методы (распространение меток, обнаружение плотных подграфов, спектральная кластеризация). Решение почти всегда вероятностное, а не булево.
- Понижение веса (discounting). Подозрительной ссылке присваивают пониженный коэффициент передачи ранга вплоть до близкого к нулю.
- Обнуление (nullification). Ссылка перестаёт передавать ранг полностью — она «есть в графе, но не голосует». Граф при этом строится честно; обнуление происходит на стадии скоринга, а не удаления рёбер.
- Изоляция подграфа. Обнаруженную ферму выделяют и исключают её внутренние рёбра из расчёта авторитетности.
- Атрибуты ссылок. Разметка ссылок как «непередающих доверие» (rel-атрибуты для UGC/рекламы/спонсорства) — декларативный сигнал, который система учитывает.
Внимание. Принципиальный момент, к которому мы вернёмся в 7.4: ссылочный граф строится честно — каждое рёбро извлекается и хранится. А вот передаёт ли оно ранг — решает скоринг. Манипулятивные ссылки могут принудительно обнуляться при расчёте ранга, особенно агрессивно — для коммерчески уязвимых классов запросов.
Частые заблужденияSEO-врезка. Почему покупка ссылок — плохая инвестиция (часть 1):
- Низкая отдача. Современный скоринг и так понижает или обнуляет ссылки из типичных «продающих ссылки» источников — деньги уходят в обнулённое рёбро.
- Однородный след. Купленные ссылки кластеризуются по площадкам и анкорам и сами создают аномалию, которую ищет классификатор.
- Риск санкции. При высокой уверенности обнуляют не одну ссылку, а доверие ко всему профилю, и положение в выдаче падает.
Подробнее — в SEO-врезке главы 7.4.
Заблуждение. «Если поисковик нашёл спамную ссылку, он удалит её из графа.» Обычно нет: рёбро остаётся в графе (граф строится честно), но его вес при скоринге понижают или обнуляют. Удаление и обнуление веса — разные операции.
Заблуждение. «Любая входящая ссылка повышает ранг.» Ссылка из тематически нерелевантного, низкодоверенного или спамного источника может передавать околонулевой вес или вовсе игнорироваться. Количество ссылок ≠ переданный ранг.
Лаба / практикаЗаблуждение. «TrustRank — это белый список, а всё остальное — спам.» TrustRank — это непрерывная мера затухающего доверия, а не бинарный список. Страница может иметь умеренный TrustRank, не будучи ни в семени, ни в спаме.
Задача. Постройте TrustRank на графе со спам-фермой и измерьте, как он отделяет честное ядро от фермы.
Вход. Граф из ~12 вершин: честное ядро (G1..G6, разреженно и тематически связаны), доверенное семя {G1, G2}, и плотная спам-ферма (S1..S6), почти полная клика, ссылающаяся на цель S1. Добавьте 1 «мостик» — честная страница случайно ссылается на S3.
Шаги.
- Посчитайте обычный PageRank — убедитесь, что плотная ферма накрутила себе заметный ранг.
- Посчитайте TrustRank: персонализированный PageRank с v_seed, сосредоточенным на {G1, G2}.
- Сравните для каждой вершины PageRank и TrustRank; постройте отношение TrustRank / PageRank.
- Покажите, что у фермы это отношение резко ниже, чем у честного ядра — это разделяющий сигнал.
- Примените простой порог по отношению: пометьте ферму как подозрительную. Оцените ложные срабатывания из-за «мостика».
Критерий «сделано». Численно показано разделение ядра и фермы по TrustRank/PageRank; объяснено, почему обнуление лучше делать вероятностно, а не по жёсткому порогу.
Время ~80 мин.
Контрольные вопросы
- Чем ферма ссылок отличается топологически от честного тематического кластера?
- В какую сторону графа распространяется TrustRank и в какую — anti-trust? Почему именно так?
- Назовите четыре статистических признака накрутки и поясните каждый.
- В чём разница между понижением веса, обнулением и удалением рёбра? Что из этого затрагивает сам граф?
- Почему anti-trust опаснее применять как жёсткий приговор, чем как сигнал?
- Как rel-атрибуты ссылок участвуют в скоринге доверия?
- Почему обнаружение спама — вероятностная задача классификации, а не набор булевых правил?
- Приведите механизм, которым «ссылочный взрыв» детектируется как аномалия.
Цели обучения
После главы студент сможет:
- Объяснить, почему многие классические ссылочные факторы со временем стали «мёртвыми» (низковесными или отключёнными).
- Различить построение графа (честное) и скоринг ссылок (избирательный, с обнулением).
- Описать механизм принудительного обнуления манипулятивного веса для уязвимых (коммерческих) классов запросов.
- Связать деградацию ссылочных сигналов с ростом поведенческих (Модуль 11) и нейросетевых (Модуль 10) факторов и общим антиспамом (Модуль 16).
- Сформулировать практический вывод для SEO: почему ссылочные стратегии «в лоб» перестали работать.
Гонка вооружений: как сигнал стирается
Любой публично известный фактор ранжирования вступает в гонку вооружений (adversarial arms race). Как только «ссылка = ранг» стало известно, ссылки начали производить промышленно: фермы, биржи, PBN. Чем активнее сигнал эксплуатируют, тем менее он надёжен — и тем сильнее система вынуждена его дисконтировать.
Главная мысль курса: честный граф, избирательный скорингИнтуиция. Сигнал ценен ровно настолько, насколько его трудно подделать. Ссылка задумывалась как «честный голос редактора». Когда голоса стало можно купить пачками, ценность отдельного голоса для системы упала почти до нуля — не потому что граф сломан, а потому что доверие к этому типу голоса исчерпано.
Здесь важно развести две вещи, которые часто путают:
- Построение графа — честное и полное. Планировщик обхода и каноникализатор извлекают все ссылки, нормализуют их и кладут рёбра в граф. Никто не «прячет» ссылки на этапе построения — это просто структура данных.
- Скоринг ссылок — избирательный. Сколько ранга реально перетекает по рёбру — решает отдельный слой. И вот здесь многие классические ссылочные факторы стали «мёртвыми»: их вес опущен до незначимого либо они исключены из модели как ненадёжные.
Принудительное обнуление на уязвимых классах запросовВнимание. «Мёртвый фактор» не значит «удалённый из графа». Рёбро есть, оно видно в графе, но на скоринге оно не голосует или голосует пренебрежимо мало. Граф честен; голос — обнулён.
Не все запросы одинаково уязвимы к ссылочной накрутке. Коммерческие классы запросов (товары, услуги, финансы, всё «дорогое» и конкурентное) — главная мишень: там за позицию в выдаче платят, и там же концентрируется покупка ссылок.
Поэтому система применяет дифференцированную, классо-зависимую политику скоринга: на коммерчески уязвимых классах запросов манипулятивный ссылочный вес обнуляется агрессивнее — порог подозрительности ниже, дисконт жёстче, доверие к «купленным» паттернам минимально. На малоконкурентных информационных запросах та же ссылка может ещё нести остаточный сигнал.
Интуиция. Это как усиленный досмотр на «горячих» направлениях. Там, где экономический стимул обманывать максимален, система заведомо меньше доверяет легко-подделываемому сигналу и переносит вес ранжирования на сигналы, которые подделать дороже — поведенческие и контентные.
Куда ушёл вес: к более дорогим в подделке сигналамИнженерная заметка. Технически это реализуется классо-зависимыми весами факторов в каскаде (Модуль 12): для коммерческого класса запросов вес ссылочных факторов в модели понижен, а порог антиспам-обнуления (Модуль 16) — ужесточён. Граф и предрассчитанный ранг — одни и те же; различается их использование в скоринге под класс запроса.
Освободившийся «доверительный бюджет» перетёк к сигналам, которые труднее накрутить:
- Поведенческие сигналы (Модуль 11). Клик-модели, удовлетворённость сессией, возвраты в выдачу. Массово подделать поведение реальных пользователей дороже и заметнее, чем закупить ссылки.
- Нейросетевая семантика. Смысловое соответствие документа запросу из эмбеддингов и языковых моделей не зависит от ссылочной топологии вовсе.
- Антиспам-слой (Модуль 16). Обнаружение манипуляций как самостоятельная подсистема, которая прямо гасит накрученный ссылочный вес.
Историческая дуга в одном абзацеЗаблуждение. «Раз ссылки деградировали — они больше не работают вообще.» Не так. Естественные, тематически релевантные, редакционно мотивированные ссылки по-прежнему несут сигнал и помогают обнаружению (краулер находит по ним новые страницы) и доверию (TrustRank). Деградировал именно манипулятивный, легко-подделываемый слой ссылок и попытки «накачать» ранг закупкой.
Сначала ссылки были сильнейшим запросо-независимым сигналом авторитетности. Затем началась их промышленная подделка. В ответ выросли антиспам-методы (7.3), классо-зависимое обнуление и перенос веса на поведенческие/нейросетевые сигналы. Итог: ссылочный граф остаётся ценным для обхода, обнаружения и базового доверия, но как прямой множитель ранга на конкурентных коммерческих запросах он во многом стал «мёртвым».
Частые заблужденияSEO-врезка. Почему покупка ссылок неэффективна и рискованна (итог):
- Обнуление. Купленные ссылки попадают в детектируемые паттерны (однородные источники, коммерческие анкоры, всплески) и обнуляются на скоринге — особенно жёстко на коммерческих запросах, где вы как раз и хотите ранжироваться. Деньги в обнулённое рёбро.
- Санкция на профиль. При высокой уверенности понижается доверие ко всему ссылочному профилю — позиции падают, восстановление долгое.
- Сместившийся вес. Даже идеально «чистая» закупка борется за фактор, чей вес на этих запросах снижен в пользу поведения и семантики. Вы оптимизируете слабеющий рычаг.
- Что работает вместо. Контент, который естественно цитируют (растит TrustRank органически); тематическая релевантность источников; удовлетворённость пользователей (поведенческий слой, Модуль 11). Эти сигналы дороже подделать — поэтому им и доверяют.
Заблуждение. «Мёртвый ссылочный фактор удалён из графа.» Нет: граф строится честно и полно, фактор просто не голосует на скоринге. Построение и скоринг — разные стадии.
Заблуждение. «Обнуление ссылок одинаково для всех запросов.» Нет: политика классо-зависима, на коммерчески уязвимых классах обнуление агрессивнее, чем на информационных.
Лаба / практикаЗаблуждение. «Поведенческие сигналы вытеснили ссылочные, потому что они точнее.» Точнее — отчасти; главное — их дороже подделать. Устойчивость к манипуляции, а не абсолютная точность, определила перенос веса.
Задача. Смоделируйте классо-зависимое обнуление и покажите его эффект на ранжирование.
Вход. Возьмите граф из лабы 7.3 (честное ядро + спам-ферма + цель S1). Заведите два «класса запроса»: INFO (информационный) и COMMERCE (коммерческий) с разными весами ссылочного фактора и порогами обнуления.
Шаги.
- Посчитайте PageRank/TrustRank как в 7.3.
- Реализуйте функцию effective_link_weight(edge, query_class): для INFO дисконт мягкий (порог обнуления высокий), для COMMERCE — жёсткий (подозрительные рёбра обнуляются).
- Пересчитайте итоговый ссылочный фактор цели S1 под оба класса.
- Соберите простой линейный скоринг score = w_link·link + w_behavior·behavior с разными w_link для классов (для COMMERCE ниже).
- Покажите: под COMMERCE накрученная S1 теряет позицию (рёбра обнулены + вес фактора снижен), под INFO сохраняет часть преимущества.
Критерий «сделано». Численно показана разница ранжирования S1 между INFO и COMMERCE; в выводах сформулировано, почему граф при этом остаётся честным, а обнуление происходит на скоринге.
Время ~70 мин.
Контрольные вопросы
- Что означает «мёртвый ссылочный фактор» и чем это отличается от удаления рёбра из графа?
- На каком этапе конвейера происходит обнуление ссылочного веса — построение графа или скоринг? Почему это важно различать?
- Почему коммерческие классы запросов получают более агрессивное обнуление манипулятивных ссылок?
- Сформулируйте принцип «ценность сигнала ∝ стоимость его подделки» на примере ссылок против поведения.
- Какие функции ссылочного графа остались полезными, даже когда прямой ранжирующий вес деградировал?
- Как классо-зависимая политика реализуется в каскаде ранжирования (Модуль 12) и антиспаме (Модуль 16)?
- Почему «идеально чистая» закупка ссылок всё равно проигрышная стратегия на коммерческих запросах?
- Куда перетёк «доверительный бюджет», освободившийся при деградации ссылок, и почему именно туда?
- Ссылочный граф — направленная структура (страницы-вершины, ссылки-рёбра), из топологии которой извлекается сигнал авторитетности, не зависящий от текста документа.
- PageRank моделирует случайного сёрфера с телепортацией; его вектор — стационарное распределение цепи Маркова и доминантный собственный вектор матрицы переходов. Считается оффлайн степенной итерацией; сходимость геометрическая со множителем ≈ d.
- Демпфирование d ≈ 0.85 решает проблему тупиков и ловушек-петель, обеспечивая существование и единственность стационарного распределения; обработка тупиков нужна для сохранения суммарной массы.
- HITS запросо-зависим: на малом подграфе вокруг запроса разделяет страницы на хабы и авторитеты (собственные векторы AAᵀ и AᵀA). Дёшев на подграфе, но считается online и слабее устойчив к спаму.
- Персонализированный и тематический ранг — это PageRank со смещённым вектором телепортации; тематический ранг считают оффлайн по темам и смешивают online под профиль запроса.
- Ссылочный спам (фермы, обмен, покупка, инъекции, PBN) выдаёт себя топологическими и статистическими аномалиями; TrustRank/anti-trust распространяют доверие/анти-доверие по графу; нейтрализация — понижение, обнуление, изоляция.
- Главное различие: граф строится честно, а скоринг ссылок избирателен. Манипулятивный вес обнуляется на стадии скоринга, не на построении графа.
- Деградация классических сигналов: гонка вооружений обесценила легко-подделываемые ссылки; вес перетёк к поведенческим и нейросетевым сигналам; на коммерчески уязвимых классах запросов обнуление манипулятивного веса — самое агрессивное. Покупка ссылок поэтому неэффективна и рискованна.
- Ссылочный граф (link graph) — направленный граф: вершины — страницы, рёбра — гиперссылки.
- PageRank — запросо-независимая мера авторитетности как стационарное распределение случайного блуждания с телепортацией.
- Коэффициент демпфирования (damping factor) d — вероятность продолжить блуждание по ссылке (а не телепортироваться); обычно ≈ 0.85.
- Телепортация (teleportation) — случайный прыжок сёрфера на страницу из вектора телепортации v.
- Тупик (dangling node) — вершина без исходящих рёбер; её ранг перераспределяют, чтобы сохранить массу.
- Ловушка-петля (rank sink) — группа страниц, замкнутых на себя и накапливающих ранг.
- Матрица переходов — стохастическая матрица переходов с демпфированием и телепортацией; её левый доминантный собственный вектор есть PageRank.
- Степенная итерация (power iteration) — метод нахождения доминантного собственного вектора повторным умножением на матрицу.
- HITS — алгоритм, разделяющий страницы на хабы и авторитеты на запросо-зависимом подграфе.
- Хаб (hub) / авторитет (authority) — страница-каталог, ссылающаяся на ценные источники / страница с ценным контентом.
- Базовое множество (base set) — подграф вокруг запроса (корневое множество + соседи), на котором запускают HITS.
- Personalized PageRank (PPR) — PageRank со смещённым к множеству интересов вектором телепортации.
- Тематический ранг (Topic-Sensitive PageRank) — набор предрассчитанных PageRank по темам, смешиваемых под профиль запроса.
- Link spam — манипуляция ссылочным графом ради завышения ранга.
- Ферма ссылок (link farm) — плотный кластер страниц, искусственно ссылающихся друг на друга и на цель.
- PBN — сеть подставных сайтов под одним владельцем, маскирующихся под независимые.
- TrustRank — персонализированный PageRank, засеянный доверенными страницами; распространяет доверие по исходящим ссылкам.
- Anti-trust / BadRank — распространение анти-доверия от спам-семени по входящим ссылкам.
- Обнуление веса ссылки (nullification) — приведение передаваемого рёбром ранга к нулю на стадии скоринга при сохранении рёбра в графе.
- «Мёртвый» фактор — сигнал, оставшийся в данных, но низковесный или отключённый в скоринге из-за неустойчивости к манипуляции.
- Классо-зависимое обнуление — дифференцированная политика скоринга ссылок по классам запросов (агрессивнее на коммерческих).
- Опирается на Модуль 1 — графы, векторы, итеративные численные методы, цепи Маркова.
- Питает Модуль 12 (каскад L0-L3 и serving) — PageRank и производные ссылочные факторы подаются как запросо-независимые входы модели; именно там реализуются классо-зависимые веса.
- Дополняется Модулем 11 (поведенческие сигналы) и Модулем 10 (нейропоиск) — куда перетёк ранжирующий вес после деградации ссылок; устойчивость к подделке как причина переноса.
- Тесно связан с Модулём 16 (антиспам) — обнаружение link spam и принудительное обнуление манипулятивного веса; классификаторы спама потребляют топологические признаки этой главы.
- Использует обход и каноникализацию (стадия графа) — рёбра графа извлекаются и нормализуются на этапе обхода.
- Классические работы по PageRank и анализу веб-графа (модель случайного блуждания, матрица переходов, сходимость степенной итерации).
- Оригинальная постановка HITS и обзоры по спектральным методам ранжирования на графах.
- Работы по персонализированному и тематическому PageRank (смещённая телепортация, локальные аппроксимации).
- Литература по TrustRank и обнаружению ссылочного спама (распространение доверия/анти-доверия, признаки спам-структур, обнаружение плотных подграфов).
- Обзоры по адверсариальному информационному поиску (web spam, гонка вооружений сигналов).
- Учебники по численной линейной алгебре в части собственных векторов и итеративных методов.