信息检索中的Whoosh语言模型

2024-05-29 05:54:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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: 模型语言ir条件形式tduni术语
1条回答
网友
1楼 · 发布于 2024-05-29 05:54:02

查看一下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()时,将为查询中的每个术语调用一次。 ^为结果中的每个匹配文档调用{}。它接受weightlength并返回给定字段的分数

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

    ix.searcher(weighting = Unigram)

相关问题 更多 >

    热门问题