[wbia 2.2] 对检索结果进行评估

评估对检索系统的性能:

由于我们这里的检索结果,是主要根据PageRank的排名,以及Lucene对文本的分词和相关性计算的最后得分,进行权值调整后得到的排名结果。

这里对我们检索系统的进行性能评估,这里主要评估的是检索结果排名的质量。

由于对搜索结果排名的评估有很多方法和技巧,这里我们可以采用几个比较经典的评估方法:

1,对rank result 计算P/R值,利用差值法,衡量平均的P/R值。

2,对rank计算DCG值,以及NDCG值,得到。

3,利用google的站内搜索功能,对我们自己的排名结果进行对比排名。

接下来详细说明下,是怎么使用各个评估方法的。

1,对rank result 计算P/R值,利用差值法,衡量平均P/R值。(具体求值方法,见附录。)

1.1首先,为了得到标准测试集。我们选择了5个有代表性的query,然后在我们抓的数据集中随机选择100个

静态网页。人工对100个网页,对5个关键词进行“相关/不相关”的二元标注。这样我们就得到了

标准测试集。然后我们使用自己设计的rank算法,对这100个网页进行索引。

对选择的5个query,进行查询,得到rank的结果。

1.2接下来,我们就可以进行进行rank的P/R值计算了。

分别计算得到10个Precision 和 Recall value。这样我们得到了一连串的PR值,

如何比较query之间的检索效果,就需要计算出avgPrec。将Recall里面递增的值

的prec的平均值。这样可以评估不同query间的检索效果。

1.3对上面计算的P/R值,计算其F1值。利用avgF值也可以得到评估排名的效果。

2,对rank计算DCG值,以及NDCG值,得到。(具体求值方法,见附录。)

2.1 首先我们选择出5个query,然后可以对全局爬下来的数据进行检索。

输入5个query后,得到的top10 结果。对10个页面结果,进行3个等级的区分:Good(好)、Fair(一般)、 Bad(差),

标注后,得到每个页面得分。根据DCG的定义,分别计算出DCG值。但是和上面遇到的问题一样,不同query之间的比较,不能很好

的比较,所以需要就计算NDCG,归一化DCG值后,query之间的效果就可以计算。一定程度上,可以比较方法1,2中的评估结果,

看下不同评估方法之间的效果和侧重点。

3,利用google的站内搜索功能,对我们自己的排名结果进行对比排名。

google站内搜索,是想利用google的搜索结果,计算出DCG值,然后和2中的值进行比较,查看结果,分析出现不同估算值的原因和结果,是否算法客观评估了效果,或者算法是否有需要改进的地方。

google站内搜索,还可以帮助,1中的测评中,代替大量人工评估的相关性方法,可以假设google搜出结果的前n条为相关性结果,

然后其余的为不相关,这样可以得到数量级更大的测试集。

关于测试集的获得,还可以使用人工标注的结果,然后对其余子集使用分类算法,进行相关性分类。这样也可以得到数量级大的测试集。

附录:

1, P/R 值,rank P/R值计算 , F1值计算。

来源于:wbia 课件

1

n 精度Precision P = tp/(tp + fp)

n 召回率Recall R = tp/(tp + fn)

clip_image002

Rank P/R 计算

clip_image004

2,DCG,NDCG计算。

来源于 http://hi.baidu.com/jasonlyy/blog/item/60614c487685983f09f7efe7.html

CG并不考虑在搜索结果页面中结果的位置信息,它是在这个搜索结果list里面所有的结果的等级对应的得分的总和。如一个搜索结果list页面有P个结果,CG被定义为:

clip_image005

reli是 第i位结果的得分。CG的统计并不能影响到搜索结果的排序,CG得分高只能说明这个结果页面总体的质量比较高并不能说明这个算法做的排序好或差。什么是好 的排序?也就是说要把Good的结果排到Fair结果上面、Fair结果排到Bad结果上面,如果有Bad的结果排在了Good上面,那当然排序就不好 了。到底排序好不好,需要一个指标来衡量,DCG就是这样的一个指标。

  上面的例子CG=3+2+1+3+2=11,如果调换第二个结果和第三个结果的位置CG=3+1+2+3+2=11,并没有改变总体的得分。

