Descore

Как работает BM25 в Descore: зональная релевантность документов

BM25 (в отчётах Descore — BM25, PABM, LBM) — это вероятностная метрика соответствия страницы поисковому запросу. В отличие от устаревшего подсчёта плотности, BM25 учитывает закон насыщения частоты: алгоритм оценивает концентрацию терминов без поощрения спама и раскладывает страницу на зоны — Title, H1, подзаголовки, текст, анкоры ссылок и URL. Быстро проверить текст можно в онлайн-инструменте SEO-анализ текста.

Принцип работы: закон насыщения частоты (TF Saturation)

В алгоритмах ранжирования поисковых систем действует закон убывающей отдачи (насыщения частоты):

  • Первые вхождения ключевых слов: задают предметную тему страницы и дают максимальный прирост релевантности.
  • Последующие естественные упоминания: раскрывают детали и поддерживают контекст, но каждое следующее вхождение добавляет всё меньший вес.
  • Механические повторы: дают всё меньший прирост по формуле и делают текст навязчивым для читателя.

Раньше в SEO использовался линейный подсчёт: «тошнота» и процент прямых вхождений. По этой устаревшей логике текст с 20 повторениями фразы считался вдвое релевантнее текста с 10 повторениями. Поисковые алгоритмы закрыли эту уязвимость, так как линейная плотность поощряла текстовый спам.

В адаптированной модели Descore учитывается не только число повторов, но и относительную долю терминов в объёме анализируемой зоны. В коротком Title каждое слово существенно влияет на оценку, а в большом товарном каталоге или объёмной статье допустимое число упоминаний масштабируется пропорционально размеру контента.

Что такое BM25 и почему он вытеснил линейную плотность

BM25 (Best Matching 25) — вероятностная модель ранжирования Окапи, разработанная Стивеном Робертсоном и Карен Спарк-Джонс. Она стала стандартом информационного поиска и применяется в Lucene, Elasticsearch, OpenSearch, а также в поисковых алгоритмах Яндекса и Google.

Математическая основа BM25 — гиперболическая функция насыщения частоты (TF Saturation):

saturation(t)=tf⋅(k1+1)tf+k1\text{saturation}(t) = \frac{\text{tf} \cdot (k_1 + 1)}{\text{tf} + k_1}

Параметр k₁ управляет скоростью выхода на насыщение. При росте частоты оценка плавно приближается к пределу k₁ + 1, а вклад каждого следующего повтора уменьшается.

Особенности расчёта: почему BM25 считается внутри документа

В классической формуле BM25 используются корпусный IDF (редкость слова в выбранном наборе документов) и сравнение длины документа со средней длиной по этому набору.

Descore адаптирует модель для анализа конкурентной выдачи по трём причинам:

  • 1. Частые слова запроса: по коммерческому запросу (например, «купить ортопедический матрас») основные слова встречаются у многих конкурентов. В исходной формуле их IDF может быть низким или отрицательным, что уменьшает вклад этих слов в оценку.
  • 2. Детерминированность оценки: скор вашей страницы должен отражать структуру самого документа, а не меняться из-за того, что сегодня в выдачу случайно попал форум на 50 000 слов или одностраничный сайт. Значение рассчитывается по документу стабильно, а уже затем сопоставляется с показателями конкурентов из ТОП-10.
  • 3. Зональное строение: для поисковика важно, где именно расположено слово — в Title, в главном H1, в подзаголовках, в первом абзаце текста или в анкорах навигации.

Поэтому Descore использует автономную зональную модель BM25 (Per-Zone Document BM25): сервис оценивает насыщение слов в каждой зоне страницы отдельно и масштабирует результат множителем ×100.

Математика Descore: формула насыщения зоны

Для каждой зоны веб-страницы (Title, H1, подзаголовки, текст, ссылки) расчёт выполняется по формуле:

Score=100⋅∑i=1m[wi⋅tfi⋅(k1+1)tfi+k1]\text{Score} = 100 \cdot \sum_{i=1}^{m} \left[ w_i \cdot \frac{\text{tf}_i \cdot (k_1 + 1)}{\text{tf}_i + k_1} \right]
КомпонентФормула в кодеЧто означает на практике

