[英]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.