天天看點

Google PageRank 算法

1.Google PageRank 算法

1.1、PageRank(網頁級别)的概念

    網際網路發展早期的搜尋引擎,對web頁面的排序,是根據搜尋的詞組(短語)在頁面中的出現次數(occurence ),并用頁面長度和html标簽的重要性提示等進行權重修訂。連結名氣(link popularity)技術通過其它文檔連結到目前頁面(inbound links)的連結數量來決定目前頁的重要性,這樣可以有效地抵制被人為加工的頁面欺騙搜尋引擎的手法。

          PageRank計算頁面的重要性,對每個鍊入(inbound)賦以不同的權值,連結提供頁面的越重要則此連結入越高。目前頁的重要性,是由其它頁面的重要性決定的。

1.2、PageRank算法1

PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)) 

其中:PR(A):頁面A的網頁級别, 

PR(Ti):頁面Ti的網頁級别,頁面Ti鍊向頁面A, 

C(Ti):頁面Ti鍊出的連結數量,

d:阻尼系數,取值在0-1之間.

由此可見,1)這個算法不以站點排序,頁面網頁級别由一個個獨立的頁面決定;2)頁面的網頁級别由鍊向它的頁面的網頁級别決定,但每個鍊入頁面的貢獻的值是不同的。如果Ti頁面中鍊出越多,它對目前頁面A的貢獻就越小。A的鍊入頁面越多,其網頁級别也越高;3)阻尼系數的使用,減少了其它頁面對目前頁面A的排序貢獻。

由此可見,1)這個算法不以站點排序,頁面網頁級别由一個個獨立的頁面決定;2)頁面的網頁級别由鍊向它的頁面的網頁級别決定,但每個鍊入頁面的貢獻的值是不同的。如果Ti頁面中鍊出越多,它對目前頁面A的貢獻就越小。A的鍊入頁面越多,其網頁級别也越高;3)阻尼系數的使用,減少了其它頁面對目前頁面A的排序貢獻。

1.3、随機沖浪模型

  Lawrence Page 和 Sergey Brin 提出了使用者行為的随機沖浪模型,來解釋上述算法。他們把使用者點選連結的行為,視為一種不關心内容的随機行為。而使用者點選頁面内的連結的機率,完全由頁面上連結數量的多少決定的,這也是上面PR(Ti)/C(Ti)的原因。一個頁面通過随機沖浪到達的機率就是鍊入它的别的頁面上的連結的被點選機率的和。阻尼系數d的引入,是因為使用者不可能無限的點選連結,常常因勞累而随機跳入另一個頁面。d可以視為使用者無限點選下去的機率,(1-d)則就是頁面本身所具有的網頁級别。

1.4、PageRank算法2(對算法1的修訂)

PR(A) = (1-d) / N + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn)) 

其中N是網際網路上所有網頁的數量

由此,所有頁面的網頁級别形成的一個機率分布,所有頁面的網頁級别之和是1。在算法1中,随機沖浪通路某個頁面的機率由網際網路的總頁數決定,在算法2中,網頁級别是一個頁面被随機通路的期望值。

  以下講解,皆基于算法1,主要是計算簡單,因為不用考慮N的值。

由此,所有頁面的網頁級别形成的一個機率分布,所有頁面的網頁級别之和是1。在算法1中,随機沖浪通路某個頁面的機率由網際網路的總頁數決定,在算法2中,網頁級别是一個頁面被随機通路的期望值。

  以下講解,皆基于算法1,主要是計算簡單,因為不用考慮N的值。

1.5、PageRank的特性

  所有頁面的網頁級别之和等于網際網路的總頁數。在網頁數比較少的情況下,網頁級别方程可以解出,而面對網際網路上成億的網頁,再解方程是不可能的。

此處設阻尼系數為0.5,雖然Lawrence Page 和 Sergey Brin在實際将其設為 0.85.

PR(A) = 0.5 + 0.5 PR(C)

PR(B) = 0.5 + 0.5 (PR(A) / 2)

PR(C) = 0.5 + 0.5 (PR(A) / 2 + PR(B))                        

解得:                                    

Google PageRank 算法

PR(A) = 14/13 = 1.07692308