tf (relative_tf)

freq / zone_length

Доля слова в зоне: число вхождений делится на общее число слов зоны. Одно слово в Title из 6 слов весит больше, чем то же слово среди 500 слов статьи.

k₁ = 2.0

(tf * 3.0) / (tf + 2.0)

Параметр насыщения частоты. В Descore используется значение 2.0: прирост оценки уменьшается по мере роста доли слова в зоне.

Вес терма (wᵢ)

1.0 / len(query_terms)

Вес слова в запросе: для одиночного запроса все слова делят вес поровну (сумма = 1). Однословный и длинный запросы оцениваются в единой шкале.

Масштаб × 100

total_score * 100.0

Множитель для удобного отображения результата расчёта.

Анатомия страницы: зональные метрики BM25 в отчётах Descore

Зональные метрики BM25 показывают, насколько слова запроса представлены в разных частях страницы. Ниже — какие данные используются для каждой метрики:

  • Title BM25 (title_bm25_score / TBM) — текст тега <title>.
  • H1 BM25 (h1_bm25_score / H1BM) — текст заголовка H1.
  • Headings BM25 (headings_bm25_score / HBM) — подзаголовки H2 и H3, объединённые в одну текстовую зону.
  • Description BM25 (description_bm25_score / DBM) — содержимое метатега description.
  • Text BM25 (bm25_text_score / BM) — текст HTML body после удаления служебных тегов. В эту зону попадают и меню, и тексты ссылок, и футер.
  • BM25 ссылок (links_bm25_score / LBM) — анкоры текстовых ссылок страницы, включая меню и внутреннюю перелинковку.
  • Корпусный BM25 ссылок (links_corpus_bm25_score / LCBM) — та же зона ссылок в сопоставлении со значимыми словами запросов кластера.
  • URL BM25 (url_bm25_score / UBM) — части адреса страницы; учитываются и варианты транслитерации слов запроса.

PABM: Позиционно-взвешенный BM25 текста страницы

Descore оценивает, где слова запроса встречаются в извлечённом тексте HTML body — ближе к началу или к концу. Положение элементов на экране и их видимость эта метрика не измеряет.

Отдельно от метрики проверьте, удобно ли посетителю ориентироваться на первом экране. Здесь многое зависит от типа страницы и интента:

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

Чтобы оценить распределение слов по длине извлечённого текста, Descore рассчитывает Position-Aware BM25 (PABM):

PABM=100⋅∑i=1m[wi⋅saturationi⋅Pˉi]\text{PABM} = 100 \cdot \sum_{i=1}^{m} \left[ w_i \cdot \text{saturation}_i \cdot \bar{P}_i \right]

Каждое вхождение слова запроса взвешивается по порядковой позиции в тексте:

  • Начало текста (0% длины): коэффициент 1.5 (+50% к весу за раннее появление темы).
  • Середина текста (50% длины): нейтральный коэффициент 1.0.
  • Конец текста (100% длины): коэффициент 0.5 (-50% веса для слов в самом низу).

Если PABM заметно ниже Text BM25, проверьте, не сосредоточены ли слова запроса ближе к концу извлечённого текста. На значение может влиять и порядок служебных блоков в HTML, поэтому по одной метрике нельзя судить о качестве страницы или наличии спама.

Запросный BM25 vs Кластерный BM25 (Cluster-Corpus)

Страница редко ранжируется только по одной фразе. В реальной выдаче она продвигается по целой группе похожих и уточняющих запросов (синонимы, характеристики, модификаторы).

В одиночном запросе слова делят вес поровну (1 / m). Но в целом кластере слов много, а их частотность различается в разы. Для комплексной оценки соответствия всей группе запросов в Descore реализован Cluster-Corpus BM25:

Cluster-BM25=100⋅∑w∈Cluster[W(w)⋅tfw⋅(k1+1)tfw+k1]\text{Cluster-BM25} = 100 \cdot \sum_{w \in \text{Cluster}} \left[ W(w) \cdot \frac{\text{tf}_w \cdot (k_1 + 1)}{\text{tf}_w + k_1} \right]
W(w)=ln⁡(1+Freq(w))∑j=1Kln⁡(1+Freq(wj))W(w) = \frac{\ln(1 + \text{Freq}(w))}{\sum_{j=1}^{K} \ln(1 + \text{Freq}(w_j))}

