Rocchio算法
一、引子
查询扩展(Query Expansion)是信息检索领域的一个重要话题。
一方面。用户本身可能会出错,他会输入一些错别字,比方把“冯小刚”,错写成“冯晓刚”;或者某个复杂的专有名词。用户自己也不是非常清楚。比如图灵当年研究的Entscheidungsproblem,由于这个词非常生僻,你可能仅仅隐约记得 En...ch...dungsproblem。现代IR要求面对用户的错误输入或者不完整的输入也能给出尽量相关的查询结果,这就须要用到查询扩展。还有一方面,自然语言本来就具有多意性,比如当你输入java时,它可能指一种计算机语言,也可能是印尼的一座岛,甚至是某个品种的咖啡豆。这些问题也要借助查询扩展来加以应对。
你可能会想到使用通配符(wildcard)来协助查询,这也的确能够解决上述我们列举的部分问题。事实上现代IR系统基本都有这方面的设计,但这还远远不够。
为了应对语言本身的模糊性(ambiguity),我们还须要一些对query进行优化、提炼,从而使其更加明白。这方面的策略主要分成两类,即全局性方法和局部性方法。
全局性方法主要借助同义词词典或者WordNet之类的工具。对原query进行补充推荐。主要策略包含:
- 利用 terms 或 phrases 的共现性来向用户建议更进一步的(或者有助于查询更加明白的)补充terms。比如:[java] → ([java indonesia] | [java coffee] | [java programming])?
- 向 query 中直接添加原terms的同义词、反义词、派生词等,比如:[cat] → [cat feline jaguar animal puss . . . ]
- 建立一个自己主动的同义词词典(automatic thesaurus),然后在collection中寻找有关的terms,从而向 query 中添加联想词,比如:[olympics] → [medal record rio champion torch . . . ]
局部性方法则基于最初查询的结构来又一次制定query。这当中最重要的概念就是“relevance feedback”。
二、Relevance feedback
首先明白。如今我们要做的事情是改进优化我们的terms,事实上就是添加很多其它的辅助信息或限制条件。比如用户输入的查询关键词是java,我们对它进行改进追加一些信息,变成 java programming(如果我们有非常大把握猜測出用户想查询的是一门计算机语言)。
那这个被添加的信息programming,除了上面提供的那几条策略之外,还有其它方法吗?一个非常不错的主意就是,从(比如输入java后得到的)query 结果中找出一些信息来作为查询扩展(这也就是局部性方法的基本策略)。
而这样的局部方法的核心就是 relevance feedback。在一个“true relevance feedback”中,用户能够把检索到的文档标识成相关或者不相关。
相关的文档将得到正值的权重,而不相关的文档则得到负数的权重。可是如今更为popular的方法是“pseudo-relevance feedback”,简称PRF。当然,仅仅有IR系统觉得相关的内容才会检索出来,所以得到的结果都是相关的。但如今我们如果排名靠前的结果就是相关。反之靠后的就不相关。
这就是称其为pseudo的原因。
并且这是我们兴许算法赖以存在的一个非常重要的基本如果。
以下总结通过RF进行查询扩展的基本步骤:
三、与Rocchio 算法
Rocchio算法 源自 1970年代 建立的SMART IR 系统。
它以在 IR 系统建立的 RF 方法为基础,通过查询的初始匹配文档对原始查询进行改动以优化查询的方法。该算法如果大部分用户都有一个大致的概念。以保证他们能够判定哪些文档是否与查询主题相关。
Rocchio算法 提供了一种将相关反馈信息融到向量空间模型(VSM。Vector Space Model)的方法。假定我们要找一个最优查询向量q ,它与相关文档之间的类似度最大且同一时候又和不相关文档之间的类似度最小。若Cr表示相关文档集,Cnr表示不相关文档集。那么我们希望找到的最优的 q 就是
当中。sim() 函数用于计算类似度。
採用余弦类似度计算时,能够将相关文档与不相关文档区分开的最优查询向量为:
这就是说。最优的查询向量等于相关文档的质心向量和不相关文档的质心向量的差。下图能够帮助我们来理解这个公式。如果图中红色叉所表示不相关文档,圆圈表示相关文档(注意为了便于理解,我们这里讨论欧几里得距离,而非余弦距离)。你可能会觉得既然我们是想找出相关的文档,并且相关文档的质心是离全部相关文档都近期的一个点,那这个点不就是最优查询吗?从下图来看。显然如果你选择相关文档的质心。那么不相关文档离这个质心的距离与其它相关的点是相等的。所以事实上它也会被囊括进来。
注意前面我们也讲过。在全部被检索出来的文档中,如果排名靠前的结果就是相关,反之靠后的就不相关。所以如果我们选择一个离相关质心尽量接近同一时候又离不相关质心尽量偏离的点,可能会比相关文档的质心向量更偏离各个相关文档。但同一时候也会更加偏离不相关文档,排序之后,相关文档会更加靠前,而不相关文档由于排序靠后也就变成不相关的了。
然而,这个发现并没有什么意义,由于检索本来的目的就是要找相关文档。而全部的相关文档集事先却是未知的。可是我们能够依据这个思路的启发来进行变型改造,于是便得出了本文要讨论的Rocchio 算法(一种用在IR系统中的相关反馈算法)。在一个真实的IR中,假定我们有一个用户查询,并知道部分相关文档和不相关文档的信息,则能够通过例如以下公式得到改动后的查询向量q:
当中。 q0 是原始的查询向量,Dr 是已知的相关文档集合(即 top results in PRF),Dnr 为不相关文档集合。α、β 及γ 是上述三者的权重。这些权重能够控制判定结果和原始查询向量之间的平衡:如果存在大量已推断的文档,那么会给β 及γ 赋予较高的权重。这些权值能够凭经验或对文本数据的认识在赋值,也能够通过实验来调试赋值。
改动后的新query从q0 開始,向着相关文档的质心向量靠近了一段距离。而同一时候又与不相关文档的质心向量远离了一段距离。
新查询能够採用常规的VSM进行检索。通过减去不相关文档的向量。我们非常easy保留向量空间的正值分量。在Rocchio 算法中。文档向量中的权重分量如果为负值,那么该分量将会被忽略,换言之,此时会将该分量权重设为0。下图给出了应用相关反馈技术的效果示意图。
RF 能够同一时候提高recall 和 precision。然而,实际表明该技术在一些recall比較重要的场景下对于提高recall非常有帮助。这当中的部分原因在于它对查询进行了扩展,还有一个原因是应用的场景所带来的结果:在期望高recall的情况下,能够估计用户可能会花很多其它时间来浏览结果并进行重复搜索。
正反馈往往比负反馈更有价值,因此在非常多IR系统中。会将參数设置成 γ < β。一个合理的取值是α = 1、β = 0.75 及γ = 0.15。
实际上,非常多系统,都仅仅同意进行正反馈,即相当于设置 γ = 0。
还有一种做法是,仅仅取检索系统返回结果中排名最高的标记为不相关的文档进行负反馈,此时。公式中的|Dnr| = 1。
四、一个样例
參考文献:
Manning, Christopher D; Raghavan, Prabhakar; Schütze, Hinrich; Introduction to information retrieval, Cambridge University Press 2008.
Rocchio算法的更多相关文章
- 各常用分类算法的优缺点总结:DT/ANN/KNN/SVM/GA/Bayes/Adaboosting/Rocchio
1决策树(Decision Trees)的优缺点 决策树的优点: 一. 决策树易于理解和解释.人们在通过解释后都有能力去理解决策树所表达的意义. 二. 对于决策树,数据的准备往往是简单或者是不必要的. ...
- 【T-BABY 夜谈大数据】基于内容的推荐算法
这个系列主要也是自己最近在研究大数据方向,所以边研究.开发也边整理相关的资料.网上的资料经常是碎片式的,如果要完整的看完可能需要同时看好几篇文章,所以我希望有兴趣的人能够更轻松和快速地学习相关的知识. ...
- 分类算法简介 分类: B10_计算机基础 2015-03-09 11:08 257人阅读 评论(0) 收藏
一.决策树 决策树是用于分类和预测的主要技术之一,决策树学习是以实例为基础的归纳学习算法,它着眼于从一组无次序.无规则的实例中 推理出以决策树表示的分类规则.构造决策树的目的是找出属性和类别间的关系, ...
- Web挖掘技术
一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据 ...
- Web采矿技术
一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不全然的数据集中获取隐含在当中的实用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用.Web 数据 ...
- 基于PU-Learning的恶意URL检测——半监督学习的思路来进行正例和无标记样本学习
PU learning问题描述 给定一个正例文档集合P和一个无标注文档集U(混合文档集),在无标注文档集中同时含有正例文档和反例文档.通过使用P和U建立一个分类器能够辨别U或测试集中的正例文档 [即想 ...
- B树——算法导论(25)
B树 1. 简介 在之前我们学习了红黑树,今天再学习一种树--B树.它与红黑树有许多类似的地方,比如都是平衡搜索树,但它们在功能和结构上却有较大的差别. 从功能上看,B树是为磁盘或其他存储设备设计的, ...
- 分布式系列文章——Paxos算法原理与推导
Paxos算法在分布式领域具有非常重要的地位.但是Paxos算法有两个比较明显的缺点:1.难以理解 2.工程实现更难. 网上有很多讲解Paxos算法的文章,但是质量参差不齐.看了很多关于Paxos的资 ...
- 【Machine Learning】KNN算法虹膜图片识别
K-近邻算法虹膜图片识别实战 作者:白宁超 2017年1月3日18:26:33 摘要:随着机器学习和深度学习的热潮,各种图书层出不穷.然而多数是基础理论知识介绍,缺乏实现的深入理解.本系列文章是作者结 ...
随机推荐
- Linux Shell 参数传递多种方式
背景 最近编写ansible脚本,需要自动调用之前写好的shell脚本,由于shell脚本中包含了read命令接收用户的手动输入,为了实现ansible脚本的自动运行,不得不将手动输入转换为自动输入. ...
- Jmeter实时性能测试数据的监控
Jmetet实时性能测试数据的监控和展示Jmeter Grafana InfluxDB 安装Grafana配置jmeter安装InfluxDB配置Grafana展示数据一安装InfluxDB 为了方便 ...
- POJ2955 Brackets(区间DP)
给一个括号序列,求有几个括号是匹配的. dp[i][j]表示序列[i,j]的匹配数 dp[i][j]=dp[i+1][j-1]+2(括号i和括号j匹配) dp[i][j]=max(dp[i][k]+d ...
- 使用Bundle在Activity间传递数据
使用Bundle在Activity间传递数据 源Activity public class SourceActivty extends Activity { private Intent intent ...
- SQL 序号列ROW_NUMBER,RANK,DENSE_RANK、NTILE
原文:SQL 序号列ROW_NUMBER,RANK,DENSE_RANK.NTILE SQL 2005新增加相关函数 : ROW_NUMBER,RANK,DENSE_RANK.NTILE 窗口函数 O ...
- github 多账户配置
一直以来git都是自己业余玩玩,虽然也在github上有个账户,也只是小打小闹,弄了若干个测试仓库.最近公司要从TFS迁移到Gerrit,也算是正式用git了.不过遇到的一个问题就是账户问题,一个个人 ...
- [置顶]
kubernetes资源类型--RC和RS
Replication Controller(RC) RC是K8S中的另一个核心概念,应用托管在K8S后,K8S需要保证应用能够持续运行,这是RC的工作内容. 主要功能 确保pod数量:RC用来管理正 ...
- 用DotSpatial下载谷歌瓦片图并展示到地图控件上 【转】
http://blog.csdn.net/caoshiying/article/details/51991647 上一篇文章讲解如何加载各地图的WMS地图服务.虽然不涉及到瓦片,但是每次地图刷新都要请 ...
- Hive日期格式转换用法
如果想把 20180123 转换成 2018-01-23,可以使用: select from_unixtime(unix_timestamp('${p_date}','yyyymmdd'),'yyyy ...
- 新装系统(CentOS7.4)环境初始化配置笔记
新装系统(CentOS7.4)环境初始化配置笔记 一.概述 设备详情: Dell R730 服务器 (四个网卡,一根网线插在第2个网卡上) CentOS 7.4 x64 最小安装环境 二.网络环境配置 ...