关于(平均)平均精度的混淆

jus*_*rld 6 information-retrieval mean content-based-retrieval average-precision

这个问题中,我询问了关于精确回忆曲线的说明.

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

然而,现在我对平均精度(AP)值存在很大疑问:AP用于在数值上估计给定特定查询的算法有多好.平均平均精度(MAP)是多个查询的平均精度.

我的疑问是:如果AP根据我们检索的对象数量而变化,那么我们可以将此参数调整为我们的优势,因此我们可以显示最佳AP值.例如,假设pr曲线精确地执行直到10个元素然后可怕,我们可以"欺骗"计算(M)AP值,仅考虑前10个元素.

我知道这听起来很混乱,但我在任何地方都没有找到任何相关信息.

Was*_*mad 6

你说的是部分正确的.如果您在顶级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@N或者AP@N意味着您只关心NIR系统返回的最高文档.例如,我MAP@100我的一项研究工作中使用过.

如果您对AP或MAP感到困惑,可以在此处看到我的简要回答.希望它能帮助你澄清你的困惑.


Rel*_*vić 6

AP是精确调用曲线下的区域,并且精确调用曲线应该在整个返回的排序列表中进行计算。

通过调整返回的排名列表的大小,不可能欺骗AP。AP是精确度-召回曲线下方的区域,其绘制了精确度与召回率的函数关系,其中召回率是相对于基本事实中存在的正向总数的返回正数的数量,而不是相对于地面真理中存在的正向总数的数。返回列表。因此,如果裁剪列表,那么您所做的就是裁剪精度调用曲线,而忽略绘制其尾部。由于AP是曲线下的面积,因此剪裁列表会减小AP,因此无法调整已排序的列表大小-如果返回整个列表,则会获得最大的AP。例如,您可以在其他问题中引用的代码中看到此内容-裁剪列表仅对应于

for ( ; i<ranked_list.size(); ++i) {
Run Code Online (Sandbox Code Playgroud)

更改为

for ( ; i<some_number; ++i) {
Run Code Online (Sandbox Code Playgroud)

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

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

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