Алгоритм рассчитывает кластерный BM25 в 4 шага:

  • 1. Отсечение шума: отбираются слова с долей не менее 0.1% от суммарной частоты группы запросов, что отсекает единичные опечатки и мусорные хвосты.
  • 2. Логарифмирование ln(1 + Freq): уменьшает разрыв весов между высокочастотными словами и более редкими характеристиками — моделями, размерами, материалами.
  • 3. Нормировка весов (Σ W = 1.0): сумма весов всех слов приводится к 1.0, поэтому шкала Cluster BM25 находится в том же диапазоне, что и одиночный BM25.
  • 4. Насыщение в зоне: каждое слово оценивается через формулу насыщения relative_tf (k₁ = 2.0), которая уменьшает отдачу от повторения одного слова.

Зональные метрики кластерного анализа:

  • Text Cluster BM25 (cluster_corpus_bm25_score / CCBM): соответствие текста страницы значимым словам из запросов кластера.
  • Title Cluster BM25 (title_corpus_bm25_score / TCBM): вхождение слов из запросов кластера в Title.
  • H1 Cluster BM25 (h1_corpus_bm25_score / H1CBM): вхождение слов из запросов кластера в H1.
  • Headings Cluster BM25 (headings_corpus_bm25_score / HCBM): вхождение слов из запросов кластера в подзаголовки H2/H3.
  • Links Cluster BM25 (links_corpus_bm25_score / LCBM): вхождение слов из запросов кластера в анкоры ссылок страницы.

Как читать отчёт: Z-отклонения BM25

В Descore основной ориентир при анализе BM25 — Z-отклонения по каждой зоне страницы относительно нормы ТОПа. Сравнить свой документ с конкурентами выдачи можно в модуле SEO-анализ SERP.

Отрицательное Z-отклонение показывает отличие в меньшую сторону, положительное — в большую. Значения ближе к нулю характерны для выбранного топа, а сильные отклонения выделяют зоны, требующие внимания. Сопоставьте отклонения Title, H1, подзаголовков, текста и ссылок, чтобы выбрать, где повысить или снизить насыщенность словами запроса.

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

Примеры ниже показывают, как выглядят понятные формулировки и механические повторы. Они не задают универсальных числовых порогов BM25.

ЗонаСлабое совпадение по зонеЕстественная формулировкаИскусственные повторы

Title

«Главная — Официальный сайт в Москве». Главный запрос отсутствует.

«Ортопедические матрасы в Москве: каталог и цены». Чёткий ключ и коммерческие маркеры.

«Матрасы купить матрас матрасы Москва». Прямой спам повторами.

H1

«Каталог продукции». Слишком абстрактно, суть не названа.

«Ортопедические матрасы». Простое и прямое название страницы.

«Купить матрас ортопедический матрас». Искусственная тавтология.

Headings (H2/H3)

Подзаголовки только «О нас», «Преимущества», «Контакты». Нет предметных разделов.

«Пружинные и беспружинные модели», «Как выбрать жесткость». Подзаголовки по сути темы.

Каждый заголовок начинается с ключа: «Матрасы цены...», «Матрасы отзывы...».

Body (PABM)

Ключевые слова почти не встречаются или смещены в самый низ страницы.

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

Ключевые слова механически повторяются в предложениях или блоках футера.

Ссылки (LBM)

В анкорах ссылок отсутствуют тематические запросы и названия категорий.

Информативные анкоры: «двуспальные матрасы», «детские модели».

Сквозные блоки перегружены прямыми коммерческими вхождениями.

Как работать с показателем: практические советы

Начните с Z-отклонений: выберите зону и направление правки. Ниже — способы повысить или снизить BM25 через формулировки, содержание и расположение слов запроса.

