我在IR工作。
有谁能指导我,如何在Whoosh
中实现语言模型。我已经应用了TD-以色列国防军和BM25.我对IR很陌生。
举个例子,最简单的语言模型只是抛弃了所有的条件上下文,并独立地估计每个术语。这样一个模型被称为一个unigram语言模型:
P_{uni}(t_1t_2t_3t_4) = P(t_1)P(t_2)P(t_3)P(t_4)
有许多更复杂的语言模型,比如bigram语言模型,这些模型都是在前一项条件下,
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)
发布于 2019-03-11 16:36:57
看看Whoosh评分模块,并使用BM25F (第276-332行)作为建立自己的加权和评分模型的参考。你需要创建一个加权模型和一个记分器。假设您想调用您的模型Unigram
,主要步骤是:
Unigram
加权模型类并从scoring.WeightingModelclass Unigram(WeightingModel)
继承
实现基类所需的方法,主要的方法是scorer()
,它返回对Scorer
类(next)的引用。当您创建searcher
并定义搜索器将使用的加权模型时,将调用这个类。UnigramScorer
类并从scoring.WeightLengthScorerclass UnigramScorer(WeightLengthScorer)
继承
实现__init__
和_score
方法。__init__
接受字段名和值,并在调用searcher.search()
时对查询中的每个术语调用一次。结果中的每个匹配文档都需要_score
。它接受一个weight
和length
,并返回给定字段的分数。weighting
参数指定自定义语言模型:
ix.searcher(weighting = Unigram)
https://stackoverflow.com/questions/47944961
复制相似问题