BM25提供了一个分配分数的函数,该分数是查询和文档的函数。为集合中的每个文档计算分数,并可用于对文档进行排名,但该分数特定于查询并且没有上限(例如,没有某种“最终”相关性的概念)。
是否有可能(从理论的角度)标准化这个分数,以便在查询中排名分数是可比的?
例如,比较查询 1 的排名最高的文档是否比查询 2 的排名最高的文档更相关。
BM25提供了一个分配分数的函数,该分数是查询和文档的函数。为集合中的每个文档计算分数,并可用于对文档进行排名,但该分数特定于查询并且没有上限(例如,没有某种“最终”相关性的概念)。
是否有可能(从理论的角度)标准化这个分数,以便在查询中排名分数是可比的?
例如,比较查询 1 的排名最高的文档是否比查询 2 的排名最高的文档更相关。
BM25 计算的分数仅可用于将特定查询的搜索结果相互比较。不可能将该分数转换为与查询无关的东西。
但是有一种方法可以做一些在某些情况下可能没问题的事情。您决定这是否适用于您的情况:
通过将每个分数除以所有分数的总和(例如前 10 个结果)来标准化每个分数。查看第一个命中的得分,它现在的意思是:“是否还有很多其他命中也与此查询匹配?”。如果有,这个数字会很低,否则会很高。
原始 BM25 查询示例(来自匿名真实查询):
Query 1:
Result 1, score=0.5998919138986571
Result 2, score=0.5998919138986571
Result 3, score=0.5998919138986571
Result 4, score=0.4995426367770633
Result 5, score=0.4995426367770633
Result 6 score=0.0
Query 2:
Result 1, score=3.9278021306217763
Result 3, score=1.6993264645743775
Result 4, score=1.5989771874527836
Result 5, score=1.5989771874527836
Result 2, score=1.0994345506757204
Result 6, score=0.0
归一化 BM25 分数:
Query 1:
Result 1, score=0.21434195725534308
Result 2, score=0.21434195725534308
Result 3, score=0.21434195725534308
Result 4, score=0.17848706411698534
Result 5, score=0.17848706411698534
Result 6, score=0.0
Query 2:
Result 1, score=0.3957675647605779
Result 3, score=0.17122509593204485
Result 4, score=0.1611138459985838
Result 5, score=0.1611138459985838
Result 2, score=0.11077964731020955
Result 6, score=0.0
正如您可能从第一个查询中看到的那样,它具有“较低的置信度”,因为有许多命中获得了高分。