Быстрая реализация BM25 на Python.
BM25 — это простая и быстрая функция ранжирования для поисковых систем, работающая на основе слов (токенов).
Он не очень хорошо справляется с орфографическими ошибками, поэтому используйте его только в тех контекстах, где это не является проблемой.
Базовая реализация BM25 взята из dorianbrown/rank_bm25.
Инициализируйте BM25, передав ему корпус, или итератор для токенизированных документов (список строк).
from fast_bm25 import BM25
# Load your corpus
corpus = ...
bm25 = new BM25 ( corpus )
results = bm25 . get_top_n ([ "largest" , "city" , "in" , "Japan" ], corpus );
Это не пакет Python, скопируйте файл, если хотите его использовать.
В текстовом корпусе наиболее распространенные слова (the, a, an, ...) часто оказываются наименее информативными.
Отключив их от запроса и выполняя поиск только по документам, содержащим хотя бы одно слово запроса, BM25 значительно увеличивает скорость, теряя при этом очень небольшую точность.
Этот компромисс контролируется параметром alpha
: более высокая альфа => большая скорость и большее количество обрезанных слов.
В