6

这个问题中,我询问了有关精确召回曲线的说明。

特别是,我问我们是否必须考虑固定数量的排名来绘制曲线,或者我们可以合理地选择自己。根据答案,第二个是正确的。

但是现在我对平均精度 (AP) 值有很大的疑问:AP 用于在数值上估计我们的算法在给定特定查询的情况下有多好。平均平均精度 (MAP) 是多个查询的平均精度。

我的疑问是:如果 AP 根据我们检索到的对象数量而变化,那么我们可以调整此参数以发挥我们的优势,以便我们显示可能的最佳 AP 值。例如,假设 pr 曲线在 10 个元素之前表现出色,然后非常糟糕,我们可以“欺骗”仅考虑前 10 个元素来计算 (M)AP 值。

我知道这听起来可能令人困惑,但我在任何地方都没有找到任何关于此的内容。

4

2 回答 2

6

AP是precision-recall曲线下的面积,并且precision-recall曲线应该是在整个返回的排序列表上计算的。

无法通过调整返回排名列表的大小来欺骗 AP。AP 是精确召回曲线下方的区域,它将精确度绘制为召回率的函数,其中召回率是返回的正数相对于地面实况中存在的正数的总数,而不是相对于真实数据中的正数的数量返回列表。因此,如果您裁剪列表,您所做的就是裁剪精确召回曲线并忽略绘制它的尾部。由于 AP 是曲线下的区域,因此裁剪列表会减少 AP,因此调整排名列表大小是没有智慧的 - 如果返回整个列表,则可以实现最大 AP。例如,您可以从您在其他问题中引用的代码中看到这一点- 裁剪列表仅对应于

for ( ; i<ranked_list.size(); ++i) {

更改为

for ( ; i<some_number; ++i) {

这导致更少的增量ap(所有增量都是非负的,old_precision并且precision是非负的并且recall是非减少的),因此更小的 AP 值。

实际上,出于纯粹的计算原因,您可能希望将列表裁剪为某个合理的数字,例如 10k,因为 AP 不太可能发生太大变化,因为 precision@large_number 可能为 0,除非您有异常大量的正数.

您的困惑可能与某些流行函数的方式有关,例如 VLFeatvl_pr计算精确召回曲线,因为他们假设您已经为他们提供了整个排名列表,因此只需查看即可计算基本事实中的阳性总数排名列表而不是基本事实本身。因此,如果您vl_pr在裁剪列表上天真地使用它,您确实可以欺骗它,但那将是无效的计算。我同意从函数的描述中不是 100% 清楚,但是如果您更详细地检查文档,您会看到它提到NUMNEGATIVESNUMPOSITIVES,所以如果你给出一个不完整的排名列表,你应该设置这两个量,让函数知道如何正确计算精确召回曲线/AP。现在,如果您使用vl_pr但对所有函数调用使用相同的 NUMNEGATIVES 和 NUMPOSITIVES 绘制排序列表的不同作物,您会看到精确召回曲线只是彼此的作物,正如我在上面解释的那样(我没有检查了这个,因为我这里没有 matlab,但我确定是这样,如果不是,我们应该提交一个错误)。

于 2016-12-28T20:40:48.957 回答
5

你说的部分正确。如果您在N检索到的热门文档中获得合理的 MAP 或 AP,则很好。这不是作弊,因为您的 IR 系统在返回的顶部文档中检索了大量相关文档,N但是是的,它仍然缺少一些相关文档。请注意,对于一个 IR 系统来说,如果它不能检索所有相关文档但将所有检索到的相关文档排在更高的级别,那就更好了,这就是 AP 衡量的。(较高的排名意味着排名 1 或 2,而不是 100 或 101)

考虑一个示例,您有两个相关文档,一个在排名 1 处返回,另一个在排名 50 处返回。现在,如果您计算前 10 个返回文档的 MAP 或 AP,那么您必须将答案报告为MAP@10AP@10。通常 AP 表示所有返回文档的平均精度,但如果您考虑顶级N文档,您的指标将AP@N不仅仅是 AP,请注意,它不是作弊!但是是的,如果您AP@N以 AP 的形式计算和报告,那么您就是在向读者提供部分信息。

关于 MAP 的重要事实是 - 如果从未检索到相关文档,我们假设与该相关文档对应的精度为零。在计算 AP 时,我们将累积精度除以相关文档总数。因此,当您在计算时MAP@NAP@N这意味着您只关心NIR 系统返回的最高文档。例如,我MAP@100我的一项研究工作中使用过。

如果您对 AP 或 MAP 有疑问,可以在此处查看我的简短回答。希望它能帮助你澄清你的困惑。

于 2016-12-01T16:39:10.343 回答