CategoryResourceRepost/极客时间专栏/数据分析实战45讲/第二模块:数据分析算法篇/32丨PageRank(上):搞懂Google的PageRank算法.md
louzefeng d3828a7aee mod
2024-07-11 05:50:32 +00:00

112 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<audio id="audio" title="32丨PageRank搞懂Google的PageRank算法" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/ff/ed/ff8827a9931eba791c5591f8dc8227ed.mp3"></audio>
互联网发展到现在搜索引擎已经非常好用基本上输入关键词都能找到匹配的内容质量还不错。但在1998年之前搜索引擎的体验并不好。早期的搜索引擎会遇到下面的两类问题
<li>
返回结果质量不高:搜索结果不考虑网页的质量,而是通过时间顺序进行检索;
</li>
<li>
容易被人钻空子:搜索引擎是基于检索词进行检索的,页面中检索词出现的频次越高,匹配度越高,这样就会出现网页作弊的情况。有些网页为了增加搜索引擎的排名,故意增加某个检索词的频率。
</li>
基于这些缺陷当时Google的创始人拉里·佩奇提出了PageRank算法目的就是要找到优质的网页这样Google的排序结果不仅能找到用户想要的内容而且还会从众多网页中筛选出权重高的呈现给用户。
Google的两位创始人都是斯坦福大学的博士生他们提出的PageRank算法受到了论文影响力因子的评价启发。当一篇论文被引用的次数越多证明这篇论文的影响力越大。正是这个想法解决了当时网页检索质量不高的问题。
## PageRank的简化模型
我们先来看下PageRank是如何计算的。
我假设一共有4个网页A、B、C、D。它们之间的链接信息如图所示
<img src="https://static001.geekbang.org/resource/image/81/36/814d53ff8d73113631482e71b7c53636.png" alt=""><br>
这里有两个概念你需要了解一下。
出链指的是链接出去的链接。入链指的是链接进来的链接。比如图中A有2个入链3个出链。
简单来说,一个网页的影响力=所有入链集合的页面的加权影响力之和,用公式表示为:
<img src="https://static001.geekbang.org/resource/image/70/0c/70104ab44fa1d9d690f99dc328d8af0c.png" alt=""><br>
u为待评估的页面$B_{u}$ 为页面u的入链集合。针对入链集合中的任意页面v它能给u带来的影响力是其自身的影响力PR(v)除以v页面的出链数量即页面v把影响力PR(v)平均分配给了它的出链这样统计所有能给u带来链接的页面v得到的总和就是网页u的影响力即为PR(u)。
所以你能看到,出链会给被链接的页面赋予影响力,当我们统计了一个网页链出去的数量,也就是统计了这个网页的跳转概率。
在这个例子中你能看到A有三个出链分别链接到了B、C、D上。那么当用户访问A的时候就有跳转到B、C或者D的可能性跳转概率均为1/3。
B有两个出链链接到了A和D上跳转概率为1/2。
这样我们可以得到A、B、C、D这四个网页的转移矩阵M
<img src="https://static001.geekbang.org/resource/image/20/d4/204b0934f166d6945a90185aa2c95dd4.png" alt=""><br>
我们假设A、B、C、D四个页面的初始影响力都是相同的
<img src="https://static001.geekbang.org/resource/image/a8/b8/a8eb12b5242e082b5d2281300c326bb8.png" alt=""><br>
当进行第一次转移之后,各页面的影响力$w_{1}$变为:
<img src="https://static001.geekbang.org/resource/image/fc/8c/fcbcdd8e96384f855b4f7c842627ff8c.png" alt=""><br>
然后我们再用转移矩阵乘以$w_{1}$得到$w_{2}$结果直到第n次迭代后$w_{n}$影响力不再发生变化,可以收敛到(0.33330.22220.22220.2222也就是对应着A、B、C、D四个页面最终平衡状态下的影响力。
你能看出A页面相比于其他页面来说权重更大也就是PR值更高。而B、C、D页面的PR值相等。
至此我们模拟了一个简化的PageRank的计算过程实际情况会比这个复杂可能会面临两个问题
1.等级泄露Rank Leak如果一个网页没有出链就像是一个黑洞一样吸收了其他网页的影响力而不释放最终会导致其他网页的PR值为0。
<img src="https://static001.geekbang.org/resource/image/77/62/77336108b0233638a35bfd7450438162.png" alt=""><br>
2.等级沉没Rank Sink如果一个网页只有出链没有入链如下图所示计算的过程迭代下来会导致这个网页的PR值为0也就是不存在公式中的V
<img src="https://static001.geekbang.org/resource/image/0d/e6/0d113854fb56116d79efe7f0e0374fe6.png" alt=""><br>
针对等级泄露和等级沉没的情况,我们需要灵活处理。
比如针对等级泄露的情况我们可以把没有出链的节点先从图中去掉等计算完所有节点的PR值之后再加上该节点进行计算。不过这种方法会导致新的等级泄露的节点的产生所以工作量还是很大的。
有没有一种方法,可以同时解决等级泄露和等级沉没这两个问题呢?
## PageRank的随机浏览模型
为了解决简化模型中存在的等级泄露和等级沉没的问题拉里·佩奇提出了PageRank的随机浏览模型。他假设了这样一个场景用户并不都是按照跳转链接的方式来上网还有一种可能是不论当前处于哪个页面都有概率访问到其他任意的页面比如说用户就是要直接输入网址访问其他页面虽然这个概率比较小。
所以他定义了阻尼因子d这个因子代表了用户按照跳转链接来上网的概率通常可以取一个固定值0.85而1-d=0.15则代表了用户不是通过跳转链接的方式来访问网页的,比如直接输入网址。
<img src="https://static001.geekbang.org/resource/image/5f/8f/5f40c980c2f728f12159058ea19a4d8f.png" alt=""><br>
其中N为网页总数这样我们又可以重新迭代网页的权重计算了因为加入了阻尼因子d一定程度上解决了等级泄露和等级沉没的问题。
通过数学定理这里不进行讲解也可以证明最终PageRank随机浏览模型是可以收敛的也就是可以得到一个稳定正常的PR值。
## PageRank在社交影响力评估中的应用
网页之间会形成一个网络,是我们的互联网,论文之间也存在着相互引用的关系,可以说我们所处的环境就是各种网络的集合。
只要是有网络的地方就存在出链和入链就会有PR权重的计算也就可以运用我们今天讲的PageRank算法。
我们可以把PageRank算法延展到社交网络领域中。比如在微博上如果我们想要计算某个人的影响力该怎么做呢
一个人的微博粉丝数并不一定等于他的实际影响力。如果按照PageRank算法还需要看这些粉丝的质量如何。如果有很多明星或者大V关注那么这个人的影响力一定很高。如果粉丝是通过购买僵尸粉得来的那么即使粉丝数再多影响力也不高。
同样,在工作场景中,比如说脉脉这个社交软件,它计算的就是个人在职场的影响力。如果你的工作关系是李开复、江南春这样的名人,那么你的职场影响力一定会很高。反之,如果你是个学生,在职场上被链入的关系比较少的话,职场影响力就会比较低。
同样如果你想要看一个公司的经营能力也可以看这家公司都和哪些公司有合作。如果它合作的都是世界500强企业那么这个公司在行业内一定是领导者如果这个公司的客户都是小客户即使数量比较多业内影响力也不一定大。
除非像淘宝一样,有海量的中小客户,最后大客户也会找上门来寻求合作。所以权重高的节点,往往会有一些权重同样很高的节点在进行合作。
## PageRank给我们带来的启发
PageRank可以说是Google搜索引擎重要的技术之一在1998年帮助Google获得了搜索引擎的领先优势现在PageRank已经比原来复杂很多但它的思想依然能带给我们很多启发。
比如如果你想要自己的媒体影响力有所提高就尽量要混在大V圈中如果想找到高职位的工作就尽量结识公司高层或者认识更多的猎头因为猎头和很多高职位的人员都有链接关系。
同样PageRank也可以帮我们识别链接农场。链接农场指的是网页为了链接而链接填充了一些没有用的内容。这些页面相互链接或者指向了某一个网页从而想要得到更高的权重。
## 总结
今天我给你讲了PageRank的算法原理对简化的PageRank模型进行了模拟。针对简化模型中存在的等级泄露和等级沉没这两个问题PageRank的随机浏览模型引入了阻尼因子d来解决。
同样PageRank有很广的应用领域在许多网络结构中都有应用比如计算一个人的微博影响力等。它也告诉我们在社交网络中链接的质量非常重要。
<img src="https://static001.geekbang.org/resource/image/f9/7d/f936296fed70f27ba23064ec14a7e37d.png" alt=""><br>
学完今天的内容你不妨说说PageRank的算法原理另外在现实生活中除了我在文中举到的几个例子你还能说一些PageRank都有哪些应用场景吗
欢迎在评论区与我分享你的答案,也欢迎点击“请朋友读”,把这篇文章分享给你的朋友或者同事。