在this问题中,我询问了关于精确回忆曲线的说明。
特别是,我问我们是否必须考虑固定数量的排名来绘制曲线,或者我们可以合理地选择自己。根据{{3}},第二个是正确的。
然而,现在我对平均精度(AP)值存在很大疑问:AP用于在数值上估计给定特定查询的算法有多好。平均平均精度(MAP)是多个查询的平均精度。
我的疑问是:如果AP根据我们检索的对象数量而变化,那么我们可以将此参数调整为有利,因此我们可以显示最佳AP值。例如,假设p-r曲线执行得非常好,直到10个元素,然后可怕,我们可以"欺骗"仅考虑前10个元素来计算(M)AP值。
我知道这听起来很混乱,但我在任何地方都找不到任何相关内容。
答案 0 :(得分:5)
你说的是部分正确的。如果您在最高N
个检索到的文档中获得合理的MAP或AP,则可以。它没有作弊,因为您的IR系统正在最高N
个返回的文档中检索大量相关文档,但是仍然缺少一些相关文档。 请注意,对于IR系统,如果它无法检索所有相关文档,但将所有检索到的相关文档排在更高级别,以及AP测量的是什么,那就更好了。(更高级别意味着排名1或2而不是100或101)
考虑一个例子,你有两个相关的文件,一个在第1级返回,另一个在第50级返回。现在,如果你计算前10个返回文件的MAP或AP,那么你必须将答案报告为MAP@10
或AP@10
。通常,AP表示所有退回文档的平均精确度,但如果您考虑前N
个文档,则您的指标将为AP@N
而不是仅AP,请注意,它不是作弊!但是,如果您计算AP@N
并报告为AP,则表示您正在向读者提供部分信息。
关于MAP的重要事实是 - 如果永远不会检索到相关文档,我们假设与该相关文档相对应的精度为零。在计算AP时,我们将累计精度除以总相关文档。因此,当您计算MAP@N
或AP@N
时,这意味着您只关心IR系统返回的前N
个文档。例如,我在one of my research works中使用了MAP@100
。
如果您对AP或MAP感到困惑,可以看一下我的简短回答[{3}}。希望它能帮助你澄清你的困惑。
答案 1 :(得分:5)
AP是精确回忆曲线下的区域,精确回忆曲线应该在整个返回的排序列表中计算。
通过调整返回的排名列表的大小,无法欺骗AP。 AP是精确召回曲线下面的区域,它将精确度绘制为召回的函数,其中召回是相对于地面实况中存在的正数总数的返回正数,而不是相对于正数的正数。返回列表。因此,如果裁剪列表,您所做的就是裁剪精确调用曲线并忽略绘制其尾部。由于AP是曲线下的区域,因此裁剪列表会减少AP,因此调整排序列表大小没有任何智慧 - 如果返回整个列表,则会达到最大AP。您可以在the code you cited in your other question中看到这一点 - 裁剪列表只对应于
for ( ; i<ranked_list.size(); ++i) {
更改为
for ( ; i<some_number; ++i) {
导致ap
的增量减少(所有增量均为非负值,old_precision
且precision
为非负数且recall
不减少),因此较小的AP值。
在实践中,出于纯粹的计算原因,您可能希望以合理的数量裁剪列表,例如10k,因为AP不太可能发生很大变化,因为精确@ large_number可能为0,除非你有非常大量的正数。
您的混淆可能与一些流行函数的方式有关,例如VLFeat的vl_pr
计算精确回忆曲线,因为它们假设您已经为它们提供了整个排名列表,因此计算了积极的总数通过查看排名列表而不是基础事实本身来实现真相。因此,如果您在裁剪列表上天真地使用vl_pr
,您确实可以欺骗它,但这将是一个无效的计算。我同意它不是100%明确的功能描述,但如果你更详细地检查documentation,你会看到它提到NUMNEGATIVES
和NUMPOSITIVES
,所以如果你给出一个不完整的排序列表,你应该设置这两个量,让函数知道如何正确计算精确回忆曲线/ AP。现在,如果您使用vl_pr
绘制排序列表的不同作物,但是对于所有函数调用使用相同的NUMNEGATIVES和NUMPOSITIVES,您将看到精确召回曲线只是彼此的作物,正如我在上面解释的那样(我还没有检查过这个,因为我这里没有matlab,但我确定是这种情况,如果不是我们应该提交错误)。