链接分析算法之:SALSA算法
SALSA算法的初衷希望能够结合PageRank和HITS算法两者的主要特点,既可以利用HITS算法与查询相关的特点,也可以采纳PageRank的“随机游走模型”,这是SALSA算法提出的背景。由此可见,SALSA算法融合了PageRank和HITS算法的基本思想,从实际效果来说,很多实验数据表明,SALSA的搜索效果也都优于前两个算法,是目前效果最好的链接分析算法之一。
从整体计算流程来说,可以将SALSA划分为两个大的阶段:首先是确定计算对象集合的阶段,这一阶段与HITS算法基本相同;第二个阶段是链接关系传播过程,在这一阶段则采纳了“随机游走模型”。
1. 确定计算对象集合
PageRank的计算对象是互联网所有网页,SALSA算法与此不同,在本阶段,其与HITS算法思路大致相同,也是先得到“扩充网页集合”,之后将网页关系转换为二分图形式。
扩充网页集合
SALSA算法在接收到用户查询请求后,利用现有搜索引擎或者检索系统,获得一批与用户查询在内容上高度相关的网页,以此作为“根集”。并在此基础上,将与“根集”内网页有直接链接关系的网页纳入,形成“扩充网页集合”(参考图6.4.3-1)。之后会在“扩充网页集合”内根据一定链接分析方法获得最终搜索结果排名。
转换为无向二分图
在获得了“扩充网页集合”之后,SALSA根据集合内的网页链接关系,将网页集合转换为一个二分图。即将网页划分到两个子集合中,一个子集合是Hub集合,另外一个子集合是Authority集合。划分网页节点属于哪个集合,则根据如下规则:
如果一个网页包含出链,这些出链指向“扩充网页集合”内其它节点,则这个网页可被归入Hub集合;
如果一个网页包含“扩充网页集合”内其它节点指向的入链,则可被归入Authority集合。
由以上规则可以看出,如果某个网页同时包含入链和出链,则可以同时归入两个集合。同时,Hub集合内网页的出链组成了二分图内的边,根据以上法则,将“扩充网页集合”转换为二分图。
图6-15和图6-16给出了一个示例,说明了这个转换过程。假设“扩充网页集合”如图6-15所示,由6个网页构成,其链接关系如图所示,同时为便于说明,每个网页给予一个唯一编号。图6-16则是将图6-15中的网页集合转换为二分图的结果。以网页6为例,因为其有出链指向网页节点3和网页节点5,所以可以放入Hub集合,也因为编号为1、3、10的网页节点有链接指向网页节点6,所以也可以放入Authority集合中。网页节点6的两个出链保留,作为二分图的边,
图6-15 扩充网页集合示例
但是这里需要注意的是,在转换为二分图后,原先的有向边不再保留方向,转换为无向边,而HITS算法仍然保留为有向边,这点与SALSA略有不同。
图6-16 二分图
到这一步骤为止,除了SALSA将“扩充网页集合”转换为无向二分图,而HITS仍然是有向二分图外,其它步骤和流程,SALSA算法与HITS算法完全相同,正因此,SALSA保证了是与用户查询相关的链接分析算法。
2. 链接关系传播
在链接关系传播阶段,SALSA放弃了HITS算法的Hub节点和Authority节点相互增强的假设,转而采纳PageRank的“随机游走模型”。
链接关系传播概念模型
如图6-16所示,假设存在某个浏览者,从某个子集合中随机选择一个节点出发(为方便说明,图中所示为从Hub子集的节点1出发,实际计算往往是从Authority子集出发),如果节点包含多条边,则以相等概率随机选择一条边,从Hub子集跳跃到Authority集合内节点,图中所示为由节点1转移到节点3,之后从Authority子集再次跳回Hub子集,即由节点3跳到节点6。如此不断在两个子集之间转移,形成了SALSA自身的链接关系传播模式。
尽管看上去与PageRank的链接传播模式不同,其实两者是一样的,关键点在于:其从某个节点跳跃到另外一个节点的时候,如果包含多个可供选择的链接,则以等概率随机选择一条路径,即在权值传播过程中,权值是被所有链接平均分配的。而HITS算法不同,HITS算法属于权值广播模式,即将节点本身的权值完全传播给有链接指向的节点,并不根据链接多少进行分配。
SALSA的上述权值传播模型与HITS模型关注重点不同,HITS模型关注的是Hub和Authority之间的节点相互增强关系,而SALSA实际上关注的是Hub-Hub以及Authority-Authority之间的节点关系,而另外一个子集合节点只是充当中转桥梁的作用。所以,上述权值传播模型可以转化为两个相似的子模型,即Hub节点关系图和Authority节点关系图。
Authority节点关系图
图6-17是由6-16的二分图转化成的“Authority节点关系图”,“Hub节点关系图”与此类似,两者转化过程是相似的,我们以“Authority节点关系图”为例来看如何从二分图转化为节点关系图。
图6-17 Authority节点关系图
这里需要注意的是:Authority集合内从某个节点i转移到另外一个节点j的概率,与从节点j转移到节点i的概率是不同的,即非对称的,所以转换后的Authority节点关系图是个有向图,以此来表示其转移概率之间的差异。
对于图6-17这个“Authority节点关系图”来说,图中包含的节点就是二分图中属于Authority子集的节点,关键在于节点之间的边如何建立以及节点之间转移概率如何计算。
节点关系图中边的建立
之所以在“Authority节点图”中,节点3有边指向节点5,是因为在二分图中,由节点3通过Hub子集的节点6中转,可以通达节点5,所以两者之间有边建立。
这里需要注意的是:在二分图中,对于Authority集合内某个节点来说,一定可以通过Hub子集的节点中转后再次返回本身,所以一定包含一条指向自身的有向边。节点1因为只有中转节点2使得其返回Authority子集中自身节点,所以只有指向自身的一条边,和其它节点没有边联系,所以例子中的“Authority节点关系图”由两个连通子图构成,一个只有节点1,另外一个连通子图由剩余几个节点构成。
节点之间的转移概率
至于为何“Authority节点关系图”中,节点3到节点5的转移概率为0.25,是因为前面介绍过,SALSA的权值传播模型遵循“随机游走模型”。在图6-16的二分图中,从节点3转移到节点5的过程中,节点3有两条边可做选择来跳转到Hub子集,所以每条边的选择概率为1/2,可以选择其中一条边到达节点6,同样,从节点6跳回到Authority子集时,节点6也有两条边可选,选中每条边的概率为1/2。所以从节点3出发,经由节点6跳转到节点5的概率为两条边权值的乘积,即为1/4。
对于指向自身的有向边,其权重计算过程是类似的,我们仍然以节点3为例,指向自身的有向边代表从Authority子集中节点3出发,经由Hub子集的节点再次返回节点3的概率。从6-16的二分图可以看出,完成这个过程有两条路径可走,一条是从节点3到节点1返回;另外一条是从节点3经由节点6后返回;每一条路径的概率与上面所述计算方法一样,因为两条路径各自的概率为0.25,所以节点3返回自身的概率为两条路径概率之和,即为0.5。图中其它边的转移概率计算方式也是类此。
建立好“Authority节点关系图”后,即可在图上利用“随机游走模型”来计算每个节点的Authority权值。在实际计算过程中,SALSA将搜索结果排序问题进一步转换为求Authority节点矩阵的主秩问题,矩阵的主秩即为每个节点的相应Authority得分,按照Authority得分由高到低排列,即可得到最终的搜索排序结果。
3. Authority权值计算
图6-18 SALSA节点权值计算公式
经过数学推导,可以得出SALSA与求矩阵主秩等价的Authority权值计算公式。图6-18示意图表明了SALSA算法中某个网页节点的Authority权值是如何计算的。如图右上角公式所示,决定某个网页i的Authority权值涉及到4个因子:
Authority子集中包含的节点总数|A|。其实这个因子对于Authority集合中任意节点来说都是相同的,所以对于最终的根据节点Authority权值进行排序没有影响,只是起到保证权值得分在0到1之间,能够以概率形式表示权值的作用;
网页i所在连通图中包含的节点个数|Aj|。网页所在的连通图包含的节点个数越多,则网页的Authority权值越大;
网页i所在连通图中包含的入链总数|Ej|。网页所在的连通图包含的入链总数越少,则网页的Authority权值越大;
网页i的入链个数|Bi|。节点入链越多,则Authority权值越大,这个因子是唯一一个和节点本身属性相关的。由此可见,SALSA权值计算和节点入链个数成正比。
之前图6-17的“Authority节点关系图”由两个连通子图组成,一个由唯一的节点1构成,另外一个由节点3、5、6三个节点构成,两个连通子图在图6-18中也被分别圈出。
我们以节点3为例,看其对应的四个计算因素取值:
Authority子集共包括4个节点;
节点3所在连通图包含3个节点;
节点3所在连通图共有6个入链;
节点3的入链个数为2;
所以,节点3的Authority权值为:(3/4)*(2/6)=0.25。其它节点权值的计算过程与此类似。SALSA根据节点的Authority权值由高到低排序输出,即为搜索结果。
由上述权值计算公式可以推论出:如果整个Authority子集所有节点形成一个完整的连通图,那么在计算authority权值过程中,对于任意两个节点,4个因子中除了节点入链个数外,其它三个因子总是相同,即只有入链个数起作用,此时,SALSA算法退化为根据节点入链个数决定排序顺序的算法。
从SALSA计算Authority得分过程中可看出,SALSA算法不需像HITS算法一样进行不断迭代计算,所以从计算效率角度看要快于HITS算法。另外,SALSA算法解决了HITS算法的计算结果主题漂移的问题,所以搜索质量也优于HITS算法。SALSA算法是目前效果最好的链接算法之一。
参考文献:
《这就是搜索引擎:核心技术详解》
链接分析算法之:SALSA算法的更多相关文章
- 链接分析算法之:HillTop算法
链接分析算法之:HillTop算法 Hilltop算法是由Krishna Baharat 在2000年左右研究的,于2001年申请专利,但是有很多人以为Hilltop算法是由谷歌研究的.只 ...
- 链接分析算法之:主题敏感PageRank
链接分析算法之:主题敏感PageRank 前面的讨论提到.PageRank忽略了主题相关性,导致结果的相关性和主题性降低,对于不同的用户,甚至有很大的差别.例如,当搜索“苹果”时,一个数码爱好 ...
- 链接分析算法之:HITS算法
链接分析算法之:HITS算法 HITS(HITS(Hyperlink - Induced Topic Search) ) 算法是由康奈尔大学( Cornell University ) 的Jo ...
- Mahout源码分析:并行化FP-Growth算法
FP-Growth是一种常被用来进行关联分析,挖掘频繁项的算法.与Aprior算法相比,FP-Growth算法采用前缀树的形式来表征数据,减少了扫描事务数据库的次数,通过递归地生成条件FP-tree来 ...
- 机器学习--近邻成分分析(NCA)算法 和 度量学习
1.近邻成分分析(NCA)算法 以上内容转载自:http://blog.csdn.net/chlele0105/article/details/13006443 2.度量学习 在机器学习中,对高维数据 ...
- OpenGL编程(五)绘直线以及分析绘直线的算法
这次主要实现在窗口上绘制点.线以及修改其属性,另外还会分析画直线的原理和相关算法. 1.在窗口指定位置画点 glBegin(GL_POINTS); glEnd(); 使用glBegin()和glEnd ...
- 死磕以太坊源码分析之Ethash共识算法
死磕以太坊源码分析之Ethash共识算法 代码分支:https://github.com/ethereum/go-ethereum/tree/v1.9.9 引言 目前以太坊中有两个共识算法的实现:cl ...
- 最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析
最小生成树,Prim算法与Kruskal算法,408方向,思路与实现分析 最小生成树,老生常谈了,生活中也总会有各种各样的问题,在这里,我来带你一起分析一下这个算法的思路与实现的方式吧~~ 在考研中呢 ...
- 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind
最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小 ...
随机推荐
- 关于js封装框架类库之DOM操作模块(一)
在前端开发的过程中,javascript极为重要的一个功能就是对DOM对象的操作,而对其封装就是为了更好地进行DOM操作,提高浏览器的支持效率 现在给出一个案例:页面创建三个div,然后给其添加样式 ...
- Problem B: Excuses, Excuses!
Description Judge Ito is having a problem with people subpoenaed for jury duty giving rather lame ex ...
- AWT和Swing
布局分类 一.流式布局 二.边界布局 三.网格布局 四.卡片布局 五.坐标式布局 随意布置控件位置. 六.混合布局
- 未能从程序集“System.ServiceModel,xxx”中加载类型“System.ServiceModel.Activation.HttpModule”。
一.平台环境 二.问题描述 未能从程序集“System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561 ...
- phplib系统开发经验总结
数据库设计: 数据库的设计一定要在了解整个系统需求的情况下,把数据库设计,及ER图画出来,数据库字典也要及时把握,只有掌握了这些才能下手开始设计界面,后期如果有需要,可以在数据库中添加数据,但要及时更 ...
- A Byte of Python 笔记(4)控制流:if、for、while、break、continue
第6章 控制流 3种控制流语句-- if for while 默认pyhon使用ASCII码来解释程序的,默认不支持中文,需要在程序的第一行或者第二行声明编码.官方参考具体参考以下三种方式:1. ...
- 常见排序算法C++总结
看了总结图,我这里就总结一下 直接插入排序,冒泡排序,快速排序,堆排序和归并排序,使用C++实现 重新画了总结图 直接插入排序 整个序列分为有序区和无序区,取第一个元素作为初始有序区,然后第二个开始, ...
- java.lang.VerifyError: Inconsistent stackmap frames at branch target
-XX:-UseSplitVerifier解决. 附带网址:http://stackoverflow.com/questions/12774672/java-7-inconsistent-stackm ...
- Delphi中的内存对齐 与 Packed关键字
以delphi为例:TTest = recordc1: char;i1: Integer;c2: char;c3: Char;end;这个结构如果用sizeof取其占用的内存大小,是多少呢,是1+4+ ...
- Spring Boot使用Druid和监控配置
Spring Boot默认的数据源是:org.apache.tomcat.jdbc.pool.DataSource 整体步骤: (1) -- Druid简单介绍,具体看官网: (2) ...