信息检索中 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
,主要步骤是:
实现您自己的 Unigram
加权模型 class 并继承自 scoring.WeightingModel
:
class Unigram(WeightingModel)
实现基础 class 所需的方法,主要方法是 scorer()
,其中 returns 对您的 Scorer
class 的引用(下一个).此 class 在您创建 searcher
并定义搜索者将使用的加权模型时调用。
实现 UnigramScorer
class 并继承自 scoring.WeightLengthScorer
:
class UnigramScorer(WeightLengthScorer)
实施__init__
和_score
方法。 __init__
获取字段名称和值,并在您调用 searcher.search()
时针对查询中的每个术语调用一次。
_score
为结果中的每个匹配文档调用。它需要 weight
、length
和 returns 给定字段的分数。
在搜索时创建搜索器时,使用 weighting
参数指定自定义语言模型:
ix.searcher(weighting = Unigram)
我在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
,主要步骤是:
实现您自己的
Unigram
加权模型 class 并继承自scoring.WeightingModel
:class Unigram(WeightingModel)
实现基础 class 所需的方法,主要方法是
scorer()
,其中 returns 对您的Scorer
class 的引用(下一个).此 class 在您创建searcher
并定义搜索者将使用的加权模型时调用。实现
UnigramScorer
class 并继承自scoring.WeightLengthScorer
:class UnigramScorer(WeightLengthScorer)
实施
__init__
和_score
方法。__init__
获取字段名称和值,并在您调用searcher.search()
时针对查询中的每个术语调用一次。_score
为结果中的每个匹配文档调用。它需要weight
、length
和 returns 给定字段的分数。在搜索时创建搜索器时,使用
weighting
参数指定自定义语言模型:ix.searcher(weighting = Unigram)