【问题标题】:Why does Lucene document order change (score) when I add new documents that are not found当我添加未找到的新文档时,为什么 Lucene 文档顺序会更改(分数)
【发布时间】:2020-06-18 01:54:03
【问题描述】:

我对单元测试数据进行了简单查询,结果按预期顺序返回。查询是

+(ancestors:wood name:wood) +(ancestors:screw name:screw)

数据和分数是:

  • 第一个文档(分数 0.9944593)
    • 名称:木螺钉
    • 祖先:螺丝和紧固件
  • 第二个文档(分数 0.7294933)
    • 名称:木塞
    • 祖先:螺丝和紧固件
    • 祖先:螺旋塞
  • 第三个文档(分数 0.49740157)
    • 名称:木螺钉
    • 祖先:其他产品

如果我对生产数据(约 3000 个文档)进行相同的查询,我仍然会得到“唯一”相同的三个结果。但是文档分数改变了顺序。

  • 第一个文档(分数 3.9986732)
    • 名称:木螺钉
    • 祖先:其他产品
  • 第二个文档(分数 3.9986732)
    • 名称:木螺钉
    • 祖先:螺丝和紧固件
  • 第三份文件(分数 3.7507305)
    • 名称:木塞
    • 祖先:螺丝和紧固件
    • 祖先:螺旋塞

第二个顺序似乎是错误的。直觉上,我希望测试顺序被保留,因为文档 2 和 3 都匹配三个单词,而文档 1 只匹配两个。

前两个文档得分相同的事实也很奇怪。我还测试了 5 种其他相似性方法,它们都对前两个文档给出相同的分数。

我正在使用具有 BM25Similarity 和默认参数的 Lucene 8.5.2。

为什么当找到相同的文档时,Lucene 文档的“相对分数”会从单元测试中改变?我该如何改善这个评分问题?

【问题讨论】:

    标签: lucene


    【解决方案1】:

    这是因为 BM25 评分算法。该评分函数计算如下:

    这个 dormula 的重要部分是 IDF 部分。 IDF 是“逆文档频率”的缩写。 IDF 的计算与您的文档集合相关。因此,如果集合发生变化,为每个术语计算的这个值可能会发生变化。这意味着它可以增加或减少。学费是如果一个术语出现在更多的文档中,它为包含的文档带来更少的价值。例如,术语“是”没有价值。因为它几乎存在于所有文档中。所以我们不能用它作为确定相关文件的判定器。再举一个例子。术语“java”比术语“is”更有价值。因为它在少得多的文档中,我们知道它不在所有文档中。所以它可以用作得分较高的决定因素。因此,现在您知道如果一个术语出现在更多文档中,它对该文档的价值就会降低。 IDF的最简单形式计算如下:

    IDF(term)= Log(N/n)
    

    N 是所有文档的数量,n 是包含至少一个术语“术语”的所有文档的数量(将术语视为“java”)。您可以看到一个术语在文档中出现的次数越多(n 增长),它获得的分数就越低。

    【讨论】:

    • 感谢您抽出宝贵时间回答问题。我的问题并不是分数的变化。更多的是关于为什么相对顺序会发生变化以及为什么 6 种评分方法对文档 1 和 2 产生相同的分数,其中文档 1 匹配 2 个单词,文档 2 匹配 3。直观的结果顺序应该更像 2 3 1。我有用这些事实更新了问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 2011-01-20
    • 2020-05-20
    • 2022-01-02
    相关资源
    最近更新 更多