Discounted Cumulative Gain

  在一个搜索结果list里面,比如有两个结果的打分都是Good,但是有一个是排在第1位,还 有一个是排在第40位,虽然这两个结果一样都是Good,但是排在第40位的那个结果因为被用户看到的概率是比较小的,他对这整个搜索结果页面的贡献值是 相对排在第一位那个结果来得小的。

DCG的思想是等级比较高的结果却排到了比较后面,那么在统计分数时,就应该对这个结果的得分有所打折。一个有p(P≥2)个结果的搜索结果页面的DCG定义为:  

clip_image006

为什么要用以2为底的对数函数?这个并没有明确的科学依据,大概是根据大量的用户点击与其所点宝贝的位置信息,模拟出一条衰减的曲线。

  那么上例中的数字如右图所示: clip_image007

DCG=3+(1+1.26+1.5+0.86)=7.62

DCG的公式另外一种表达式是:

clip_image008

这个表达式在一些搜索文档中经常会被提到,他的作用和之前的那个公式一样,但是这个公式只适合打分分两档的评测。

nDCG(normalize DCG)  因为不同query的搜索结果有多有少,所以不同query的DCG值就没有办法来做对比。

  定义: 

clip_image009

IDCG(ideal DCG),就是理想的DCG。IDCG如何计算?首先要拿到搜索的结果,人工对这些结果进行排序,排到最好的状态后,算出这个排列下本query的DCG,就是IDCG。

  因为nDCG是一个相对比值,那么不同的query之间就可以通过比较nDCCG来决定哪个query的排序比较好。

  例子中,理想的排序应该是3 、3 、2 、2 、1,那么IDCG=3+3+1.26+1+0.43=8.69

nDCG=DCG/IDCG=7.62/8.69=0.88,从nDCG这个值可以看出目前算法存在的优化空间。

转载于:https://www.cnblogs.com/goodness/archive/2012/04/16/2452800.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

错误175:具有固定名称MySql.Data.MySqlClient的ADO.NET提供程序未在计算机或者应用程序配置文件中注册或者无法加载

背景: EF连接MySQL时报错,截图如下图所示: 网上翻阅了很多资料,感觉有一篇文章说的比较靠谱:点击阅读。解决问题的大致过程如下: 在尝试使用MySQL,ADO.NET(数据库优先)和…

精通ASP.NET MVC ——URL和Ajax辅助器方法

Ajax(或者,如果你愿意,也可以称为AJAX)是 Asynchronous JavaScripts and XML(异步JavaScripts与XML)。其XML部分并不如它往常那样意义重大,但是异步部分却使AJax十分有用。这是后台请求服务器数据,而不必重载Web页面的一种模型。M…

精通ASP.NET MVC ——控制器可扩展性

MVC中引导动作方法执行过程的请求流程管道中,有两个重要的部件:控制器工厂(Controller Factory) 和 动作调用器(Action Invoker)。控制器工厂负责创建对请求进行服务的控制器实例,动作调用器负责查找并调用控制器类中的…

永中向香港博览会主办方演示云办公(转载)

4月16号“香港国际资讯博览会”主办方香港贸发局对永中云办公产品非常感兴趣,由永中员工演示,并拍摄了演示视频。转载于:https://blog.51cto.com/premium/837675

Backbone.js学习笔记

为什么80%的码农都做不了架构师?>>> http://documentcloud.github.com/backbone var todoItem new TodoItem(); todoItem.url /todo; todoItem.fetch(); todoItem.get(description)var TodoItem Backbone.Model.extend({urlRoot: /todos }); var tod…

ASP.NET MVC中使用Autofac实现简单依赖注入

本文参考资料: 1、https://www.cnblogs.com/RayWang/p/11128554.html。 2、https://www.cnblogs.com/eedc/p/6127181.html 3、https://www.cnblogs.com/ancupofcoffee/p/5007649.html#top 前言 关于IoC和DI(依赖注入)的概念网上一搜一大把。简单来说,Io…

初探EntityFramework——来自数据库的EF设计器

本文通过简单的示例,先初步了解下EF四种设计模式之一:来自数据库的EF设计器。 来自数据库的EF设计器,顾名思义,需要有新建的数据库和表结构,才能生成EF设计器, 在本地新建数据库KTStore,并且新建…

