1.Google PageRank 算法
1.1、PageRank(網(wǎng)頁級別)的概念
互聯(lián)網(wǎng)發(fā)展早期的搜索引擎,對web頁面的排序,是根據(jù)搜索的詞組(短語)在頁面中的出現(xiàn)次數(shù)(occurence ),并用頁面長度和html標簽的重要性提示等進行權重修訂。鏈接名氣(link popularity)技術通過其它文檔鏈接到當前頁面(inbound links)的鏈接數(shù)量來決定當前頁的重要性,這樣可以有效地抵制被人為加工的頁面欺騙搜索引擎的手法。
PageRank計算頁面的重要性,對每個鏈入(inbound)賦以不同的權值,鏈接提供頁面的越重要則此鏈接入越高。當前頁的重要性,是由其它頁面的重要性決定的。
1.2、PageRank算法1
PR(A) = (1-d) + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))
其中:PR(A):頁面A的網(wǎng)頁級別,
PR(Ti):頁面Ti的網(wǎng)頁級別,頁面Ti鏈向頁面A,
C(Ti):頁面Ti鏈出的鏈接數(shù)量,
d:阻尼系數(shù),取值在0-1之間.
由此可見,1)這個算法不以站點排序,頁面網(wǎng)頁級別由一個個獨立的頁面決定;2)頁面的網(wǎng)頁級別由鏈向它的頁面的網(wǎng)頁級別決定,但每個鏈入頁面的貢獻的值是不同的。如果Ti頁面中鏈出越多,它對當前頁面A的貢獻就越小。A的鏈入頁面越多,其網(wǎng)頁級別也越高;3)阻尼系數(shù)的使用,減少了其它頁面對當前頁面A的排序貢獻。
1.3、隨機沖浪模型
Lawrence Page 和 Sergey Brin 提出了用戶行為的隨機沖浪模型,來解釋上述算法。他們把用戶點擊鏈接的行為,視為一種不關心內(nèi)容的隨機行為。而用戶點擊頁面內(nèi)的鏈接的概率,完全由頁面上鏈接數(shù)量的多少決定的,這也是上面PR(Ti)/C(Ti)的原因。一個頁面通過隨機沖浪到達的概率就是鏈入它的別的頁面上的鏈接的被點擊概率的和。阻尼系數(shù)d的引入,是因為用戶不可能無限的點擊鏈接,常常因勞累而隨機跳入另一個頁面。d可以視為用戶無限點擊下去的概率,(1-d)則就是頁面本身所具有的網(wǎng)頁級別。
1.4、PageRank算法2(對算法1的修訂)
PR(A) = (1-d) / N + d (PR(T1)/C(T1) + ... + PR(Tn)/C(Tn))
其中N是互聯(lián)網(wǎng)上所有網(wǎng)頁的數(shù)量
由此,所有頁面的網(wǎng)頁級別形成的一個概率分布,所有頁面的網(wǎng)頁級別之和是1。在算法1中,隨機沖浪訪問某個頁面的概率由互聯(lián)網(wǎng)的總頁數(shù)決定,在算法2中,網(wǎng)頁級別是一個頁面被隨機訪問的期望值。
以下講解,皆基于算法1,主要是計算簡單,因為不用考慮N的值。
以下講解,皆基于算法1,主要是計算簡單,因為不用考慮N的值。
1.5、PageRank的特性
所有頁面的網(wǎng)頁級別之和等于互聯(lián)網(wǎng)的總頁數(shù)。在網(wǎng)頁數(shù)比較少的情況下,網(wǎng)頁級別方程可以解出,而面對互聯(lián)網(wǎng)上成億的網(wǎng)頁,再解方程是不可能的。
此處設阻尼系數(shù)為0.5,雖然Lawrence Page 和 Sergey Brin在實際將其設為
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))
解得:
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采用一種近似的迭代的方法計算網(wǎng)頁的網(wǎng)頁級別的,也就是先給每個網(wǎng)頁一個初始值,然后利用上面的公式,循環(huán)進行有限次運算得到近似的網(wǎng)頁級別。根據(jù)Lawrence Page 和 Sergey Brin公開發(fā)表的文章,他們實際需要進行100次迭代才能得到整個互聯(lián)網(wǎng)的滿意的網(wǎng)頁級別值,這兒的例子只用了10多次就可以了。在迭代的過程中,每個網(wǎng)頁的網(wǎng)頁級別的和是收斂于整個網(wǎng)絡的頁面數(shù)的。所以,每個頁面的平均網(wǎng)頁級別是1,實際上的值在(1-d)和(dN+(1-d))之間。
迭代次數(shù) | PR(A) | PR(B) | PR(C) |
0 | 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搜索引擎的網(wǎng)頁級別的實現(xiàn)
有三個因素決定的網(wǎng)頁的等級:網(wǎng)頁特定性因素、入鏈錨的文本、網(wǎng)頁級別。
網(wǎng)頁特定性因素包括網(wǎng)頁的內(nèi)容、標題及URL等。
為提供檢索結果,Google根據(jù)網(wǎng)頁特定性因素和入鏈錨的文本計算出網(wǎng)頁的IR值,這個值被檢索項在頁面中的位置和重要性加權,以決定網(wǎng)頁和檢索請求相關性。IR值和網(wǎng)頁級別聯(lián)合標志網(wǎng)頁的基本重要程度,這兩個值的聯(lián)合方式有多種,但明顯的是不能相加的。
由于網(wǎng)頁級別只對非特定的單個詞的檢索請求影響比較明顯,對于由多個檢索詞構成的檢索請求,內(nèi)容相關性的分級標準的影響更大。
1.8、用Google工具條顯示當前頁面的網(wǎng)頁級別
Google工具條是Google公司開發(fā)的IE插件,需要從Google下載并安裝。注意,顯示網(wǎng)頁級別的功能是其高級功能,這時會自動收集用戶的信息,并會自動升級工具條。
這個工具條顯示的網(wǎng)頁級別分為0-10共11級,如果根據(jù)理論用(Nd+(1-d))測算,假定d=0.85,則推測實際網(wǎng)級別的對數(shù)即為顯示的級別,且對數(shù)的基數(shù)在6-7之間。
Google的目錄服務可以顯示網(wǎng)站的級別
此處級別分為7級。有人對兩種級別進行了比較?!?/span>
1.9、入鏈對計算頁面級別的影響
入鏈總是能增加當前頁面的級別,尤其當前頁與其下級頁面構成回路時,這種貢獻更大。如右圖例,設ABCD各
PR(A) = 19/3 = 6.33
PR(B) = 11/3 = 3.67
PR(C) = 7/3 = 2.33
PR(D) = 5/3 = 1.67
如果A不在回路上,則只能得0.5*10=5的收益。
阻尼系數(shù)越大,頁面級別的收益越大,且整個回路上都能收到更大的收益(即入鏈收益更能平均地分布到各個回路頁面上。針對上例,將阻尼系數(shù)改為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)).如果這兩個站點互相鏈接,則此值減少。用隨機沖浪模型可以解釋這種現(xiàn)象,就是出鏈的增加,減少了用戶訪問站內(nèi)頁面的概率。舉例如圖,設阻尼系數(shù)
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將這樣的鏈接稱為懸擺鏈,它鏈到頁面沒有出鏈。懸擺鏈對頁
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
據(jù)Page和Brin,Google在索引頁面時,懸擺鏈的量很大,
主要是由于限制robot.txt的限制及索引了一些沒有鏈出的文件類
型如PDF等。為消除這種負面影響,google在計算級別時,將此
類鏈接從數(shù)據(jù)庫里去掉,在計算完畢后,再單獨計算懸擺鏈所鏈
到頁面。由此可見,PDF類的文件還是可以放心地在網(wǎng)上發(fā)布的。
1.11、頁面數(shù)量的影響
先看例子。阻尼系數(shù)為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)
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則用大幅下降。
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算法青睞小站點的特點。當然,大站點也會因內(nèi)容豐富而吸引其它
1.12、針對搜索引擎優(yōu)化的級別分布
先看兩個列子,阻尼系數(shù)為0.5,PR(X)/C(X)=10;
BC之間無鏈接時:
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都增加了。這符合優(yōu)化站點所有頁面而非只主頁的優(yōu)化思路,因為只有每個頁面的級別都提高了,當有檢索詞命中這些頁面時,它們才能排在前面。這種優(yōu)化的方法也很明顯了,就是盡可能地在所有頁面間平均分布入鏈的貢獻,各低級頁面要增加互鏈。
只要不影響易用性,盡可能地將所有出鏈集中在一個或幾個低級頁面中,可以有效地降低出鏈對頁面級別計算的負面影響??戳凶樱鹤枘嵯禂?shù)為0.5,
BCD都有出鏈時:
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的論文發(fā)表以后,除了web的鏈接結構以外,還有沒有別的因素被加到PageRank的算法當中曾經(jīng)有過廣泛地討論。 Lawrence Page本人在PageRank的專利說明中曾指出以下潛在的影響因素:鏈接的能見度,鏈接在文檔中的位置,web頁面間的距離,出鏈頁面的重要性,頁面的不過時。這此因素的增加,可以更好用隨機沖浪模型模擬人類利用web的行為。
不管上述附加因素有沒有在實際計算PageRank時使用,如何實現(xiàn)這些附加因素仍要討論。
首先算法公式需要改進.
PR(A) = (1-d) + d (PR(T1)×L(T1,A) + ... + PR(Tn)×L(Tn,A))
此處,L(T1,A)是入鏈的評價值,由幾個因素構成,只需要在迭代前計算一次,減少了對數(shù)據(jù)庫的查詢次數(shù),雖然每次迭代的查詢結果會有不同。
Lawrence Page在PageRank的專利說明中指出鏈接評價的兩個因素是鏈接的可見性和在文檔中的位置。鏈接評價取代了PR(A)/C(A),指出了對一特定的頁面的鏈接,每個鏈接被點擊的概率是不同的。
此處,每一鏈接有兩個屬性值,X表示可見度,如果沒有被重點強調(如粗體、斜體等)
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
為了防止人為的級別優(yōu)化,頁面的距離被用來影響鏈接的評價。站內(nèi)鏈接的權重小于站間鏈接的權重。頁面的距離可能由頁面是否在一個站內(nèi)、一個服務器及物理距離等決定。
另一個影響頁面重要性的能參數(shù),是頁面的不過時性(up-to-dateness),意指有越多的新建的頁面指向某一個頁面,則這個頁面內(nèi)容過時的可能性越小。
為增加這些因素的影響,要對公式進行修訂如下:
L(Ti,A) = K(Ti,A) × K1(Ti) × ... × Km(Ti)
其中,K(Ti,A)表示鏈接可見度及位置的權重,Kn(Ti)是第n個因素對頁面Ti的影響。看列子:此處,從C引出的鏈接的重要性是其它
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
此時,所有頁面的級別之和不等于頁面數(shù)量。
1.14 PageRank 算法的改進
1. 主題敏感的PageRank(Topic-Sedsitive PageRank)
在這個算法中,我們需要預先計算離線時頁面的重要性的分數(shù);然后,我們?yōu)槊恳粋€頁面計算多種重要性分數(shù),即關于不同的主題來計算這個頁面的重要性分數(shù)。在查詢的時候,把這些重要性分數(shù)與根據(jù)被查詢的主題的重要性分數(shù)綜合在一起,就形成一個復合的PageRank分數(shù)。采用這種方法能形成更加精確的排序值,而不是原始普通的排序值。
2. 二次方程推斷法(Quadratic Extra polation)
這是一個可以加快PageRank的運算速度的方法。它能通過周期性的削減當前的矩陣乘冪迭代的非主要特征向量的方法,大大加快其收斂速度。使用這種方法計算PageRank值時,當計算一個包含8000萬個節(jié)點的網(wǎng)絡圖時,與采用原來的PageRank方法相比,計算速度可以提高20%-300%。
3. 分塊矩陣排序算法(BlockRank Algo rithm)
該算法是PageRank算法的另一個加速算法,它首先把網(wǎng)絡根據(jù)領域劃分成不同的區(qū)域(塊),為每個區(qū)域計算它們的局部PageRank值;估計它們的相對的重要性(每個區(qū)域的BlockRank值);用這個區(qū)域的Block-Rank.值來給每個區(qū)域的Block-Rank賦予一定的權重。然后再把這些加權的局部
的PageRank值近似地看作全局的PageRank向量,把這個向量作為標準的PageRank算法的開始向量。這種方法可以減少計算的迭代次數(shù),可以把更多的時間用于收斂速度慢的區(qū)域的計算,提高了局部PageRank計算的有效性。BlockRank算法可以采取并行或分布的形式來進行計算,節(jié)約運算的時間。此外,局部的PageRank計算結果在以后的計算中可以被再利用。