PageRank 演算法
目錄:
- 基本思想
- 演算法原理
- PR值計算方法
1.基本思想
PageRank,即網頁排名,是Google用來標識網頁的等級或重要性的一種演算法。
最早的搜尋引擎採用的是 分類目錄 的方法,即通過人工對網頁進行分類並整理出高質量的網站。
隨著網頁數目的急劇增大,這種方法顯然無法實施。於是,搜尋引擎進入了 文字檢索 的時代,即通過計算使用者的查詢語句與網頁內容的相關程度來返回搜尋結果。比如通過向量空間模型將輸入的檢索詞和檔案轉換成向量,通過計算兩個向量的夾角偏差程度(一般採用餘弦距離)來衡量相關性。這種方法雖然能處理大量網頁,但是效果卻並不是很好,比如存在一些作弊行為:某些網頁重複倒騰某些關鍵詞從而使自己的搜尋排名靠前。
於是,谷歌的兩位創始人,當時還是美國斯坦福大學研究生的佩奇 (Larry Page) 和布林 (Sergey Brin) 開始了對網頁排序問題的研究。他們受學術界對學術論文重要性的評估方法(論文引用次數)的啟發,提出了PageRank演算法。
PageRank的核心思想其實十分簡單,概括如下:
- 如果一個網頁被很多其它網頁連結到,說明這個網頁很重要,它的PageRank值也會相應較高;
- 如果一個PageRank值很高的網頁連結到另外某個網頁,那麼那個網頁的PageRank值也會相應地提高。
2.演算法原理
2.1 普遍情況
首先,PageRank演算法預先給每個網頁一個PR值(PR值指代PageRank值),PR值在物理意義上為一個網頁被訪問的概率,所以一般是1/N,其中N為網頁總數。
另外,所有網頁的PR值的和一般為1。(如果實在不為1也不是不行,最後算出來的不同網頁之間PR值的大小關係仍然是正確的,只是這個數值不能直接地反映概率罷了。)
接著,運用下面的演算法不斷迭代計算,直至達到平穩分佈為止。
迭代演算法到底是如何進行的呢?下面我們給出一個具體的例子:
網際網路中的眾多網頁可以看成一個有向圖,箭頭的指向即為連結的鏈入,如下圖所示有4個網頁:
根據上圖,我們可以得到A的PR值為:
但是從圖中可以看出,除了C只有A這一個出口外,B和D都不止一個出口,所以上面的那個公式並不是非常正確。舉個實際的例子,一個使用者正在瀏覽網頁B,那麼接下來他去往網頁A和網頁D的概率在統計學上應該是一樣的,所以A的PR值應該表示為:
2.2 特殊情況(沒有出鏈)
網路中不乏一些沒有出鏈的網頁,如下圖:
其中,網頁C沒有出鏈,也就是說網頁C對其他網頁沒有PR值的貢獻,我們不喜歡這種“自私”的網頁(其實是為了滿足 Markov 鏈的收斂性),於是設定其對所有網頁(包括它自己)都有出鏈,則此圖中A的PR值表示為:
2.3 特殊情況(出鏈迴圈圈)
網路中還存在這樣的網頁:只對自己有出鏈,或者幾個網頁的出鍊形成一個迴圈圈。那麼在不斷迭代的過程中,這一個或幾個網頁的PR值將只增不減,這顯然是不合理的。
如下圖中的C就只對自己有出鏈:
那麼如何解決這個問題呢?我們假設某人正在瀏覽網頁C,顯然他不會一直停留在網頁C,他可能會隨機地輸入一個網址從而去往另一個網頁,並且其跳轉到每個網頁的概率是一樣的。
於是此圖中A的PR值表示為:
綜上,一般情況下,一個網頁的PR值計算公式如下:
其中,Mpi是所有對pi網頁有出鏈的網頁集合,L(pj)是網頁pj的出鏈數目,N是網頁總數,α一般取0.85。
根據上面的公式,我們就可以計算出每個網頁的PR值,在不斷迭代並趨於平穩的時候,即為最終結果。