Google PageRank演算法解析
該演算法早在十幾年前就谷歌廣泛應用在搜尋引擎上
本文將討論有關此演算法的一些細節
首先附上我對Networked Life - 20 Questions and Answers這本本書引言的翻譯內容,我認為這段用來引入話題再適合不過了
3.2
對於任何搜尋引擎,有兩個主要活動在持續不斷進行
1. 在網頁超連結中爬行以獲得網頁資訊
2. 將此資訊索引為簡明的陳述和索引排序
當你使用谷歌搜尋時,它會觸發一個排名程式,這個程式需要考慮以下兩個主要因素:
1. 每一個網頁上內容的有多麼相關,或叫相關性係數
2. 這個網頁有多重要,或者叫重要性係數
這兩個因素的綜合得分決定了排名。我們把重點關注重要性係數
————————————————————————————————————————————————————————————————————————————
正文
PageRank演算法是基於頁面超連線的。我們假設網路中一共有N個頁面。
迷途節點(Dangling Node)指的是沒有任何向外超連結的網頁節點
作為一個數學模型,我們需要有一個向量可以記錄沒有頁面的重要性係數,我們假設這個向量是pai(一個只有1列N行的向量)
這個向量雖然說無所謂數值大小,只要能排序出區別就行,但是我們還是習慣於將其標準化為和等於1,因為這樣相當於給所有頁面一個分數的總量1
當然,我們還需要一個向量記錄各個頁面中超連結的指向情況,H
很明顯H是一個N*N大小的向量,H(i,j)定義為,頁面i到頁面j有超連結,取值為1 / #out link(該頁面的超連結數量);否自設為0
當分析這個矩陣的時候我們就可以看到,H的N行是第i個頁面的超連結情況,H的列是第j頁面被超連結情況
這個其實是在抽象一個不是非常完美的現實模型,就是我們假設使用者訪問每個頁面時點選該頁面的任意一個超連結的概率都是一樣的,
而這個概率值乘以當前頁面假設的重要性引數就是該頁面分配給其超連結頁面的分數
因此當頁面的連線不再變化時,此模型會收斂於,即每個頁面會有一個固定的重要性分數(根據其獲得的分數)
2、PageRank是一種可以表示為馬爾可夫鏈(Markov chain)的穩態概率分佈
如果認真思考上述的模型會發現一個問題(或者說是bug)
從數學角度看,這個問題是有可能某頁面沒有任何超連結,那麼這個頁面在整個模型(迭代)中不會向外分享任何自己的重要性係數,整個模型會趨於所有頁面的值都為0才能滿足這個模型。就算這個頁面同時沒有被任何頁面引用,那麼這個頁面的重要性將最終保持我們給它的初始值不變,這樣看也是不合理的。
從行為學角度看,如果一個頁面沒有任何超連結,網友會直接放棄衝浪關掉瀏覽器麼?還是說如果這個網頁沒有被任何其他頁面引用,那麼某人就不可能從另一個頁面轉到此頁面?答案很明顯是否定的。
因此,每個頁面除了把所有的瀏覽概率分配給自己有超連結的頁面外,還需要有一定概率給其他的頁面。
這裡需要分開討論
a)首先是迷途節點情況,在這種情況下,我們應該強制要求這種頁面分配自己的重要性分數給其他所有的頁面,而分配量均與分佈
b)對於所有的頁面,應該有一定概率將包括自己沒有超連結指向的所有頁面,當然這個概率分配需要人為地設計
*需要注意上述a、b是相互獨立的就是一定是先進性a再進行b
在解決上述問題後,我們可以就得到一個完整的馬爾可夫鏈模型,而這種訪問行為叫做random walk on graph(圖的隨機行走訪問?)
PageRank模型不是完美的,但是一種複雜度和功能性之間的一種很好的平衡
k表示迭代次數,paiT是pai的轉置,轉置是因為我們關注的是在整個網路中頁面收到的重要性得分量(標準化後體現為比例)
上圖為每次更新新的pai*i的值(i指被指向的頁面i)
另外,經過Google的大量實驗,
是一個合理的取值
3、PageRank演算法解決的不止迷途節點(Dangling Node)問題,而且還解決了最終連線塊(final connected components)問題
最終連線塊的意思是有幾個網頁,他們內部相互有超連結構成圖。但是,這些頁面的超連線沒有一個是這些網頁以外的。
也就是說如果吧這些頁面看成一個整體,那麼他們就像一個巨大的迷途節點,一旦通過超連結進入了這堆頁面就無法通過超連結離開了
解決原理其實和迷途節點一樣,就是新增強制的向外訪問可能性,對應上述b小點