信息检索:对搜索引擎性能的评价指标的小作业---pooling方法以及MAP value的计算
来源:互联网 发布:oa系统数据库表设计 编辑:程序博客网 时间:2024/05/17 09:11
最近《信息检索》课程的homework,要评价信息检索评价指标,涉及到一些小东西,比如说pooling method(缓冲池)的计算、MAP values的计算、画P-R图,于是记录下来。
先上作业:
图1:作业
评价过程:
1.pooling method
先找到自己想要输入的3个query,到4种搜索引擎,取回前30条链接。共120个url,需要找到所有相关文档,遍历所有网页,查找相关文档几乎是不可能的任务,于是,便有pooling method,人工判断四个搜索引擎的120网页是否搜到了query相关的,然后在这120个url中(对url进行去重,4个搜索引擎搜到的肯定有重复的,重复的url去掉,剩下比如104个,在104个中找),有多少个是相关的,作为总的相关数也即A+C的个数,对应着各搜素引擎在30个中搜到了多少个相关的,以判别搜索引擎的性能。
图2:人工判断的搜索引擎返回的链接的相关性并存着
2.P-R图
根据P-R图判断各搜索引擎对同一query搜索返回结果的性能,用基于ranking(排名)的方法计算P、R值,遍历搜索引擎找到的链接,判断遍历到的url有多少是相关的,也即是检索到并且相关的A的个数,遍历过去,也即检索到的所有的个数A+B=1-->30(如果存了搜索引擎返回来的30条url),找到30个点,也就可以画P-R图了,实际上画出来的图会是,锯齿状的,需要做些平滑。可取同一R处多个P的最高点处,取其平均,取其XX等各种方法平滑。有了点,可以用各种方法画图了,excel,matlab,直接在代码里用python画图来的更直接。
3.计算MAP值
MAP(Mean Average Precision):单个主题的平均准确率是每篇相关文档检索出后的准确率的平均值。主集合的平均准确率(MAP)是每个主题的平均准确率的平均值。 MAP 是反映系统在全部相关文档上性能的单值指标。系统检索出来的相关文档越靠前(rank 越高),MAP就可能越高。如果系统没有返回相关文档,则准确率默认为0。
例如:假设有两个主题,主题1有4个相关网页,主题2有5个相关网页。某系统对于主题1检索出4个相关网页,其rank分别为1, 2, 4, 7;对于主题2检索出3个相关网页,其rank分别为1,3,5。对于主题1,平均准确率为(1/1+2/2+3/4+4/7)/4=0.83。对于主题 2,平均准确率为(1/1+2/3+3/5+0+0)/5=0.45。则MAP= (0.83+0.45)/2=0.64。”(参考:http://blog.sina.com.cn/s/blog_662234020100pozd.html)4.code
#coding:utf-8'''Created on 2014年10月27日'''import codecsimport pylab as pls_file=u"D:/搜狗高速下载/k网络信息检索/IR_homework2work/query_"url_txt="_url.txt"list_query=[u"无限开关",u"命中挚爱",u"longkissgoodbye"]list_se=[u"baidu",u"bing",u"google",u"sogou"]#将3个120的url去掉重复的,比如说剩下78,82,95,并且将其存到字典中,#要保证url的相关性,存0/1,故不使用set()remove_repeat=[{},{},{}] #--------------------------------------------num=0for i in range(len(list_query)): #i,分别为0,1,2代表着具体的query for j in range(len(list_se)): #j。分别代表着各种se #print "以下是在:\"",list_se[j],"\"中搜索\"",list_query[i],"\"的结果" s_dir=s_file+list_query[i]+"/"+list_se[j]+url_txt # with codecs.open(s_dir) as file_url: text_url=file_url.readlines() for line in text_url: #遍历每一行,取url及相关文档判别标志 line=line.decode("utf-8") #------------------------------直接把整行line投到set()里去重,也行,但还是要解析- list_01_url=line.split(" ") #前段处理已用空格隔开0/1和url url=list_01_url[1].strip("\n") #去掉换行符, #print type(url),type(remove_repeat[i]) if url in remove_repeat[i].keys(): pass else:#将i分别为无限开关,XX,XX,的120个url去重存到remove_repeat[i]中 remove_repeat[i][url]=int(list_01_url[0]) num=num+1##去重后,相关文档的个数list_rel_url=[0,0,0]for i in range(len(remove_repeat)): for j in remove_repeat[i].keys(): if remove_repeat[i][j]==1: list_rel_url[i]=list_rel_url[i]+1 print "去重后剩下url分别为:",len(remove_repeat[i])print "去重后相关url分别为:",list_rel_urlprint 30*"**"#---------------------------for i in range(len(list_query)): #i,分别为0,1,2代表着具体的query for j in range(len(list_se)): #j。分别代表着各种se num_url=0 num_30line=0 list_R=[] list_P=[] list_num_url_line=[] print "以下是在:\"",list_se[j],"\"中搜索\"",list_query[i],"\"的结果" s_dir=s_file+list_query[i]+"/"+list_se[j]+url_txt # with codecs.open(s_dir) as file_url: text_url=file_url.readlines() for line in text_url: #遍历每一行,取url及相关文档判别标志 line=line.decode("utf-8") #------------------------------直接把整行line投到set()里去重,也行,但还是要解析- list_01_url=line.split(" ") #前段处理已用空格隔开0/1和url url_rel=int(list_01_url[0]) url=list_01_url[1].strip("\n") #去掉换行符, if url_rel==1: #遍历30个,遇到了1,就得到一个点,P-R图,不必画30个点, num_url=num_url+1 num_30line=num_30line+1 R=num_url*1.0/list_rel_url[i] P=num_url*1.0/num_30line list_num_url_line.append(num_30line) #将那些出现1的行数,记录下来,用来算MAP值 else: num_30line=num_30line+1 list_R.append(R) list_P.append(P) #计算MAP值 print "人工判断,有",num_url,"个相关的" print list_query[i],"在",list_se[j],"下的MAP值为:",sum([1.0/k for k in list_num_url_line])*1.0/num_url #遍历完了30行,并且数据分别存到了list_R和list_P中,就可以开始画图了 #s_title=list_query[i].decode('utf-8') #pl.title(s_title) #在图片中,没发显示中文,乱码了吗 pl.xlabel(u"Recall") pl.ylabel(u"Precision") pl.plot(list_R,list_P,label=list_se[j]) pl.legend() pl.savefig(s_file+list_query[i]+"/"+list_query[i]+"_PR.png") #需要放到show()前面,不然存下来的图片为空白 pl.show() #待画好了四张图,再展示出来 print 30*"**"
5.结果:
图3:“命中挚爱”的PR-图
6.小感想
最后计算MAP值,出来的结果不科学。搜狗居然赢了,吓尿了~!发现是其相关文档少了,反而成为了优势。另外的话,数据量太少了,只有30个,数据量少的时候用MAP判断搜索引擎的性能可能不太好。还有关于曲线平滑的问题,在后面的高于前面,这一点也是不太合理,也没深入分析~,~.......
- 信息检索:对搜索引擎性能的评价指标的小作业---pooling方法以及MAP value的计算
- 信息检索常用的性能评价指标
- 信息检索的评价指标
- 信息检索的评价指标
- 信息检索的评价指标:Recall,Precision,AP,MAP,ROC
- 信息检索的评价指标(Precision, Recall, F-score, MAP)
- 信息检索的评价指标(Precision, Recall, F-score, MAP)
- 信息检索的评价指标(Precision, Recall, F-score, MAP)
- 信息检索IR的评价指标综述
- 信息检索IR的评价指标综述
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
- 信息检索(IR)的评价指标介绍 - 准确率、召回率、F1、mAP、ROC、AUC
- 信息检索(IR)的评价指标介绍-准确率、召回率、F1、mAP、ROC、AUC
- 面试题目-华为
- 入行IT圈,你要考虑啥?
- Android学习日记——数据存储5部曲之文件存储
- Qt的信号与槽机制
- Oracle 数据库的备份与恢复
- 信息检索:对搜索引擎性能的评价指标的小作业---pooling方法以及MAP value的计算
- Oracle 实现sql dateadd
- ORACLE 存储过程不能用truncate table xxx解决方法
- Oracle10g查询不区分大小写
- 关于处理xml的两种方法,xmlPullParser与Dom解析的两种
- :一条新鲜的鱼、姜、蒜、泡
- 哪里有打扫卫生
- 用2分法进行排序
- 【MongoDB】mongoimport and mongoexport of data (一)