信息检索中 Whoosh 的语言模型

Language Model through Whoosh in Information Retrieval

我在IR工作

谁能指导一下,如何实现Whoosh中的语言模型。 我已经应用了 TD-IDF 和 BM25。我是IR新手。

举个例子,最简单的语言模型形式只是简单地丢弃所有条件上下文,并独立估计每个术语。这样的模型称为unigram语言模型:

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)

查看 Whoosh's scoring module 并使用 BM25F(第 276 至 332 行)作为构建您自己的权重和评分模型的参考。您需要创建一个加权模型和一个记分器。假设你想调用你的模型 Unigram,主要步骤是:

  1. 实现您自己的 Unigram 加权模型 class 并继承自 scoring.WeightingModel:

    class Unigram(WeightingModel)

    实现基础 class 所需的方法,主要方法是 scorer(),其中 returns 对您的 Scorer class 的引用(下一个).此 class 在您创建 searcher 并定义搜索者将使用的加权模型时调用。

  2. 实现 UnigramScorer class 并继承自 scoring.WeightLengthScorer:

    class UnigramScorer(WeightLengthScorer)

    实施__init___score 方法。 __init__ 获取字段名称和值,并在您调用 searcher.search() 时针对查询中的每个术语调用一次。 _score 为结果中的每个匹配文档调用。它需要 weightlength 和 returns 给定字段的分数。

  3. 在搜索时创建搜索器时,使用 weighting 参数指定自定义语言模型:

    ix.searcher(weighting = Unigram)