Top k精度

Top k precision

我有一个文档数据库,我可以在其中执行搜索。对于每一次搜索,都有 n 个肯定。现在,如果我通过 precision@k 和 recall@k 来评估搜索的性能,那么对于后者来说一切都很好:

recall@k = 真阳性 / 阳性 = 真阳性 / n

真阳性的数量在 [0, n] 范围内,因此 recall@k 在 [0, 1] 范围内 - 完美。 然而,关于 precision@k 的事情变得很奇怪。如果我计算

精度@k = tp / (tp + fp) = tp / k

precision@k 在 [0, n/k] 范围内,这对我来说意义不大。例如考虑边缘情况 n=1。不能增加 tp,因为正数不超过 n 个,也不能减少 k,因为好吧,它叫做 precision@k,不是吗?

我哪里错了?

我正在谈论的示例可以在 [1] 图 8b 中找到。您可以看到前 1..200 个查询结果的精确召回曲线。尽管数据库中只有不到 200 个阳性,但精度相当高。

[1] https://www.computer.org/csdl/pds/api/csdl/proceedings/download-article/19skfc3ZfKo/pdf

由于 precision@k 计算为 #num_relevant/k,它的最大值可能是 1(如果检索列表中的所有 k top-ranked 文档都是相关的)。

你的论点是正确的,因为如果#relevant_docs 小于 k 那么你就会被 P@k 指标错误地惩罚,因为在那种情况下即使有完美的检索你也不会t 在指标上得分 1

因此,一个标准的解决方案是同时考虑和计算精度值,而不是在任意 k 值处,而是在 召回点 处,即在排名列表中的那些位置检索到相关文件。然后,您最终会将总和除以相关文档的数量。此度量称为 平均精度* (MAP)。下面是计算 MAP 的示例。

假设您检索了 10 篇文档,其中 2 与排名 25 相关(并且有 3 相关总共文档 - 其中一个未检索到)。

您在召回点(k = 2 和 5 的值)计算 precision@k。

这给出:

1/2 (at position 2, one is relevant out of 2) +
2/5 (at position 5, one 2 are relevant out of 5)

然后将这个数字除以 3(已知相关文档的总数)。最后一步有利于实现高召回率的系统,而 cut-off 基于点的精度有利于将文档检索到最高排名的系统。

请注意,以更好的排名检索相关文档并检索更多相关文档的系统 A 的得分要高于无法满足其中一种或两种情况的系统。

另请注意,如果您在总共检索到的 10 个文档中检索到排名前 3 的 3 个相关文档(检查此),您将在此指标上获得满分 1,这解决了您的问题引起这个问题的担忧。