我在IR工作
有谁能指导我,我如何在Whoosh
中实现语言模型。
我已经应用了TD-IDF和BM25。我是新来的
例如,最简单形式的语言模型简单地抛弃了所有条件化上下文,并独立地估计每个术语。这种模型称为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)
Tags:
查看一下Whoosh's scoring module,并使用BM25F(第276到332行)作为构建您自己的权重和评分模型的参考。您需要创建一个权重模型和记分器。假设要调用模型
Unigram
,主要步骤如下:实现您自己的
Unigram
加权模型类并从scoring.WeightingModel
继承:class Unigram(WeightingModel)
实现基类所需的方法,主要方法是
scorer()
,它返回对Scorer
类的引用(下一步)。当您创建searcher
并定义搜索者将使用的权重模型时,将调用此类实现一个
UnigramScorer
类并从scoring.WeightLengthScorer
继承:class UnigramScorer(WeightLengthScorer)
实现}。它接受
__init__
和_score
方法__init__
接受字段名和值,当您调用searcher.search()
时,将为查询中的每个术语调用一次。 ^为结果中的每个匹配文档调用{weight
和length
并返回给定字段的分数在搜索时创建搜索程序时,请使用
weighting
参数指定自定义语言模型:ix.searcher(weighting = Unigram)
相关问题 更多 >
编程相关推荐