【问题标题】:Language Model through Whoosh in Information Retrieval信息检索中通过嗖嗖声的语言模型
【发布时间】:2018-06-05 07:28:29
【问题描述】:

我在 IR 工作。

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

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

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)

【问题讨论】:

    标签: python information-retrieval whoosh


    【解决方案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。它接受 weight 和 length 并返回给定字段的分数。

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

      ix.searcher(weighting = Unigram)

    【讨论】:

    • 您好,感谢您的回答。你知道任何其他可以实现语言模式的python IR库吗?
    • 不是随便的,不。
    猜你喜欢
    • 2019-03-30
    • 2012-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多