【问题标题】:How to normalize Lucene scores?如何标准化 Lucene 分数?
【发布时间】:2011-07-19 17:56:45
【问题描述】:

我需要将 Lucene 分数标准化为 0 到 1 之间。

例如,随机查询返回以下分数...

8.864665
2.792687
2.792687
2.792687
2.792687
0.49009037
0.33730242 
0.33730242 
0.33730242 
0.33730242 

最大的分数是多少? 10.0 ?

谢谢

【问题讨论】:

    标签: lucene normalization


    【解决方案1】:

    我应用了一个非线性函数来压缩每个查询。

    【讨论】:

    • 您能补充更多细节吗?
    • 类似:e^(-0.5/luceneScore)
    【解决方案2】:

    如果您想比较两个或多个查询,我找到了一种解决方法。 您可以使用 LevenstheinDistanceLuceneLevenstheinDistance(Damerau) 类 将得分最高的文档与查询词进行比较,以获得查询词与结果之间的距离。结果是它们之间的相似性。对要比较的每个查询执行此操作。现在您有了一个工具,可以使用您的 querytherm 的相似性和您的最高结果来比较您的查询。您现在可以选择相似度最高的查询,并将其用于下一步适当的操作。

        //Damerau LevenstheinDistance
        LuceneLevenshteinDistance d = new LuceneLevenshteinDistance();
    
        similiarity = d.getDistance(queryterm, yourResult );
    

    【讨论】:

      【解决方案3】:

      常规规范化只会帮助您比较查询(及其检索到的列表)之间的得分分布。 您不能简单地标准化分数来比较查询之间的性能。 考虑一个查询,其中所有检索到的文档都高度相关并且获得相同(高分),并且在另一个查询中检索到的列表包含大麦相关文档(再次,具有相同的分数) - 现在,无论每个查询规范化你做 - 归一化分数将是相同的。

      您需要考虑一个可以使所有分数达到同一水平的交叉查询因素。

      例如 - 可能计算查询和整个索引之间的相似性,并以某种方式将该分数与文档分数一起使用

      【讨论】:

        【解决方案4】:

        Solr没有最高分,依赖的变量太多,无法预测。

        但您可以实施不推荐的称为归一化分数 (Scores As Percentages) 的方法。

        查看相关链接了解更多详情:

        Is it possible to set a Solr Score threshold 'reasonably', independent of results returned? (i.e. Is Solr Scoring standardized in any way)

        how do I normalise a solr/lucene score?

        Remove results below a certain score threshold in Solr/Lucene?

        【讨论】:

          【解决方案5】:

          没有使用 lucene 标准化分数的良好标准方法。阅读这个:ScoresAsPercentages 和这个explanation

          在您的情况下,如果结果按分数排序,则最高分数是第一个结果的分数。但是这个分数对于每个其他查询都会有所不同。

          另见how-do-i-normalise-a-solr-lucene-score

          【讨论】:

          • 我的问题是每个查询结果都有 lucene 分数 + 其他分数(与 Lucene 无关)。其他分数都在 1 和 0 之间进行归一化。如果我不以同样的方式对 Lucene 分数进行归一化,我将得到不平衡的结果...
          • 看看lucene.apache.org/java/2_9_2/api/core/org/apache/lucene/search/…类。您可能必须编写自己的收集器。也许使用您的其他分数或组合。
          【解决方案6】:

          您可以将所有分数除以最高分数,得到 0 到 1 之间的分数。

          但是,请注意,标准化分数只能用于比较单个查询的结果。比较来自 2 个不同查询的结果的分数(标准化与否)是不正确的。

          【讨论】:

          • @nikhil500 真的吗?因此,如果我有一堆查询,我如何才能看到哪些查询表现更好?
          • 请发布更多详细信息,说明您希望如何(以及为什么)比较多个查询的结果。查询之间的分数无法直接比较,但根据您的具体问题,我们可能会提出一些解决方案。
          • @nikhil500 我的问题是,对于每个查询,我必须组合多个分数(来自其他软件),并且除了 Lucene 分数之外,它们都被归一化(介于 0 和 1 之间)。
          • 您想根据来自其他来源的分数对来自 Lucene 的结果重新排序,还是想将来自其他来源的结果与 Lucene 结果合并?如果您想重新排序,那么只需将 Lucene 分数乘以外部分数即可。但是,如果您想将来自外部源的结果与 Lucene 结果合并,那么它会变得更加复杂 - 您需要以某种方式找出“标准化因子”,因为假设 Lucene 结果集中的顶部文档是不正确的总是在 0 到 1 的范围内得分为 1。
          • @nikhil500 第二个。我的问题是如何做到这一点,确实如此。我应该考虑得分最高的查询并将该得分用于规范化吗?我需要一些帮助
          猜你喜欢
          • 2011-04-28
          • 2016-08-01
          • 1970-01-01
          • 2011-08-07
          • 2012-01-22
          • 1970-01-01
          • 2021-06-01
          • 2015-05-02
          • 1970-01-01
          相关资源
          最近更新 更多