BM25 (Best Match 25, иногда Okapi BM25) — алгоритм оценки текстовой релевантности документа поисковому запросу. Это эволюция TF-IDF, которая решает две её главные проблемы: учитывает длину документа и вводит насыщение по частоте слова. Используется в Яндексе, Google, Elasticsearch и большинстве полнотекстовых поисковиков с 1994 года. Базовый текстовый сигнал в современном SEO — без прохождения BM25-фильтра страница не попадает даже в пул кандидатов на ранжирование.
BM25 за 30 секунд
Представьте, что вы оцениваете школьное сочинение по теме «Война и мир». TF-IDF просто посчитал бы, сколько раз в сочинении встречается слово «Толстой» — чем чаще, тем выше оценка. BM25 умнее: он сравнивает длину сочинения со средней (если оно неестественно длинное — заподозрит воду) и понимает, что после 10-го упоминания «Толстого» одиннадцатое мало что добавляет. Плюс учитывает редкость каждого слова: упоминание «Бородино» весит больше, чем «и» или «но».
Именно эту логику алгоритм применяет к веб-страницам: проверяет, насколько тематика страницы реально совпадает с запросом, а не как хорошо она «нашпигована» ключами.
Формула BM25
Каноническая формула выглядит страшно, но раскладывается на понятные части:
f(qᵢ, D) × (k₁ + 1)
Score(D, Q) = Σ IDF(qᵢ) × ───────────────────────────────────────
qᵢ∈Q f(qᵢ, D) + k₁ × (1 − b + b × |D|/avgdl)
Что означает каждый компонент:
| Обозначение | Смысл | Пример значения |
|---|---|---|
Score(D, Q) |
Итоговая оценка релевантности документа D запросу Q | 12.4 |
qᵢ |
Каждое отдельное слово запроса | для запроса «купить станок» это «купить», «станок» |
IDF(qᵢ) |
Редкость слова в коллекции (логарифм обратной частоты) | «и» → ~0; «биметаллический» → ~8 |
f(qᵢ, D) |
Частота слова в документе | 5 (слово встречается 5 раз) |
\|D\| |
Длина документа в словах | 1500 |
avgdl |
Средняя длина документа в коллекции | 800 |
k₁ |
Параметр насыщения | 1.2 (Elasticsearch default) |
b |
Параметр нормализации длины | 0.75 (Elasticsearch default) |
Звучит как формула из учебника по информатике — потому что она и есть из учебника. Дальше посмотрим её в действии.
Пример расчёта вручную
Допустим, у нас есть запрос «купить станок» и две страницы-кандидата.
Страница A (1500 слов): «купить» встречается 8 раз, «станок» — 12 раз. Страница B (300 слов): «купить» встречается 4 раза, «станок» — 6 раз.
Параметры коллекции: средняя длина документа avgdl = 800 слов, IDF(купить) = 1.5, IDF(станок) = 3.0. Используем стандартные k₁ = 1.2, b = 0.75.
Расчёт для страницы A:
Считаем нормирующий знаменатель для каждого слова:
norm_A = 1 - 0.75 + 0.75 × (1500/800) = 0.25 + 1.406 = 1.656
Для слова «купить» (f=8):
score_купить = 1.5 × (8 × 2.2) / (8 + 1.2 × 1.656)
= 1.5 × 17.6 / 9.987
= 1.5 × 1.762 = 2.643
Для слова «станок» (f=12):
score_станок = 3.0 × (12 × 2.2) / (12 + 1.2 × 1.656)
= 3.0 × 26.4 / 13.987
= 3.0 × 1.887 = 5.662
Score(A) = 2.643 + 5.662 = 8.305
Расчёт для страницы B:
norm_B = 1 - 0.75 + 0.75 × (300/800) = 0.25 + 0.281 = 0.531
Для «купить» (f=4):
score_купить = 1.5 × (4 × 2.2) / (4 + 1.2 × 0.531)
= 1.5 × 8.8 / 4.638
= 1.5 × 1.898 = 2.847
Для «станок» (f=6):
score_станок = 3.0 × (6 × 2.2) / (6 + 1.2 × 0.531)
= 3.0 × 13.2 / 6.638
= 3.0 × 1.989 = 5.966
Score(B) = 2.847 + 5.966 = 8.813
Что мы видим: Страница B (короткая, 300 слов с 6 вхождениями) обогнала страницу A (длинная, 1500 слов с 12 вхождениями), несмотря на меньшее абсолютное число упоминаний. BM25 «понимает», что для короткого документа концентрация ключа выше. Это и есть нормализация длины.
В TF-IDF страница A победила бы просто за счёт большего числа вхождений — это и было главной уязвимостью старой формулы.
Параметры k₁ и b — как они меняют поведение
k₁ (насыщение по частоте)
| Значение | Поведение | Когда использовать |
|---|---|---|
k₁ = 0 |
Бинарная модель: важно только наличие слова, не количество | Очень короткие документы (заголовки, теги) |
k₁ = 1.2 |
Стандарт Elasticsearch | Универсально для большинства задач |
k₁ = 2.0 |
Стандарт Lucene | Когда частота сильнее коррелирует с релевантностью |
k₁ → ∞ |
Нет насыщения, ведёт себя как TF-IDF | Не используется на практике |
b (нормализация длины)
| Значение | Поведение | Эффект |
|---|---|---|
b = 0 |
Длина документа не учитывается | Длинные тексты получают преимущество |
b = 0.75 |
Сбалансированный стандарт | Используется в Lucene/ES по умолчанию |
b = 1.0 |
Полная нормализация | Сильное наказание для длинных документов |
Для SEO-практика ключевой вывод: в публичных поисковиках значения этих параметров неизвестны. Яндекс и Google не публикуют свои коэффициенты — это коммерческая тайна. Любые сервисы вроде «BM25-оптимизатора», обещающие точно подобрать плотность под BM25, — маркетинг.
История создания
| Год | Событие |
|---|---|
| 1972 | Карен Спарк-Джонс публикует TF-IDF — фундамент текстовой релевантности |
| 1976 | Стивен Робертсон формулирует Probabilistic Retrieval Framework |
| 1994 | Появляется BM25 — Best Match 25-й версии в проекте Okapi (Городской университет Лондона) |
| 1995-99 | BM25 побеждает в TREC (Text Retrieval Conference), становится индустриальным стандартом |
| 2010 | Apache Lucene включает BM25 как опциональный алгоритм |
| 2016 | Elasticsearch делает BM25 алгоритмом по умолчанию вместо классического TF-IDF |
| 2018-2026 | BM25 + нейросети (BERT, YATI) — гибридная схема большинства поисковиков |
Стивен Робертсон, главный автор BM25, в 2008 году получил премию Salton Award от ACM за вклад в информационный поиск — высшую профессиональную награду в области.
Чем BM25 отличается от TF-IDF
| Критерий | TF-IDF | BM25 |
|---|---|---|
| Год | 1972 | 1994 |
| Учёт длины документа | Нет | Да (параметр b) |
| Насыщение по частоте | Нет | Да (параметр k₁) |
| Поведение при многократных вхождениях | Линейный рост вклада | Логарифмическое затухание |
| Чувствительность к спаму | Высокая (легко накрутить) | Низкая (накрутка обнуляется) |
| Используется сегодня | Редко (архивы, простые системы) | Везде (поиск, ES, RAG) |
| Сложность вычисления | Низкая | Средняя |
Принципиально: TF-IDF — арифметика 1-го порядка, BM25 — арифметика с обратной связью. Если бы поисковики застряли на TF-IDF, любая страница с 50 вхождениями ключа автоматически била страницу с 5 вхождениями. BM25 это сломал — и заставил SEO писать не для счётчика плотности, а для пользователя.
Где BM25 используется в 2026 году
Поисковые системы
- Яндекс — BM25-подобная оценка как первичный текстовый сигнал, поверх работает YATI (нейросеть-трансформер). Без BM25-релевантности страница не попадает в пул из ~1000 кандидатов, который потом ранжируется нейросетью.
- Google — BM25 + BERT + MUM. На стадии «pre-ranking» отбираются кандидаты по BM25-подобной формуле, затем нейросети переранжируют ТОП-N. С 2023 г. также векторный поиск через эмбеддинги для определённых типов запросов.
- Bing/DuckDuckGo — BM25 + собственные нейросетевые надстройки.
Open-source поисковые движки
- Apache Lucene — основа для всех нижеперечисленных. BM25 default с версии 6.0 (2016).
- Elasticsearch / OpenSearch — самые распространённые поисковики для веб-сервисов. BM25 default.
- Apache Solr — корпоративный поиск. BM25 default.
- Meilisearch / Typesense — лёгкие поисковые сервисы. BM25 + кастомная логика.
Внутренние поиски крупных сайтов
- Маркетплейсы (Wildberries, Ozon, Amazon) — BM25 как fallback к ML-ранжированию.
- B2B-платформы — поиск по каталогу товаров и документации.
- Wiki-системы (Confluence, Notion) — поиск по знаниям.
RAG-системы и AI
- В retrieval-augmented generation (когда LLM получает релевантные документы как контекст) BM25 часто используют как «грубый фильтр», отбирающий кандидатов перед более дорогим векторным поиском через эмбеддинги. Гибридный поиск «BM25 + векторы» даёт лучшее качество, чем каждый отдельно.
Применение в SEO 2026
Хотя BM25 нельзя «оптимизировать напрямую», понимание его механики меняет подход к работе с текстом:
1. Точное вхождение запроса в Title, H1 и первый абзац даёт самый высокий IDF-вес — в этих зонах текста алгоритм считает каждое слово. Поэтому ключ в заголовке — это не «оптимизация», а необходимость.
2. Плотность ключа 1-3 вхождения на 1000 знаков — оптимум, после которого срабатывает насыщение и каждое следующее вхождение даёт всё меньше. Накручивать выше — бессмысленно (BM25 проигнорирует) и опасно (антиспам сработает).
3. Длина текста ≈ медиане ТОП-10 ±20%. Если ваш документ на запрос значительно длиннее средней страницы в выдаче, BM25 через параметр b начнёт «штрафовать» его за избыток объёма без концентрации. Если значительно короче — недотянет по покрытию семантики.
4. Естественное распределение ключа по тексту, а не «куст» в одном месте. BM25 считает по всему документу, и кластеризованные вхождения ничем не лучше распределённых, но рядом стоящие повторы выглядят неестественно для антиспам-классификатора.
5. Покрытие словоформ и синонимов. Современные поисковики работают не с точной формой слова, а со стеммированной версией (купить = куплю = покупаю). Плюс используют синонимические словари. Поэтому фраза «приобрести оборудование» для алгоритма частично пересекается с запросом «купить станок» — это нужно учитывать при работе с LSI и интентом.
6. Корректная длина URL/заголовков для коротких документов — BM25 «премирует» компактные релевантные ответы. Карточка товара с краткой ёмкой информацией может обогнать длинный обзор за счёт высокой плотности ключа.
7. Текстовый минимум на странице. Если на странице меньше 200 слов уникального текста, BM25 не успевает «разогнаться» — нечего считать. Это типичная проблема карточек товаров без описаний и каталожных страниц без вводного текста.
Мифы и типичные ошибки
Миф 1. «BM25 — устаревший алгоритм, его заменили нейросети»
Не заменили — дополнили. Нейросети работают поверх BM25 как пере-ранжировщик, но первичный отбор кандидатов почти везде идёт через BM25-подобную функцию. Это логично: посчитать BM25 для миллиарда страниц — миллисекунды, прогнать BERT для миллиарда страниц — часы.
Миф 2. «Можно настроить контент под конкретные значения k₁ и b Яндекса»
Нельзя. Точные значения параметров публичные поисковики не раскрывают и регулярно меняют. Сервисы, которые «оптимизируют под BM25», на деле просто измеряют плотность и сравнивают с ТОП-10.
Миф 3. «Чем больше точных вхождений — тем выше BM25»
Нет. Из-за параметра насыщения k₁ после 5-10 вхождений рост практически останавливается. После 15-20 вхождений вы рискуете попасть под антиспам — и потерять не пункты в BM25, а всю позицию вообще.
Миф 4. «BM25 не учитывает синонимы и смысл»
Сам BM25 — нет, это чисто статистическая модель. Но в современных поисковиках перед расчётом BM25 запрос и документ проходят через стеммер, лемматизатор и синонимический словарь. А после BM25 поверх работает нейросеть, которая корректирует оценку по смыслу. Поэтому жалоба «BM25 тупой» — это жалоба на одну ступень из десяти.
Ошибка 1. Подгонять плотность под десятые доли процента. Точная плотность ключа в современном SEO значит мало. Важнее — наличие ключа в правильных зонах, естественное распределение и общая полнота темы.
Ошибка 2. Игнорировать длину документа. Один из главных факторов BM25. Если ТОП-10 в среднем имеет 2500 слов, а ваша страница — 600, никакая «идеальная плотность» это не компенсирует.
Ошибка 3. Писать «под BM25» без интента. Можно идеально набрать BM25-баллы и не попасть в ТОП, потому что интент запроса не совпадает с типом вашей страницы. Текст-определение никогда не побьёт карточку товара по запросу «купить».
Связь с другими понятиями
- TF-IDF — прямой предшественник BM25. Историческая база, на которой выросла формула.
- Релевантность — общая концепция совпадения страницы с запросом. BM25 — один из 12 факторов, формирующих итоговую оценку релевантности.
- Эмбеддинги и нейросетевой поиск — современная альтернатива/дополнение BM25. Гибридный поиск «BM25 + векторы» — текущий best-practice.
- LSI — иногда путают с BM25. На деле это совсем другой класс алгоритмов (семантический, а не статистический), который вообще не используется в продакшене.
- Интент запроса — внешний по отношению к BM25 фактор. Алгоритм может дать высокую оценку тексту, который не отвечает на интент.
Чек-лист: «BM25-здоровая» страница
- Главный запрос есть в Title в точной или близкой словоформе.
- Главный запрос есть в H1, желательно в начале.
- Главный запрос встречается в первых 100 словах текста.
- Плотность ключа в теле текста — 1-3 вхождения на 1000 знаков, не больше.
- Объём текста сопоставим с медианой ТОП-10 по запросу (±20%).
- Подзапросы и словоформы распределены по тексту через H2/H3.
- Естественное расстояние между вхождениями ключа — нет «кустов».
- Минимум 300 слов уникального содержательного текста на странице.
- LSI-окружение — 15-30 тематически связанных слов.
- Нет переспама — текст читаемый, ключи не нагромождены.
Главное за 30 секунд
BM25 — это «умный счётчик слов», работающий с 1994 года. От старого TF-IDF он отличается двумя вещами: учитывает длину документа и насыщается после 5-10 вхождений ключа. Используется во всех современных поисковиках как базовый текстовый сигнал — без BM25-релевантности страница не попадает в пул кандидатов на ранжирование. Прямо «оптимизировать BM25» нельзя, но понимание его механики объясняет, почему «накручивать ключи» не работает с 1995 года, а «писать под пользователя» работает.
Это лишь один из 12 факторов общей релевантности. Чтобы попасть в ТОП-10, нужно пройти по всем — а BM25 даёт только пропуск к стартовой линии.