繁体   English   中英

计算平均倒数排名

[英]Calculate mean reciprocal rank

我正在尝试寻找一种方法来计算搜索引擎的MRR。 我知道倒数排名的计算方式如下:

RR = 1 /第一个相关结果的位置

但这在我知道哪个是我的查询词(我的意思是“问题”)时有效! 就我而言,只有结果:。

我有以下可用数据格式:查询n.1的正确结果:GT = [doc1,doc2,doc3]我的搜索引擎查询n.1的结果:SE = [doc2,doc7,doc1]

在这种情况下,我应该如何计算RR? 到现在为止,我以以下方式进行操作:

 all_rr=[]
 for i in queries:
     for j in queries_results:
         pos=j.index(i[0])+1
         RR=1/pos
         all_rr.append(RR)
 MRR=np.mean(all_rr)

这是正确的方法吗? (ps查询是我的GT的数据框,querys_result是我的SE结果数据框)

如果您可以负担得起的结果和地面真理:

import pandas as pd

gts = pd.DataFrame.from_dict([
    {'query': 'q1', 'document': 'doc2'},
    {'query': 'q1', 'document': 'doc3'},
    {'query': 'q2', 'document': 'doc7'},
])

results = pd.DataFrame.from_dict([
    {'query': 'q1', 'document': 'doc1', 'rank': 1},
    {'query': 'q1', 'document': 'doc2', 'rank': 2},
    {'query': 'q1', 'document': 'doc3', 'rank': 3},
    {'query': 'q2', 'document': 'doc4', 'rank': 1},
    {'query': 'q2', 'document': 'doc5', 'rank': 2},
    {'query': 'q2', 'document': 'doc6', 'rank': 3},
])

MAX_RANK = 100000

hits = pd.merge(gts, results,
    on=["query", "document"],
    how="left").fillna(MAX_RANK)

mrr = (1 / hits.groupby('query')['rank'].min()).mean()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM