Как устроена формула BM25, что меняют параметры k1 и b, чем она отличается от TF-IDF и как сравнить по ней свою страницу с ТОП-10 Яндекса.
Как устроена формула BM25, что меняют параметры k1 и b, чем она отличается от TF-IDF и как сравнить по ней свою страницу с ТОП-10 Яндекса.
Алгоритм BM25 — вероятностная функция ранжирования, которая оценивает, насколько документ соответствует поисковому запросу. Она лежит в основе полнотекстового поиска в Elasticsearch, Lucene и OpenSearch, а её логику полезно понимать каждому, кто работает с текстами и SEO. Ниже — как устроена формула, что значат параметры k₁ и b, как посчитать балл вручную и где здесь подводные камни.
BM25 (Best Match 25, она же Okapi BM25) — функция оценки релевантности документа запросу. Она основана на вероятностной модели информационного поиска: чем чаще слова запроса встречаются в документе и чем реже они встречаются в коллекции в целом, тем выше балл. Место BM25 в поиске простое — это слой ранжирования, который упорядочивает найденные документы по степени соответствия запросу.
От базовых моделей BM25 отличают две вещи. Первая — насыщение частоты термина: сотое вхождение слова добавляет к оценке почти ничего по сравнению с десятым. Вторая — нормализация длины документа: длинный текст не получает преимущества только за счёт объёма, его частоты делятся на относительную длину. Эти два механизма делают оценку устойчивой к переспаму и «раздутым» текстам.
Классический вид формулы для одного слова запроса:
score = IDF × (tf × (k₁ + 1)) / (tf + k₁ × (1 − b + b × dl / avgdl))
Смысл множителей. IDF задаёт вес слова: редкий термин различает документы сильнее, чем частый. TF-компонент отвечает за вклад повторений, но не линейно — дробь с k₁ в знаменателе приближается к потолку (k₁ + 1) и дальше не растёт. Длина документа стоит в знаменателе: чем документ длиннее средней длины по коллекции, тем сильнее наказаны его частоты. Для запроса из нескольких слов баллы по каждому термину складываются.
k₁ управляет скоростью насыщения частоты термина. Меньшие значения — быстрое насыщение: уже третье-четвёртое вхождение почти не повышает балл. Большие значения растягивают рост, и частота учитывается дольше. Типичный диапазон — примерно от 1,2 до 2,0.
b регулирует силу нормализации по длине. При b = 0 длина документа не учитывается совсем, при b = 1 — полная нормализация относительно средней длины коллекции. Типичное значение — около 0,75: длина важна, но не абсолютна.
| Параметр | Что регулирует | Низкое значение | Высокое значение |
|---|---|---|---|
| k₁ | Скорость насыщения частоты | Быстрое насыщение, повторы почти не помогают | Частота учитывается дольше |
| b | Сила нормализации по длине | 0 — длина игнорируется | 1 — полная нормализация по средней длине |
Значения подбирают под конкретную коллекцию: если тексты в ней сильно различаются по длине, полезно поднять b; если важны точные повторы терминов — увеличить k₁. Универсально «правильных» чисел нет, есть диапазоны, которые чаще работают.
Возьмём запрос из одного слова. Коллекция из трёх документов, средняя длина avgdl = 100 слов, IDF слова примем равным 2. Параметры k₁ = 1,5 и b = 0,75.
Документ A: слово встречается 2 раза, длина 50 слов.
Знаменатель: 2 + 1,5 × (1 − 0,75 + 0,75 × 50/100) = 2 + 1,5 × 0,625 = 2,9375.
Числитель: 2 × 2,5 = 5. Дробь: 5 / 2,9375 ≈ 1,702. Балл: 2 × 1,702 ≈ 3,40.
Документ B: слово встречается 4 раза, длина 200 слов.
Знаменатель: 4 + 1,5 × (0,25 + 0,75 × 2) = 4 + 1,5 × 1,75 = 6,625.
Числитель: 4 × 2,5 = 10. Дробь: 10 / 6,625 ≈ 1,509. Балл: 2 × 1,509 ≈ 3,02.
Документ A выигрывает: вдвое больше вхождений в B не компенсируют вчетверо большую длину. Частота насыщается, а нормализация по длине штрафует «раздутый» текст. Если бы IDF был выше (слово реже в коллекции), оба балла выросли бы пропорционально, но соотношение сохранилось бы.
В базовом TF-IDF вклад частоты линейный: каждое новое вхождение слова повышает вес на одну и ту же величину, насыщения нет. Длину учитывают грубо — делят число вхождений на число слов — или не учитывают совсем. Отсюда практическое следствие: модель чувствительна к переспаму и к текстам, которые набиты ключами для объёма.
BM25 меняет оба механизма: частота растёт нелинейно и упирается в потолок, а длина документа прямо штрафуется в знаменателе. В итоге выигрывает не текст, где ключ повторён больше раз, а текст, где слов запроса достаточно для его длины: механическое нагнетание частоты почти ничего не добавляет. Обе модели опираются на одни и те же данные: частоты терминов и статистику по коллекции.
Практическое применение — полнотекстовый поиск: Elasticsearch, OpenSearch, Lucene, ранжирование в поисковых системах и базах данных. Задача одна: подобрать релевантные документы по текстовому запросу и упорядочить их по баллу.
Ограничения известны: BM25 не учитывает семантику (синонимы, перефразировки) и порядок слов, поэтому в современных системах его используют в гибридных схемах вместе с векторным поиском. Отдельная тема — BM25F, вариант для полей: страница делится на зоны (title, заголовки, текст), частота слова в каждой зоне считается с поправкой на её длину, а затем зоны складываются с весами. Как именно текстовую релевантность учитывают Яндекс и Google, они не раскрывают: BM25 — модель, которая хорошо объясняет текстовую часть ранжирования, а не копия их алгоритмов.
Длина текста и плотность ключевых слов влияют на оценку напрямую, но не так, как кажется интуитивно. Переспам не даёт линейного прироста из-за насыщения частоты: после определённого числа вхождений балл почти не меняется, а качество текста для читателя падает. Длинные тексты тоже не выигрывают автоматически — нормализация по длине срезает преимущество объёма.
Практические выводы простые (подробнее — в статье «Текстовая оптимизация страницы»): естественные вхождения, точное соответствие поисковому намерению, внятная структура страницы и заголовки, которые содержат ключевые термины. Если по тексту страница уже на уровне конкурентов, дальше наращивать ключи бессмысленно — выигрыш дают другие факторы. Проверить, где вы находитесь относительно выдачи, можно инструментом «BM25 против ТОП-10»: он считает балл вашей страницы и сайтов из ТОП-10 Яндекса по одной фразе и показывает разрыв.
Коллекцией для расчёта служит сама выдача: веса слов и средняя длина текста берутся из страниц ТОП-10, и ваша страница оценивается по тем же правилам. Баллы показываются и по зонам — title, H1, description и текст, — поэтому видно, что именно отстаёт. Варианты, которые сильнее по BM25, предложит нейросеть: title по BM25 и абзацы для текста — каждый пересчитывается на той же выдаче. Одна бесплатная проверка доступна без регистрации, дальше — с баланса; цена видна в форме до запуска. Инструмент полезен как быстрый срез: сравнение BM25 с ТОП-10 показывает, мешает ли продвижению сам текст.
Он складывает баллы по словам запроса. Каждое слово даёт тем больше, чем чаще оно в документе и чем реже во всей коллекции, но вклад повторений быстро упирается в потолок, а длинный документ получает штраф относительно средней длины. Документы сортируются по сумме баллов.
BM25 устойчивее к переспаму и к текстам, раздутым для объёма, за счёт насыщения частоты и нормализации длины. Его используют в полнотекстовом поиске по умолчанию — в Elasticsearch, Lucene, OpenSearch. TF-IDF остаётся полезен как простая базовая модель и в задачах, где важна линейность веса.
k₁ задаёт скорость насыщения частоты: меньше значение — быстрее потолок. b задаёт силу нормализации по длине: 0 — длина не учитывается, 1 — полная нормализация относительно средней длины коллекции. Типичные значения — k₁ около 1,2–2,0, b около 0,75.
Учитывает, через отношение длины документа к средней длине коллекции. Чем длиннее текст, тем сильнее делятся его частоты. Для SEO это значит: наращивать объём ради объёма бессмысленно, а плотность ключей выше определённого уровня не даёт прироста.
В поисковых движках для сайтов и баз данных — Elasticsearch, OpenSearch, Lucene — это ранжирование по умолчанию, часто вместе с векторным поиском. Яндекс и Google свои формулы не публикуют, но текстовая релевантность — совпадение слов запроса с title, заголовками и текстом — остаётся у них одним из многих сигналов, рядом с нейросетевыми моделями смысла, поведением пользователей и доверием к сайту.
Тип запроса по выдаче Яндекса: коммерческий, информационный или смешанный
Пожалуйста, не закрывайте страницу