【发布时间】: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
我需要将 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
我应用了一个非线性函数来压缩每个查询。
【讨论】:
如果您想比较两个或多个查询,我找到了一种解决方法。 您可以使用 LevenstheinDistance 或 LuceneLevenstheinDistance(Damerau) 类 将得分最高的文档与查询词进行比较,以获得查询词与结果之间的距离。结果是它们之间的相似性。对要比较的每个查询执行此操作。现在您有了一个工具,可以使用您的 querytherm 的相似性和您的最高结果来比较您的查询。您现在可以选择相似度最高的查询,并将其用于下一步适当的操作。
//Damerau LevenstheinDistance
LuceneLevenshteinDistance d = new LuceneLevenshteinDistance();
similiarity = d.getDistance(queryterm, yourResult );
【讨论】:
常规规范化只会帮助您比较查询(及其检索到的列表)之间的得分分布。 您不能简单地标准化分数来比较查询之间的性能。 考虑一个查询,其中所有检索到的文档都高度相关并且获得相同(高分),并且在另一个查询中检索到的列表包含大麦相关文档(再次,具有相同的分数) - 现在,无论每个查询规范化你做 - 归一化分数将是相同的。
您需要考虑一个可以使所有分数达到同一水平的交叉查询因素。
例如 - 可能计算查询和整个索引之间的相似性,并以某种方式将该分数与文档分数一起使用
【讨论】:
Solr没有最高分,依赖的变量太多,无法预测。
但您可以实施不推荐的称为归一化分数 (Scores As Percentages) 的方法。
查看相关链接了解更多详情:
how do I normalise a solr/lucene score?
Remove results below a certain score threshold in Solr/Lucene?
【讨论】:
没有使用 lucene 标准化分数的良好标准方法。阅读这个:ScoresAsPercentages 和这个explanation
在您的情况下,如果结果按分数排序,则最高分数是第一个结果的分数。但是这个分数对于每个其他查询都会有所不同。
【讨论】:
您可以将所有分数除以最高分数,得到 0 到 1 之间的分数。
但是,请注意,标准化分数只能用于比较单个查询的结果。比较来自 2 个不同查询的结果的分数(标准化与否)是不正确的。
【讨论】: