我正试图找到一种计算搜索引擎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)
这是一种正确的方法吗? (p.s.查询是我的GT的数据框,queries_result是我的SE结果数据框)
答案 0 :(得分:0)
如果您可以负担得起的结果和事实的真相:
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()