根据相关性对一个文档的多个查询进行排名

Rank multiple queries against one document based on relevance

给定查询列表和 一个 文档,我想根据查询与给定文档的相关程度对查询进行排名。

对于每个查询,我计算了查询中每个词的词频。 (术语频率定义为文档中单词出现的次数除以文档中的单词总数)

现在,我总结了查询中每个词的词频。

例如:

search query: "Hello World"
document: "It is a beautiful world"

tf for 'Hello': 0
tf for 'World': 1/5 = 0.2

total tf for query 'Hello World' = 0 + 0.2 = 0.2

我的问题是,什么是标准化每个查询的词频的最佳方法?这样长查询就不会导致更高的相关性得分。

而且,除了使用 tf 分数之外,有没有更好的方法让我对查询进行评分?

我不能在我的场景中使用 tf-idf,因为我只根据一个文档对它们进行排名。

在回答你的问题之前,我想纠正你对词频的定义。您定义术语频率的方式实际上称为 maximum likelihood.

所以,我对你的第一个问题的解读如下。

What is the best way to normalize final score (summation of maximum likelihood) for each query?

一种简单的方法是将分数除以查询长度,这样更长的查询就不会获得更高的分数。高级技术也用于计算搜索引擎上下文中的相关性得分。

Is there a better way for me to score the query than just using the tf score?

当然可以!此处可以使用一种众所周知且广泛使用的排名方法 Okapi BM25,只需稍作修改。您可以将您的目标任务视为排名问题。

因此,给定一份文档,根据查询与文档的相关性对一组查询进行排名。

这是搜索引擎方面的一个众所周知的问题。我鼓励您学习任何大学的任何信息检索 class 中的一些讲座。比如这个lecture slide讲的是概率排序原理,符合你的需求。

关于您关于无法使用 idf 的评论,“我不能在我的场景中使用 tf-idf,因为我只针对一个文档对它们进行排名。” ,您可以执行以下操作:

请记住,您的排名(可检索)单位是查询。因此,考虑到参考标准术语,文档和查询之间存在角色互换。 换句话说,将您的查询视为伪文档,将您的文档视为伪查询。

然后您可以应用一系列使用收集统计信息(通过查询集计算)的排名模型,例如语言模型、BM25、DFR等