page-rank计算问题
2015-09-11 22:55
330 查看
大家上网最常用的一个工具是谷歌搜索,比如搜索“笑话”,会返回与笑话相关的网页链接结果,供你选择。问题来了,搜索是如何进行的,机器怎么去尽力找到跟你搜索信息相关的网页的呢?
1. 数量假设:在Web图模型中,如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要。
2. 质量假设:指向页面A的入链质量不同,质量高的页面会通过链接向其他页面传递更多的权重。所以越是质量高的页面指向页面A,则页面A越重要。
假设有四个网页如下,箭头表示外链:
构造链接概率矩阵S=⎡⎣⎢⎢⎢⎢01/31/31/3001/21/200010100⎤⎦⎥⎥⎥⎥S=\begin{bmatrix} 0 &0 &0 &0 \\ 1/3 &0 &0 &1 \\ 1/3 &1/2 &0 &0 \\ 1/3 &1/2 &1 &0 \end{bmatrix}
第一列分别表示网页与自身的链接概率为0,与网页2的链接概率为1/3,与网页3的链接概率为1/3,与网页4的链接概率为1/3。
Page-rank向量由q=S∗qq=S*q来确定。(求解特征值为1对应的特向)
通过qnext=S∗qcurrentq^{next}=S*q^{current}迭代计算来找到qq,当两次qq结果的变化很小时,终止迭代。q0q_0取为全1或者1/N1/N。
实际应用中,会对qq修正,因此在迭代过程中,qq更新公式为qnext=α∗S∗qcurrent+e∗1−αNq^{next}=\alpha*S*q^{current}+e*\frac{1-\alpha}{N},ee是大小为N*1的列向量。
由于web 4这个Dead End的存在,会导致最后q收敛时的rank值为0
处理方法:去掉Dead End点及相应的边,直到没有Dead End点。计算剩余点的rank向量,由已知的点反推Dead End点的链接概率。
去掉4及相应边后,3也变成了Dead End,也去掉3及相应边。
先反推3:rank3=rank1∗1/3rank_3 = rank_1*1/3
再反推4:rank4=rank1∗1/3+rank2∗1+rank3∗1rank_4 = rank_1*1/3+rank_2*1+rank_3*1
2. Spider Traps及平滑处理
对于像图中web 4的节点,只有链向自己的外链,会导致多数节点的rank值接近0。系数矩阵也会导致rank大多数接近0,而4这样的节点更是加剧了这种情况。为了避免这种情况,对计算加平滑处理,就是上面提到的对q的修正。
其qq迭代公式如下:
qnext=α∗S∗qcurrent+s∗1−α|s|q^{next}=\alpha*S*q^{current}+s*\frac{1-\alpha}{|s|}
其中ss为topic向量,属于某类则对应位置为1,不属于某类则对应位置为0。|s||s|为ss中1的个数。
通过topic使得某类的网页在用户搜索相应类内容时,排序更靠前。
Page-Rank
谷歌公司对网页进行重要性评估,并且基于此计算网页等级并给出搜索结果。网页重要性评估
Google根据链接来衡量网页重要性,并做了两个重要假设:1. 数量假设:在Web图模型中,如果一个页面节点接收到的其他网页指向的入链数量越多,那么这个页面越重要。
2. 质量假设:指向页面A的入链质量不同,质量高的页面会通过链接向其他页面传递更多的权重。所以越是质量高的页面指向页面A,则页面A越重要。
假设有四个网页如下,箭头表示外链:
构造链接概率矩阵S=⎡⎣⎢⎢⎢⎢01/31/31/3001/21/200010100⎤⎦⎥⎥⎥⎥S=\begin{bmatrix} 0 &0 &0 &0 \\ 1/3 &0 &0 &1 \\ 1/3 &1/2 &0 &0 \\ 1/3 &1/2 &1 &0 \end{bmatrix}
第一列分别表示网页与自身的链接概率为0,与网页2的链接概率为1/3,与网页3的链接概率为1/3,与网页4的链接概率为1/3。
Rank过程
如何给出网络上页面的等级向量呢?Page-rank向量由q=S∗qq=S*q来确定。(求解特征值为1对应的特向)
通过qnext=S∗qcurrentq^{next}=S*q^{current}迭代计算来找到qq,当两次qq结果的变化很小时,终止迭代。q0q_0取为全1或者1/N1/N。
实际应用中,会对qq修正,因此在迭代过程中,qq更新公式为qnext=α∗S∗qcurrent+e∗1−αNq^{next}=\alpha*S*q^{current}+e*\frac{1-\alpha}{N},ee是大小为N*1的列向量。
特殊情况处理
1. Dead End 不存在外链的节点由于web 4这个Dead End的存在,会导致最后q收敛时的rank值为0
处理方法:去掉Dead End点及相应的边,直到没有Dead End点。计算剩余点的rank向量,由已知的点反推Dead End点的链接概率。
去掉4及相应边后,3也变成了Dead End,也去掉3及相应边。
先反推3:rank3=rank1∗1/3rank_3 = rank_1*1/3
再反推4:rank4=rank1∗1/3+rank2∗1+rank3∗1rank_4 = rank_1*1/3+rank_2*1+rank_3*1
2. Spider Traps及平滑处理
对于像图中web 4的节点,只有链向自己的外链,会导致多数节点的rank值接近0。系数矩阵也会导致rank大多数接近0,而4这样的节点更是加剧了这种情况。为了避免这种情况,对计算加平滑处理,就是上面提到的对q的修正。
Topic-Sensitive Page-Rank
一股脑地对所有网页不加区分的计算等级排序,是不符合正常的情况的,我们更希望对网上信息有个大体分类,每个类下对网页等级排序。这样搜索起来更有针对性。其qq迭代公式如下:
qnext=α∗S∗qcurrent+s∗1−α|s|q^{next}=\alpha*S*q^{current}+s*\frac{1-\alpha}{|s|}
其中ss为topic向量,属于某类则对应位置为1,不属于某类则对应位置为0。|s||s|为ss中1的个数。
通过topic使得某类的网页在用户搜索相应类内容时,排序更靠前。
小结
page-rank的基本过程如上所述,实际应用肯定很复杂,同时也要分布处理,这里没有涉及。相关文章推荐
- DICOM:DICOM中文版开源书籍协同编辑之“Github Pull Requests”
- LNMP系列——Mysql生产环境配置
- OC直接打印数组,数组元素显示中文的问题
- java子父类的加载顺序
- PHP中一些有用的函数
- JavaScript权威设计--JavaScript表达式与运算符,语句(简要学习笔记六)
- 为什么使用boost编程
- LNMP系列——常用的linux命令
- ios设计模式——生成器模式
- android应用启动显示白色背景的解决方法
- Testlink中集成Mantis管理系统
- Android之Service通信-(2)
- asp.net mvc 页面传值的方法总结
- Codeforces Round #240 (Div. 1) B. Mashmokh and ACM DP
- 第98讲:使用SBT开发时动手解决rt.jar中CharSequence is broken等问题学习笔记
- iOS如何显示 UITableViewCell detailTextLabel?
- SOA工程部署时报错:MDS-00054 (composite.xml does not exist)
- 3.Longest Substring Without Repeating Characters
- 黑马程序员——ios基础---练习:4
- 利用forms元素提交表单