1. Если вы хотите повысить BM25 зоны:

  • Title и H1: укажите целевой запрос или его естественную словоформу. Сделайте заголовок конкретнее, убрав слова, которые не помогают понять тему и предложение страницы.
  • Подзаголовки H2/H3: назовите предметные разделы конкретнее — через виды, характеристики или вопросы по теме запроса.
  • Основной текст (Body): добавьте недостающие слова запроса в те фрагменты, где они помогают раскрыть тему: описание, характеристики, условия или ответы на вопросы.
  • Ссылки (LBM и LCBM): добавьте ссылки на подкатегории, сопутствующие товары или статьи с предметными анкорами вместо пустых ссылок без текста.

2. Если вы хотите снизить BM25 зоны:

  • Разгрузите Title и H1: уберите повторные вхождения одного и того же корня (например, вместо «Матрасы купить матрас Москва» оставьте лаконичное «Ортопедические матрасы в Москве: каталог и цены»).
  • Уберите повторы из подзаголовков H2/H3: если каждый заголовок начинается с одного ключа («Матрасы цена...», «Матрасы отзывы...»), замените их на естественные формулировки («Цены и комплектации», «Отзывы покупателей»).
  • Разбавьте основной текст: замените навязчивые механические повторы целевой фразы местоимениями, сопутствующими характеристиками или синонимами.
  • Сократите повторы в навигации (LBM): уберите неестественные прямые коммерческие анкоры из сквозных меню и футера, заменив их на понятные пользовательские названия разделов.

3. Если вы хотите повысить PABM за счёт расположения слов:

  • Перенесите ключевые понятия темы ближе к началу содержательной части страницы. Проверьте порядок текстовых блоков в HTML: в расчёт входят и меню, и футер.
  • В статьях и услугах — поднимите тезис и суть предложения в вводный абзац.
  • В интернет-магазинах — проверьте, как в HTML расположены названия категорий, фильтров и первых карточек. Отдельно оцените, удобно ли покупателю ориентироваться на первом экране, без добавления искусственных текстов.

4. Если вы хотите повысить кластерный BM25:

  • Посмотрите, какие виды, характеристики, модели и условия встречаются в запросах кластера и относятся к вашей странице. Раскройте недостающие подтемы в подходящих разделах.

Чек-лист перед публикацией материала

  • Title и H1 называют тему страницы? Ключевой запрос указан прямо и естественно, без набивки дублями и без абстрактных рекламных слоганов?
  • Проверены ли Z-отклонения по зонам? Сопоставьте их с содержанием Title, H1, подзаголовков, текста и ссылок и выберите, где нужно изменить насыщенность словами запроса.
  • Понятна ли тема в начале страницы? Оцените первый экран глазами посетителя. PABM отдельно покажет расположение слов запроса в извлечённом тексте, но не видимую область экрана.
  • Отражает ли структура реальные запросы темы? Подзаголовки H2/H3 разбивают страницу на предметные разделы вместо пустых дежурных штампов?
  • Раскрыты ли важные подтемы кластера (Cluster BM25)? Проверьте характеристики, виды и уточнения из запросов группы, относящиеся к интенту страницы.

Главное о показателе

BM25 в Descore оценивает текстовую релевантность страницы по структурным зонам: Title, H1, подзаголовкам, тексту, ссылкам и URL.

Z-отклонения показывают, какие зоны отличаются от нормы выдачи. По ним можно выбрать направление правки: повысить или снизить насыщенность словами запроса, изменить их расположение или раскрыть важные подтемы кластера.

Вопросы и ответы

Почему BM25 может снизиться после расширения текста?

В Descore BM25 зависит от доли слов запроса в анализируемой зоне. Если вы добавили большой фрагмент без этих слов, длина текста выросла, а их доля уменьшилась. Поэтому балл может снизиться даже при сохранении прежнего числа вхождений. По Z-отклонению видно, как изменённая зона соотносится с нормой выдачи.

Учитывает ли BM25 словоформы и синонимы?

Словоформы учитываются через лемматизацию: например, «матрас» и «матрасы» приводятся к одной базовой форме. Синонимы автоматически не объединяются в одно слово. В кластерном BM25 они участвуют в расчёте, если входят в значимые слова запросов кластера.

Почему запросный и кластерный BM25 дают разные результаты?

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