Что я называю BM25
BM25 — способ оценить, насколько текст подходит запросу. Имя разбирается просто: Best Match 25, то есть лучшее совпадение. Рядом стоит Okapi: так называлась система, в которой эту оценку доводили. Для меня это способ читать свой текст, а не рычаг в админке.
Запрос один, а страниц много. Мало знать, что слово где-то встретилось. Нужно отличить страницу, которая про эту тему, от страницы, где тему только задели. Поиск решает это среди прочих сигналов. Я беру ту же развилку на своём черновике: есть ли ответ человеку или на странице просто прозвучало нужное слово.
Одно и то же слово на двух моих страницах может значить разное. Где-то страница собрана вокруг него. Где-то оно всплыло по пути, внутри другого разбора. Модель сравнивает документы относительно длины и того, как слово повторено. Выбор, какую страницу оставить, она за меня не делает. Если обе отвечают на один запрос, я оставляю ту, где ответ собран. На вторую ту же фразу пачкой не переношу.
Учебная формула открыта. То, как конкретная поисковая система соединяет текстовое совпадение с остальными сигналами, снаружи закрыто. По открытой формуле я живую выдачу не восстанавливаю. Совпадение с моделью и место среди чужих страниц для меня разные вещи. Место страницы я из этой формулы не вычисляю.
Повтор сначала помогает, потом выдыхается
Первые вхождения работают как имя темы. По ним видно, о чём речь. На длинной странице спокойное повторное упоминание удерживает тему там, где без имени абзац повиснет. Дальше вклад падает. Новое такое же слово говорит уже сказанное. Это и есть насыщение: повтор не растёт бесконечно, следующее вхождение добавляет меньше предыдущего.
Ход я держу такой. Сначала новое упоминание заметно поднимает уверенность, что страница про этот запрос. Потом подъём почти ложится. Страница уже узнана как текст про тему, и ещё одна копия того же слова уверенности почти не добавляет. Ключ, повторённый пачкой, не становится от этого бесконечно полезнее. Он упирается в потолок. Потолок я калькулятором не меряю и синонимами не обхожу.
Норму «сколько раз поставить ключ» я из этого не достаю. Фразу не дописываю в надежде, что оценка ещё растёт. По смыслу модели рост как раз сходит на нет. Абзац, где одна и та же строка стоит ради ещё одного вхождения, я снимаю. Человеку она уже была слышна. Модели она почти ничего не прибавляет.
Редкость слова тоже в этой оценке. Слово, которое стоит почти на каждой странице, хуже отделяет одну от другой, чем слово, которое встречается реже. Частоту и редкость смотрит и TF-IDF. Отдельную статью про него я здесь не открываю. Хватает одной фразы: TF-IDF смотрит частоту и редкость, а BM25 ещё смотрит длину и насыщение повтора.