PR(B) = 10/13 = 0.76923077

PR(C) = 15/13 = 1.15384615

有:

PR(A)+PR(B)+PR(C)=3

1.6、疊代計算pagerank

  Google采用一種近似的疊代的方法計算網頁的網頁級别的,也就是先給每個網頁一個初始值,然後利用上面的公式,循環進行有限次運算得到近似的網頁級别。根據Lawrence Page 和 Sergey Brin公開發表的文章,他們實際需要進行100次疊代才能得到整個網際網路的滿意的網頁級别值,這兒的例子隻用了10多次就可以了。在疊代的過程中,每個網頁的網頁級别的和是收斂于整個網絡的頁面數的。是以,每個頁面的平均網頁級别是1,實際上的值在(1-d)和(dN+(1-d))之間。

疊代次數 PR(A) PR(B) PR(C)
1 1 1
1 1 0.75 1.125
2 1.0625 0.765625 1.1484375
3 1.07421875 0.76855469 1.15283203
4 1.07641602 0.76910400 1.15365601
5 1.07682800 0.76920700 1.15381050
6 1.07690525 0.76922631 1.15383947
7 1.07691973 0.76922993 1.15384490
8 1.07692245 0.76923061 1.15384592
9 1.07692296 0.76923074 1.15384611
10 1.07692305 0.76923076 1.15384615
11 1.07692307 0.76923077 1.15384615
12 1.07692308 0.76923077 1.15384615

1.7、Google搜尋引擎的網頁級别的實作

  有三個因素決定的網頁的等級:網頁特定性因素、傳入連結錨的文本、網頁級别。

  網頁特定性因素包括網頁的内容、标題及URL等。

  為提供檢索結果,Google根據網頁特定性因素和傳入連結錨的文本計算出網頁的IR值,這個值被檢索項在頁面中的位置和重要性權重,以決定網頁和檢索請求相關性。IR值和網頁級别聯合标志網頁的基本重要程度,這兩個值的聯合方式有多種,但明顯的是不能相加的。

  由于網頁級别隻對非特定的單個詞的檢索請求影響比較明顯,對于由多個檢索詞構成的檢索請求,内容相關性的分級标準的影響更大。

1.8、用Google工具條顯示目前頁面的網頁級别

  Google工具條是Google公司開發的IE插件,需要從Google下載下傳并安裝。注意,顯示網頁級别的功能是其進階功能,這時會自動收集使用者的資訊,并會自動更新工具條。

  這個工具條顯示的網頁級别分為0-10共11級,如果根據理論用(Nd+(1-d))測算,假定d=0.85,則推測實際網級别的對數即為顯示的級别,且對數的基數在6-7之間。

Google的目錄服務可以顯示網站的級别

  此處級别分為7級。有人對兩種級别進行了比較。 

Google PageRank 算法

1.9、傳入連結對計算頁面級别的影響

  傳入連結總是能增加目前頁面的級别,尤其目前頁與其下級頁面構成回路時,這種貢獻更大。如右圖例,設ABCD各 頁初始級别為1,阻尼系數為0.5,PR(X)/C(X)=10。則易算出                         

PR(A) = 19/3 = 6.33                                       

PR(B) = 11/3 = 3.67                                         

Google PageRank 算法

PR(C) = 7/3 = 2.33

PR(D) = 5/3 = 1.67

