语言模式通过信息检索中的嗖嗖声

时间:2017-12-22 17:01:34

标签: python information-retrieval whoosh

我在IR工作。

任何人都可以指导我,我怎样才能在嗖嗖声中实现语言模式。 我已经申请了TD-IDF和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)

1 个答案:

答案 0 :(得分:1)

看看Whoosh's scoring module,并使用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。它需要一个weightlength并返回给定字段的分数。

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

    ix.searcher(weighting = Unigram)