初探EntityFramework——空EF设计器模型

如果没有任何现存数据库架构,可以使用空的EF设计器模型。本文将通过简单示例,了解如何使用空EF设计器模型。 新建空的控制器应用程序EFDesignerDemo,如下图所示: 在项目中右键,选择“添加”,然后是“新建项…

初探EntityFramework——来自数据库的Code First

Entity Framkwork从第二版(EF4)开始,支持新的CodeFirst模式(程序代码优先),以自定义类定义数据模型。简化了EF的开发过程。本文章使用简单的示例来说明如何使用来自数据库的CodeFirst模式。 新建一个空的控…

初探EntityFramework——空Code First模型

如果不是从现有的系统升级,想要创建全新的项目可以从“空Code First模型开始”。“空CodeFirst模型”要先创建类,Visual Studio会从项目第一次执行的时候根据连接自动创建需要的数据库结构。本文将简单示例说明如何使用“空CodeFirst模型”。 新建控制台…

初探EntityFramework——实体类结构映射

实体类与数据表的映射有一套专用的规则。Code First 采用的惯例优于预先设置的设计,在没有任何设置的情况下,自动检测模型结构并推导出默认设置以简化类的设计,因此不需要特别设置类的属性即可完成模型设计。 例如,当DbContext的模…

深入了解EntityFramework——数据注解属性

当惯例规则不符合设计需求时,我们可以使用数据注解配置打造更合适的数据库模型。本文根据示例项目对常用的数据注解属性做一个简要的举例说明。 EFCodeFirst使用的约定大于配置的的编程模式, 这种模式利用默认约定根据我们的领域模型建立概念模型。然我们…

Android上实现柱状图表

Android上实现柱状图算法实现 第一步: 获取Android设备的屏幕大小 第二步: 在View对象中使用Canvas绘制蓝色边框与白色背景XY轴两条线,代码如下 第三步: 绘制柱状图标题 第四步: 根据数据集计算出每个系列数据所占X轴的…

深入了解EntityFramework——Fluent API

Fluent API 除了惯例原则与属性数据注解外,FluentAPI是另一种支持实体类配置设置的方式。与属性数据注解相比,它提供了更广泛的功能与设置弹性。实体类若同时设置了数据注解,则采用的优先权是“Fluent API” > "数据注解" &g…

深入了解EntityFramework——Lazy Loading与Eager Loading

Lazy Loading:延迟加载。Eager Loading:贪婪加载。 首先通过一个简单的控制台应用程序例子说明延迟加载: 订单主表和订单从表,并且订单主表和订单从表是一对多的关系,代码如下图所示: //订单主表public cl…

SQL – 2.SQLServer的管理 + 3.SQL基础1 + 4.SQL基础2

SQLServer的管理 常用字段类型:bit(可选值0、1)、datetime、int、varchar、nvarchar(可能含有中文用nvarchar)varchar、nvarchar 和char(n)的区别: char(n)不足长度n的部分用空格填充。Var:Variable,可变的…

EntityFramework进阶——继承

通过类型继承,我们可以更弹性地处理数据,有3中相关的技巧,即TPH,TPT,TPC。 Table Per Hierarchy(TPH) 当单个数据表存储不同数据类型时,在数据模型的设计上,可以使用Tab…

EntityFramework进阶——数据编辑与维护

实体数据对象状态 在EF环境下,应用程序更改数据对象会引发数据集状态的变更,可能的状态有以下几种: 数据对象状态列表Added添加实体对象创建到实体集中,数据未添加进数据库Modified实体对象已经存在于实体数据集中,数…

第六章扩展——VMA

由 user process角度来说明的话,VMA 是 user process 里一段 virtual address space 区域;virtual address space 是连续的内存空间,当然VMA 也会是连续的空间。VMA 对 Linux 的主要好处是,可以内存的使用更有效率,並且…

EntityFramework进阶——数据变更冲突

TimeStamp 更新操作可能伴随数据冲突,我们可以通过并发处理妥善解决这一方面的问题。避免数据冲突比较方便的做法是自动加入字节数组(byte[])类型的TimeStamp属性,对应到数据表中的rowvewsion类型字段,自动监控数据的…