如果A不在回路上,則隻能得0.5*10=5的收益。

  阻尼系數越大,頁面級别的收益越大,且整個回路上都能收到更大的收益(即傳入連結收益更能平均地分布到各個回路頁面上。針對上例,将阻尼系數改為0.75,則有

PR(A) = 419/35 = 11.97

PR(B) = 323/35 = 9.23

PR(C) = 251/35 = 7.17

PR(D) = 197/35 = 5.63

除回路上各個頁面的級别值明顯增大外,PR(A)/PR(D)的值敢明顯減少了。

  傳入連結對整個回路上所有頁面的級别值的增加之和,可以由下面這個公式得出.

(d / (1-d)) × (PR(X) / C(X))

這個公式,可以由 簡單推導出。

1.10、對外連結對計算頁面級别的影響

  增加對外連結不會影響整個web的總級别,但一個站點失去的級别值等于鍊到的站點的增加值之和。對于兩個封閉的站點,從一個站點鍊上另一個站點時,增加的和減少的都是(d(/(1-d) × (PR(X) / C(X)).如果這兩個站點互相連結,則此值減少。用随機沖浪模型可以解釋這種現象,就是對外連結的增加,減少了使用者通路站内頁面的機率。舉例如圖,設阻尼系數 為0.75,則 

Google PageRank 算法

PR(A) = 0.25 + 0.75 PR(B)

PR(B) = 0.25 + 0.375 PR(A)

PR(C) = 0.25 + 0.75 PR(D) + 0.375 PR(A)

PR(D) = 0.25 + 0.75 PR(C) 

得:

PR(A) = 14/23

PR(B) = 11/23 

PR(C) = 35/23

PR(D) = 32/23 

PR(A)+PR(B)=25/23

PR(C)+PR(D)=67/23

PR(A)+PR(B)+PR(C)+PR(D)=92/23=4

  Page和Brin将這樣的連結稱為懸擺鍊,它鍊到頁面沒有對外連結。懸擺鍊對頁 面的級别計算産生負面影響。如例,阻尼系數為0.75.   

Google PageRank 算法

PR(A) = 0.25 + 0.75 PR(B)                                          

PR(B) = 0.25 + 0.375 PR(A)

PR(C) = 0.25 + 0.375 PR(A) 

得:

PR(A) = 14/23

PR(B) = 11/23

PR(C) = 11/23 

PR(A)+PR(B)+PR(C)=36/23<3

  據Page和Brin,Google在索引頁面時,懸擺鍊的量很大,

主要是由于限制robot.txt的限制及索引了一些沒有鍊出的檔案類

型如PDF等。為消除這種負面影響,google在計算級别時,将此

類連結從資料庫裡去掉,在計算完畢後,再單獨計算懸擺鍊所鍊

到頁面。由此可見,PDF類的檔案還是可以放心地在網上釋出的。

Google PageRank 算法

1.11、頁面數量的影響

  先看例子。阻尼系數為0.75,PR(X)/C(X)=10,則

PR(A) = 0.25 + 0.75 (10 + PR(B) + PR(C))

PR(B) = PR(C) = 0.25 + 0.75 (PR(A) / 2) 

得:                 

Google PageRank 算法

PR(A) = 260/14

PR(B) = 101/14

PR(C) = 101/14 

PR(A)+PR(B)+PR(C)=33;

增加頁面D;

PR(A) = 0.25 + 0.75 (10 + PR(B) + PR(C) + PR(D))

PR(B) = PR(C) = PR(D) = 0.25 + 0.75 (PR(A) / 3) 

PR(A) = 266/14

PR(B) = 70/14

PR(C) = 70/14

PR(D) = 70/14 

PR(A)+PR(B)+PR(C)+PR(D)=34

增加頁面後,所有頁面的級别值之和增加了1,A頁略有增加,而B、C則用大幅下降。

  再看右邊的例子,假定同上。    

Google PageRank 算法

PR(A) = 0.25 + 0.75 (10 + PR(C))

PR(B) = 0.25 + 0.75 × PR(A)

PR(C) = 0.25 + 0.75 × PR(B) 

得:

PR(A) = 517/37 = 13.97

PR(B) = 397/37 = 10.73

PR(C) = 307/37 = 8.30

增加頁面D:

PR(A) = 0.25 + 0.75 (10 + PR(D))

PR(B) = 0.25 + 0.75 × PR(A)

PR(C) = 0.25 + 0.75 × PR(B)

PR(D) = 0.25 + 0.75 × PR(C) 

得:

PR(A) = 419/35 = 11.97

PR(B) = 323/35 = 9.23

PR(C) = 251/35 = 7.17

PR(D) = 197/35 = 5.63

增加頁面後,所有頁面級别增加了1,但每個頁面的級别值減少了,這是由于新加頁面分享了傳入連結代來的值。從這個結果看,增加頁面減少了已有頁面的級别值,露了google算法青睐小站點的特點。當然,大站點也會因内容豐富而吸引其它 站點的對外連結而得以級别值增加。

1.12、針對搜尋引擎優化的級别分布

  先看兩個列子,阻尼系數為0.5,PR(X)/C(X)=10;

BC之間無連結時:

Google PageRank 算法
Google PageRank 算法

PR(A) = 0.5 + 0.5 (10 + PR(B) + PR (C))

PR(B) = 0.5 + 0.5 (PR(A) / 2)

PR(C) = 0.5 + 0.5 (PR(A) / 2) 

PR(A) = 8

PR(B) = 2.5

PR(C) = 2.5

BC之間互相連結時:

PR(A) = 0.5 + 0.5 (10 + PR(B) / 2 + PR(C) / 2)

PR(B) = 0.5 + 0.5 (PR(A) / 2 + PR(C) / 2)

PR(C) = 0.5 + 0.5 (PR(A) / 2 + PR(B) / 2) 

得:

PR(A) = 7

PR(B) = 3

PR(C) = 3

當BC 間互鍊時,雖然減少了A的級别,但BC都增加了。這符合優化站點所有頁面而非隻首頁的優化思路,因為隻有每個頁面的級别都提高了,當有檢索詞命中這些頁面時,它們才能排在前面。這種優化的方法也很明顯了,就是盡可能地在所有頁面間平均分布傳入連結的貢獻,各低級頁面要增加互鍊。

隻要不影響易用性,盡可能地将所有對外連結集中在一個或幾個低級頁面中,可以有效地降低對外連結對頁面級别計算的負面影響。看列子:阻尼系數為0.5,PR(X)/C(X)=10;

BCD都有對外連結時:

Google PageRank 算法
Google PageRank 算法

PR(A) = 0.5 + 0.5 (PR(B) / 2 + PR(C) / 2 + PR(D) / 2)

PR(B) = PR(C) = PR(D) = 0.5 + 0.5 (PR(A) / 3) 

得:

PR(A) = 1

PR(B) = 2/3

PR(C) = 2/3

PR(D) = 2/3 

對外連結集中于D時:

PR(A) = 0.5 + 0.5 (PR(B) + PR(C) + PR(D) / 4)

PR(B) = PR(C) = PR(D) = 0.5 + 0.5 (PR(A) / 3) 

得:

PR(A) = 17/13

PR(B) = 28/39

PR(C) = 28/39

PR(D) = 28/39

從結果看,對外連結集中後,ABCD各頁面的級别都上升了。

1.13、影響頁面級别的其它因素

  在Lawrence Page和Sergey Brin關于PageRank的論文發表以後,除了web的連結結構以外,還有沒有别的因素被加到PageRank的算法當中曾經有過廣泛地讨論。 Lawrence Page本人在PageRank的專利說明中曾指出以下潛在的影響因素:連結的能見度,連結在文檔中的位置,web頁面間的距離,對外連結頁面的重要性,頁面的不過時。這此因素的增加,可以更好用随機沖浪模型模拟人類利用web的行為。

  不管上述附加因素有沒有在實際計算PageRank時使用,如何實作這些附加因素仍要讨論。

  首先算法公式需要改進.

PR(A) = (1-d) + d (PR(T1)×L(T1,A) + ... + PR(Tn)×L(Tn,A))

此處,L(T1,A)是傳入連結的評價值,由幾個因素構成,隻需要在疊代前計算一次,減少了對資料庫的查詢次數,雖然每次疊代的查詢結果會有不同。

Lawrence Page在PageRank的專利說明中指對外連結接評價的兩個因素是連結的可見性和在文檔中的位置。連結評價取代了PR(A)/C(A),指出了對一特定的頁面的連結,每個連結被點選的機率是不同的。

  此處,每一連結有兩個屬性值,X表示可見度,如果沒有被重點強調(如粗體、斜體等) 為1否則為2,Y表連結在文檔中的位置,如果在文檔下半部為1否則為3。則有     

Google PageRank 算法

X(A,B) × Y(A,B) = 1 × 3 = 3

X(A,C) × Y(A,C) = 1 × 1 = 1 

X(B,A) × Y(B,A) = 2 × 3 = 6

X(B,C) × Y(B,C) = 2 × 1 = 2

X(C,A) × Y(C,A) = 2 × 3 = 6

X(C,B) × Y(C,B) = 2 × 1 = 2 

易得:

Z(A) = X(A,B) × Y(A,B) + X(A,C) × Y(A,C) = 4

Z(B) = X(B,A) × Y(B,A) + X(B,C) × Y(B,C) = 8

Z(C) = X(C,A) × Y(C,A) + X(C,B) × Y(C,B) = 8 

連結評價公式為:(頁面T1指向T2)

L(T1,T2) = X(T1,T2) × Y(T1,T2) / Z(T1) 

有:

L(A,B) = 0.75

L(A,C) = 0.25

L(B,A) = 0.75

L(B,C) = 0.25

L(C,A) = 0.75

L(C,B) = 0.25 

最後利用改進的公式計算頁面級别:

PR(A) = 0.5 + 0.5 (0.75 PR(B) + 0.75 PR(C))

PR(B) = 0.5 + 0.5 (0.75 PR(A) + 0.25 PR(C))

PR(C) = 0.5 + 0.5 (0.25 PR(A) + 0.25 PR(B)) 

得:

PR(A) = 819/693

PR(B) = 721/693

PR(C) = 539/693

為了防止人為的級别優化,頁面的距離被用來影響連結的評價。站内連結的權重小于站間連結的權重。頁面的距離可能由頁面是否在一個站内、一個伺服器及實體距離等決定。

  另一個影響頁面重要性的能參數,是頁面的不過時性(up-to-dateness),意指有越多的建立的頁面指向某一個頁面,則這個頁面内容過時的可能性越小。

  為增加這些因素的影響,要對公式進行修訂如下:

L(Ti,A) = K(Ti,A) × K1(Ti) × ... × Km(Ti)

其中,K(Ti,A)表示連結可見度及位置的權重,Kn(Ti)是第n個因素對頁面Ti的影響。看列子:此處,從C引出的連結的重要性是其它 的4倍。 

Google PageRank 算法

K(A) = 0.5

K(B) = 0.5

K(C) = 2 

計算級别值:

PR(A) = 0.5 + 0.5 × 2 PR(C)

PR(B) = 0.5 + 0.5 × 0.5 × 0.5 PR(A)

PR(C) = 0.5 + 0.5 (0.5 PR(B) + 0.5 × 0.5 PR(A)) 

得:

PR(A) = 4/3

PR(B) = 2/3

PR(C) = 5/6

此時,所有頁面的級别之和不等于頁面數量。

1.14 PageRank 算法的改進

 1. 主題敏感的PageRank(Topic-Sedsitive PageRank)

在這個算法中,我們需要預先計算離線時頁面的重要性的分數;然後,我們為每一個頁面計算多種重要性分數,即關于不同的主題來計算這個頁面的重要性分數。在查詢的時候,把這些重要性分數與根據被查詢的主題的重要性分數綜合在一起,就形成一個複合的PageRank分數。采用這種方法能形成更加精确的排序值,而不是原始普通的排序值。

2. 二次方程推斷法(Quadratic Extra polation)

這是一個可以加快PageRank的運算速度的方法。它能通過周期性的削減目前的矩陣乘幂疊代的非主要特征向量的方法,大大加快其收斂速度。使用這種方法計算PageRank值時,當計算一個包含8000萬個節點的網絡圖時,與采用原來的PageRank方法相比,計算速度可以提高20%-300%。

 3. 分塊矩陣排序算法(BlockRank Algo rithm)

該算法是PageRank算法的另一個加速算法,它首先把網絡根據領域劃分成不同的區域(塊),為每個區域計算它們的局部PageRank值;估計它們的相對的重要性(每個區域的BlockRank值);用這個區域的Block-Rank.值來給每個區域的Block-Rank賦予一定的權重。然後再把這些權重的局部

的PageRank值近似地看作全局的PageRank向量,把這個向量作為标準的PageRank算法的開始向量。這種方法可以減少計算的疊代次數,可以把更多的時間用于收斂速度慢的區域的計算,提高了局部PageRank計算的有效性。BlockRank算法可以采取并行或分布的形式來進行計算,節約運算的時間。此外,局部的PageRank計算結果在以後的計算中可以被再利用。

繼續閱讀