pagerank的实现和模拟大量数据情况下的并行分块化

本文详细介绍了PageRank算法的原理,包括网页链接的抽象、转移矩阵、PageRank值的迭代计算。针对实际中遇到的Dead Ends、Spider Traps、稀疏矩阵和大规模数据处理问题,提出了相应的解决方案。通过建立更符合实际的用户浏览模型,解决了随机跳转和Dead Ends问题。在处理稀疏矩阵时,采用了COO存储模式,并进行了分块计算优化,以适应大数据量场景。文章还讨论了并行计算在矩阵向量乘法中的应用,包括SSE、OpenMP和Pthread的实现,展示了在7000数据量下的性能对比。所有代码已开源在GitHub上。
摘要由CSDN通过智能技术生成

所有源码都在github上(https://github.com/seasonyao/pagerank

一、pagerank简介(参考书籍《推荐书籍实践》和csdn若干博客 可以跳到第二部分 需要解决的问题)

 

1.PageRank的核心思想

如果一个网页被很多其他网页链接到的话说明这个网页比较重要,也就是PageRank值会相对较高。如果一个PageRank值很高的网页链接到一个其他的网页,那么被链接到的网页的PageRank值会相应地因此而提高.

 

2.Pagerank是什么

将各网页之间的链接关系按照幂次迭代矩阵A形式表示,那么各个网页的PageRank值将组成一个长度为URLNUM的列向量,该列向量就是矩阵A的特征值为1对应的特征向量。

即 PagerRank就是幂次迭代矩阵A的特征值为1的特征向量的元素值
即 求解PageRank的值就是求解幂次迭代矩阵A的特征值为1对应的特征向量

 

3.简单PageRank计算

首先,我们将Web做如下抽象:1、将每个网页抽象成一个节点;2、如果一个页面A有链接直接链向B,则存在一条有向边从A到B(多个相同链接不重复计算边)。因此,整个Web被抽象为一张有向图。

现在假设世界上只有四张网页:A、B、C、D,简单情况下假设这个图是强连通的(从任一节点出发都可以到达另外任何一个节点):

 

然后需要用一种合适的数据结构表示页面间的连接关系。其实,PageRank算法是基于这样一种背景思想:被用户访问越多的网页更可能质量越高,而用户在浏览网页时主要通过超链接进行页面跳转,因此我们需要通过分析超链接组成的拓扑结构来推算每个网页被访问频率的高低。最简单的,我们可以假设当一个用户停留在某页面时,跳转到页面上每个被链页面的概率是相同的。例如,上图中A页面链向B、C、D,所以一个用户从A跳转到B、C、D的概率各为1/3。设一共有N个网页,则可以组织这样一个N维矩阵:其中i行j列的值表示用户从页面j转到页面i的概率。这样一个矩阵叫做转移矩阵(Transition Matrix)。下面的转移矩阵M对应上图:

然后,设初始时每个页面的rank值为1/N,这里就是1/4。按A-D顺序将页面rank为向量v:

注意,M第一行分别是A、B、C和D转移到页面A的概率,而v的第一列分别是A、B、C和D当前的rank,因此用M的第一行乘以v的第一列,所得结果就是页面A最新rank的合理估计,同理,Mv的结果就分别代表A、B、C、D新rank:

然后用M再乘以这个新的rank向量,又会产生一个更新的rank向量。迭代这个过程,可以证明v最终会收敛,即v约等于Mv,此时计算停止。最终的v就是各个页面的pagerank值。例如上面的向量经过几步迭代后,大约收敛在(1/4, 1/4, 1/5, 1/4),这就是A、B、C、D最后的pagerank。

 

二、需要解决的问题

1.dead ends

实际上,Web并不是强连通(甚至不是联通的)。下面看看PageRank算法如何处理一种叫做Dead Ends的情况。所谓Dead Ends,就是这样一类节点:它们不存在外链。看下面的图:

对应的转移矩阵为:

连续迭代下去,最终所有元素都为0:

 

 

2.spider trap

另外一个问题就是陷阱问题,即有些网页不存在指向其他网页的链接,但存在指向自己的链接。比如下面这个图:

上网者跑到C网页后,就像跳进了陷阱,陷入了漩涡,再也不能从C中出来,将最终导致概率分布值全部转移到C上来,这使得其他网页的概率分布值为0,从而整个网页排名就失去了意义。如果按照上面图对应的转移矩阵为:

不断的迭代下去,就变成了这样:

  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值