信息检索实验报告
实验题目
Ranked retrieval model
实验内容
实现以下指标评价,并对HW1.2检索结果进行评价
- 实现以下指标评价,并对HW1.2检索结果进行评价;
- Mean Reciprocal Rank (MRR);
- Normalized Discounted Cumulative Gain (NDCG);
实验过程
- 得到qrels_dict和test_dict
qrels_dict和test_dict分别从qrels.txt中和result.txt中得到
#get qrels_dict
for line in f:
ele = line.strip().split(' ')
if ele[0] not in qrels_dict:
qrels_dict[ele[0]] = {
}
if int(ele[3]) > 0:
qrels_dict[ele[0]][ele[2]] = int(ele[3])
#get test_dict
for line in f:
ele = line.strip().split(' ')
if ele[0] not in test_dict:
test_dict[ele[0]] = []
test_dict[ele[0]].append(ele[1])
简单来说,可以认为test_dict是测试的idset,qrels_dict是真实的idset,即
test_result = test_dict[query]
true_list = set(qrels_dict[query].keys())
- MAP评价
MAP在Precision@K的基础上进行,主要步骤为:
- 考虑每个相关docid在测试结果中的位置,K 1 , K 2 , … K R;
- 为K 1 , K 2 , … K R计算Precision@K;
- 求这R个P@K的平均值AvgPrec,得到AP;
- MAP极为AP的均值;
#MAP
for doc_id in test_result[0: length_use]:
i += 1
if doc_id in true_list:
i_retrieval_true += 1
P_result.append(i_retrieval_true / i)
#print(i_retrieval_true / i)
if P_result:
AP = np.sum(P_result) / len(true_list)
print('query:', query, ',AP:', AP)
AP_result.append(AP)
MAP=np.mean(AP_result)
可以得到MAP评价结果如下:
query: 171 ,AP: 0.9498040597601832
query: 172 ,AP: 0.3412969283276451
query: 173 ,AP: 0.9978136200716846
query: 174 ,AP: 0.5675347800347801
…
query: 222 ,AP: 0.30126376980342995
query: 223 ,AP: 0.9940746736049804
query: 224 ,AP: 0.5178732378732379
query: 225 ,AP: 0.9920063553263518
MAP = 0.6148422817122279
- MRR评价
MRR相比其他两个较为简单,只需考虑第一个相关文档出现的位置就可以,步骤为:
- 考虑第一个相关文档的名次位置
- 计算排名分数为1/k
- MRR即为RR的均值