Языковая модель через Whoosh в поиске информации

Я работаю в ИР.

Может ли кто-нибудь помочь мне, как реализовать языковую модель в Whoosh. Я уже Применял TD-IDF и BM25. Я новичок в ИР.

Например, простейшая форма языковой модели просто отбрасывает весь обусловливающий контекст и оценивает каждый термин независимо. Такая модель называется моделью языка униграмм:

P_{uni}(t_1t_2t_3t_4) = P(t_1)P(t_2)P(t_3)P(t_4)

Существует много более сложных типов языковых моделей, таких как языковые модели биграмм, которые обуславливают предыдущий термин,

P_{bi}(t_1t_2t_3t_4) = P(t_1)P(t_2\vert t_1)P(t_3\vert t_2)P(t_4\vert t_3)

person Abhishek Kaushik    schedule 22.12.2017    source источник


Ответы (1)


Взгляните на модуль оценки Whoosh и используйте BM25F (строки 276–332) в качестве эталона для построения собственных моделей взвешивания и оценки. Вам необходимо создать модель взвешивания и счетчик. Предполагая, что вы хотите назвать свою модель Unigram, основными шагами будут:

  1. Реализуйте свой собственный класс модели взвешивания Unigram и наследуйте от scoring.WeightingModel:

    class Unigram(WeightingModel)

    Реализуйте методы, требуемые базовым классом, основным из которых является scorer(), который возвращает ссылку на ваш класс Scorer (далее). Этот класс вызывается при создании searcher и определяет модель взвешивания, которую будет использовать поисковик.

  2. Реализуйте класс UnigramScorer и наследуйте от scoring.WeightLengthScorer:

    class UnigramScorer(WeightLengthScorer)

    Реализуйте методы __init__ и _score. __init__ принимает имя и значение поля и вызывается один раз для каждого термина в вашем запросе, когда вы вызываете searcher.search(). _score вызывается для каждого совпадающего документа в ваших результатах. Он принимает weight и length и возвращает оценку для данного поля.

  3. Когда вы создаете свой поисковик во время поиска, укажите свою пользовательскую языковую модель, используя параметр weighting:

    ix.searcher(weighting = Unigram)

person Steven    schedule 11.03.2019
comment
Привет, спасибо за ваш ответ. Знаете ли вы какую-либо другую IR-библиотеку Python, которая может реализовать модальный язык? - person Abhishek Kaushik; 12.03.2019
comment
Не навскидку, нет. - person Steven; 12.03.2019