技术标签: search
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。”
NDCG(Normalized Discounted Cumulative Gain):计算相对复杂。对于排在结位置n处的NDCG的计算公式如下图所示:
在MAP中,四个文档和query要么相关,要么不相关,也就是相关度非0即1。NDCG中改进了下,相关度分成从0到r的r+1的等级(r可设定)。当取r=5时,等级设定如下图所示:
(应该还有r=1那一级,原文档有误,不过这里不影响理解)
例如现在有一个query={abc},返回下图左列的Ranked List(URL),当假设用户的选择与排序结果无关(即每一级都等概率被选中),则生成的累计增益值如下图最右列所示:
考虑到一般情况下用户会优先点选排在前面的搜索结果,所以应该引入一个折算因子(discounting factor): log(2)/log(1+rank)。这时将获得DCG值(Discounted Cumulative Gain)如下如所示:
最后,为了使不同等级上的搜索结果的得分值容易比较,需要将DCG值归一化的到NDCG值。操作如下图所示,首先计算理想返回结果List的DCG值:
然后用DCG/MaxDCG就得到NDCG值,如下图所示:
MRR(Mean Reciprocal Rank):是把标准答案在被评价系统给出结果中的排序取倒数作为它的准确度,再对所有的问题取平均。相对简单,举个例子:有3个query如下图所示:
Query |
Results |
Correct response |
Rank |
Reciprocal rank |
cat |
catten, cati, cats |
cats |
3 |
1/3 |
torus |
torii, tori, toruses |
tori |
2 |
1/2 |
virus |
viruses, virii, viri |
viruses |
1 |
1 |
(黑体为返回结果中最匹配的一项)
可计算这个系统的MRR值为:(1/3 + 1/2 + 1)/3 = 11/18=0.61
文章浏览阅读4.3w次,点赞4次,收藏22次。前言在日常Java开发中,我们经常碰到java.lang.NoClassDefFoundError这样的错误,需要花费很多时间去找错误的原因,具体是哪个类不见了?类明明还在,为什么找不到?而且我们很容易把java.lang.NoClassDefFoundError和java.lang.ClassNotfoundException这两个错误搞混,事实上这两个错误是完全不同的。我们往往花费时间
文章浏览阅读242次。Unity API-----SceneManager(场景管理)版本 : 2019.3官方文档传送门描述 :运行时的场景管理.静态属性 :属性名描述sceneCount当前加载的场景总数。sceneCountInBuildSettings生成设置中的场景数。静态方法 :方法名描述CreateScene使用给定的名称在运行时创建...
文章浏览阅读75次。由于没从源里安装texlive,所以没法直接从源里安装kile、winefish、rubber。首先考虑用gedit编辑latex文档,并 且下了一个gedit的latex插件,但是好像这个插件需要rubber(有没有人能解决这个问题阿,求助!),所以考虑用vim的latex- suite插件。1、首先,下载这个插件http://vim-latex.sourceforge.net..._ubuntu 安装vim-latex
文章浏览阅读2.1k次。在移动支付兴起的今天;我们平时在开发当中肯定免不了要接入移动支付;国内两大主流【支付宝】【微信】无论时支付宝还是微信支付都会涉及到支付回调但是这需要支付宝或者微信服务器调用我们的回调接口;因此我们在调试的时候用的是本机电脑;所有我们需要将本地应用端口映射到外网;以供支付服务器调用;在回调接口进行支付成功处理并且要即使回复支付服务器;告诉他已经接受到回调消息;否则支付服务器后续还会进行调..._微信支付回调的原理
文章浏览阅读453次。程序员成功之路 ——The road ahead for programmer(演讲稿)一、我很羡慕在座的各位同学,因为你们是中国未来的程序员,而我不是,我一直很遗憾。比尔盖茨曾经写过一本书叫做《未来之路》The road ahead, 那么今天我选择这样一个题目,the road ahead for programmer, 程序员的未来之路,也就是程序员的成功之路,希望大家未来也能够拥有像比
文章浏览阅读3.6k次。关于 ssrr端口1080占用故障解决:端口已被占用 1080解决方法:Windows杀端口这是一个演示——netstat -aon|findstr “1080”tasklist|findstr “111125”taskkill /f /t /im SearchUI.exe标红的地方因人而异哈。..._ssrr被占用
文章浏览阅读1.4w次,点赞8次,收藏14次。#include int main(int argc, const char * argv[]) { int n; while(scanf("%d", &n) != EOF){ int a[n][n]; for(int i = 0;i < n;i ++){ for(int j = 0;j < n;j ++){
文章浏览阅读496次。实验:动态分区式存储管理实验内容:编写程序模拟完成动态分区存储管理方式的内存分配和回收。实验具体包括:首先确定内存空闲分配表;然后采用最佳适应算法完成内存空间的分配和回收;最后编写主函数对所做工作进行测试。实验提示由于是实验,没有真正的内存分配。所以在实验中首先应建立一张空闲区表,初始状态只有一个空闲登记项(假定的内存空闲区)和一张所有状态都为“空”的已分配区表。假定内存空间110KB,OS占用1..._空闲分区采用带头结点的双向链表来管理,主函数、链表初始化函数和打印函数已实现,
文章浏览阅读137次。Linux Shell是一种基本功,由于怪异的语法加之较差的可读性,通常被Python等脚本代替。既然是基本功,那就需要掌握,毕竟学习Shell脚本的过程中,还是能了解到很多Linux系统的内容。Linux脚本大师不是人人都可以达到的,但是用一些简单的Shell实现一些常见的基本功能还是很有必要的。下面我介绍Linux下使用Shell处理文本时最常用的工具:find、grep、xargs..._shell 删除行数小于100的文件
文章浏览阅读817次。C++多媒体处理类库 JUCE 1.53 发布。该版本主要的变化包括:Android支持,JSON解析,DirectShow视频,UTF-8, UTF-16, and UTF-32 类,Introjucer 改进,以及大量的内部清理和小的新功能等。 JUCE (Jules'_c++ juce
文章浏览阅读809次。请求接口报错:optionsNot Allowed<html><head><title>405 Not Allowed</title></head><body><center><h1>405 Not Allowed</h1></center><hr&g...
文章浏览阅读533次。Qt Android 开发环境搭建及问题解决_android qt