1. 程式人生 > >對PageRank演算法的理解

對PageRank演算法的理解

顧名思義,PageRank其實就是網頁排名的意思,當我們現在在一個搜尋引擎搜尋一個關鍵詞的時候,搜尋引擎如何將我們最想得到的資訊放在前面呢,這裡就涉及到了網頁的排名,在我們日常的搜尋中,除了商業上的競價排名,總的來說,一個特定的網頁搜尋取決於網頁的質量資訊和這個查詢與每個網頁的相關性資訊。在網際網路上,一個網頁被很多其他網頁所連結,那麼就說明這個網頁受到普遍的承認和信賴,那麼這個網頁的排名就應該高,這個網頁的權重就應該大,這個就是PageRank的核心思想,當然了實際上每個大的搜尋引擎所用的PageRank演算法遠比這個要複雜得多。以前有幸上過陳關榮教授的一門課程”Complex Network”,裡面介紹過一種網路叫做無尺度網路(Scale-free Network),其實我們網際網路就是一種無尺度網路,無尺度網路的特徵就是整個網路中大部分的節點和少數幾個節點相連線,而很少數的節點和很多的節點相連線,所以說在整個無尺度網路中,大的節點只有少數一部分,而多數都是小的節點。所以在我們的PageRank中,排名高的網頁就相當於是大的節點,被很多的網頁所指向,所以說被指向越高的網頁,就表示更重要,權重越高,排名也應該靠前;還有就是被排名高的網頁權重高的網頁所指向的網頁,排名也應該靠前,這個其實也很好理解,就比如說你擁有了某位知名教授的推薦信,那麼對你找工作申請學校也會有很大的幫助。所以說一個網頁的排名應該是參考所有指向它的網頁的權重之和的,我們來舉一個栗子:
網頁排名


這個栗子中,Y網頁被X1、X2、X3、X4這四個網頁所指向,所以PageRank(Y) = 0.01 + 0.03 + 0.05 + 0.12 = 0.21。所以在這個網頁排名中也有用到其他網頁的排名,其他網頁的排名又源自於指向它的網頁的排名,這不就是一個悖論了嗎。後來,有一個叫布林的人提出了一種解決方案,他把這個問題轉換成了一個矩陣的問題,並用迭代的方法解決了此問題。我們再來舉一個栗子:
轉移圖
我們現在假設有A、B、C、D這四個網頁,A網頁可以訪問B、C、D三個網站,我們假設A網站訪問B、C、D的概率是一樣的都是1/3,不能訪問自己,所以網站A的轉移概率是(0,1/3,1/3,1/3),所以同理,我們可以得到這四個網站的轉移概率矩陣:

T = [ 0 1 /
2 0 0 1 / 3 0 1 / 2 1 1 / 3 0 0 0 1 / 3 1 / 2 1 / 2 0 ]

我們把這個轉移矩陣定義成T,在這個矩陣中T[i][j]表示從i網頁跳轉到j網頁的概率,這個矩陣的特點就是每一列的和都是1,因為每一列就表示一個網站的轉移向量。我們假定A、B、C、D四個網頁初始的時候訪問的概率都是相等的1/4,所以我們可以得到:

V 1 = T V 0 = [ 0 1 / 2 0 0 1 / 3 0 1 / 2 1 1 / 3 0 0 0 1 / 3 1 / 2 1 / 2 0 ] [ 1 / 4 1 / 4 1 / 4 1 / 4 ] = [ 1 / 8 11 / 24 1 / 12 1 / 3 ]

所以經過一次跳轉之後,訪問到各個網站的概率如上矩陣所示,同理,我們可以繼續的迭代下去n次,可以得到:

V n = T V n 1 = T n V 0
其實n趨近於無窮大的時候,Vn要最終收斂,概率轉移矩陣要T要滿足下面三個條件:

  1. T為隨機矩陣:T矩陣中的每一個元素不能小於0且每一列向量的元素和為1.
  2. T是不可約的:T矩陣中每一個點都能夠到達另一個點,在資料結構圖中,就是強連通的意思,不能夠在矩陣中出現一些特殊的情況,比如說有一列向量都是0,也就是說有一個節點沒有指向任何一個節點,也沒有被任何一個節點所指向;還有就是在對角線上出現1,就表示這個網頁只指向了自己,我們稱之為陷阱。
  3. T是非週期的:若T是週期性的,那麼就表示馬爾科夫鏈沒有隨機性,所以T應該是非週期的。

所以最終V矩陣收斂的時候,最終得到的向量就可以表示網頁的排名了。我們來看看計算的過程:
假定有向量B:

B = ( b 1 , b 2 , . . . , b N ) T
表示第1個到第N個網頁的排名。