计算平均倒数

2024-06-02 05:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我想找一种方法来计算搜索引擎的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.queries是my GT的数据帧,queries_result是my SE results数据帧)


Tags: 方法ingtfordoc1rr情况all
1条回答
网友
1楼 · 发布于 2024-06-02 05:28:04

如果你能负担得起你的结果和基本事实:

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()

相关问题 更多 >