徐 京,陶 皖 (安徽工程大學(xué)計算機(jī)與信息學(xué)院,安徽 蕪湖241000)
21世紀(jì),搜索引擎成為獲取信息的重要工具。而隨著Web數(shù)量的急劇增加,搜索引擎如何以較快的速度給用戶提供權(quán)威的相關(guān)網(wǎng)頁。下面,筆者將提出一種改進(jìn)的PageRank算法,即在傳統(tǒng)的PageRank算法[1]中加入MapReduce和Gauss-Seidel,以減少迭代次數(shù),減少時間消耗,提高并行效率。
PageRank算法用于計算網(wǎng)頁的權(quán)威值,該值是Google對檢索的網(wǎng)頁進(jìn)行排序的一個重要依據(jù)[2]。PageRank算法由Sergey Brin和Larry Page在1998年4月舉行的第7屆國際萬維大會 (WWW7)上提出[3]。PageRank的基本思想如下:網(wǎng)頁A鏈向網(wǎng)頁B是網(wǎng)頁A對網(wǎng)頁B的認(rèn)可,視為網(wǎng)頁A對網(wǎng)頁B投了一票。一個網(wǎng)頁得票越多,網(wǎng)頁的權(quán)威值越大。網(wǎng)頁i的權(quán)威值Pi按照以上的思想化為公式:
其中,Oj是網(wǎng)頁j的鏈出數(shù)目。
互聯(lián)網(wǎng)鏈接結(jié)構(gòu)的形成都是自發(fā)和無序的,可能存在沉淀現(xiàn)象:一些網(wǎng)頁簇只鏈向簇內(nèi)的其他一些網(wǎng)頁,而不鏈向簇外的網(wǎng)頁;傳遞進(jìn)來的PageRank值滯留在網(wǎng)頁簇內(nèi)部,不能傳遞出去。解決辦法是:設(shè)定瀏覽者會隨機(jī)選擇一個鏈接繼續(xù)瀏覽的概率是d,設(shè)定瀏覽者不通過鏈接,而跳到另一個隨機(jī)網(wǎng)頁的概率是1-d。所得的公式為:
PageRank算法計算時使用冪迭代法,根據(jù)上述公式得出迭代公式為:
其中,P為各個網(wǎng)點的PageRank值,是n行1列矩陣;E是一個全為1的n×n方陣;A是鏈接矩陣,每行和為1,即把每行做求和分解,Aij表示節(jié)點i鏈向節(jié)點j。
由于鏈接結(jié)構(gòu)的自發(fā)和無序性,矩陣A存在“黑洞效應(yīng)”:網(wǎng)絡(luò)鏈接圖中存在入度為0的網(wǎng)頁,經(jīng)過有限次迭代后,該鏈接圖中的所有網(wǎng)頁的PageRank值均為0。解決方法:對于沒有外鏈的網(wǎng)點,設(shè)定鏈接圖中其余所有的網(wǎng)點都是它的外鏈,即在鄰接矩陣中,某行全為0,則將全部元素值設(shè)為1/N。所得公式為:
PageRank公式即為:
PageRank算法中使用的冪迭代法[4],計算簡單但收斂速度慢,時間消耗較大。對于這個問題一些學(xué)者提出使用MapReduce并行處理,減少時間消耗。
MapReduce是Google提出的一個軟件架構(gòu),是一種處理海量數(shù)據(jù)的并行編程模式,用于大規(guī)模數(shù)據(jù)集 (通常大于1TB)的并行運算[5]。MapReduce分為 “Map(映射)”階段和 “Reduce(化簡)”階段。MapReduce過程:首先將輸入文件分成互相獨立的N塊,每塊分配給一個執(zhí)行Map函數(shù)的處理器,Map:(in_key,in_value)→ {(keyj,valuej)|j=1…k}}。執(zhí)行Reduce函數(shù)的處理器將每個 Map函數(shù)所產(chǎn)生的中間結(jié)果進(jìn)行合并,Reduce:(key,[value1,…,valuem])→ (key,final_value)。各個執(zhí)行Reduce函數(shù)的處理器也可以并行[3]。
結(jié)合了MapReduce的PageRank算法已在一定程度上減少了時間消耗,為進(jìn)一步減少時間消耗,筆者將結(jié)合了MapReduce的PageRank算法再結(jié)合Gauss-Seidel,在并行的基礎(chǔ)上減少迭代次數(shù),從而進(jìn)一步減少時間消耗。
1)Jacobi迭代法 PageRank算法使用的冪迭代法實質(zhì)是特殊的Jacobi迭代法。
DX =b的Jacobi計算公式[6]如下:
式中,D 為系數(shù)矩陣且非奇異,dii≠0;b= (b1,b2,…,bnT)。當(dāng)dii=1,bi=0時Jacobi迭代法即為PageR-ank算法中的冪迭代法。即PageRank算法中的冪迭代法可轉(zhuǎn)化為求方程組(P-E)X=0。
Jacobi計算簡單但收斂速度慢,而Gauss-Seidel收斂快于Jacobi,所以下面將討論把鄰接矩陣轉(zhuǎn)化為大型稀疏矩陣線性方程組后采用MapReduce并行編程方法和Gauss-Seidel相結(jié)合,使迭代次數(shù)更低,并行效率更高。
2)Gauss-Seidel迭代法 系數(shù)矩陣D為非奇異,且dii≠0。DX =b的Gauss-Seidel的計算公式[6]如下:
Gauss-Seidel迭代可以看成是對Jacobi迭代的一種改進(jìn)[7]。Gauss-Seidel使用最新信息計算,收斂快,減少了迭代次數(shù)。
按照MapReduce編程方法,MapReduce函數(shù)首先對矩陣進(jìn)行分塊處理,將m至n列分為一塊,其中n>m。然后由Master節(jié)點將各個分塊矩陣和序號為m至n的頁面的初始權(quán)威值分派給各個Map worker節(jié)點。根據(jù)Gauss-Seidel的迭代次數(shù)少的優(yōu)點,在 Map函數(shù)中使用Gauss-Seidel迭代方法。Gauss-Seidel迭代:計算時,使用(j<i)和(j≥i)。因為Pj(k+1)中的j<i,所以只要順序循環(huán),將上輪循環(huán)所得的值Pj(k+1)(j<i)放入下輪循環(huán)中參與計算即可[7]。Map函數(shù)處理完成后,由Master節(jié)點將結(jié)果分配給Reduce worker節(jié)點。Reduce函數(shù)所得的結(jié)果即為各個Web頁面的權(quán)威值。偽代碼如下:
使用Matlab、分布式計算工具箱和ncm工具箱[8.9]模擬改進(jìn)后的PageRank算法。分布式計算工具箱用在4核處理器計算機(jī)上模擬Hadoop平臺下的MapReduce,ncm工具箱中的Harvard500(訪問哈佛大學(xué)的網(wǎng)頁,所生成的網(wǎng)絡(luò)連接關(guān)系)作為測試改進(jìn)的PageRank算法所用的數(shù)據(jù)集。Harvard500數(shù)據(jù)集包含500個節(jié)點和2636個鏈接。
使用ncm工具箱中的所提供的500個節(jié)點。用Power Method和改進(jìn)的PageRank算法:Gauss-Seidel Method,用不同迭代精度進(jìn)行迭代,選取4個處理機(jī)最大的迭代次數(shù)進(jìn)行比較,如表1所示。
表1 不同精度所得迭代次數(shù)
圖1 迭代次數(shù)比較曲線
Power Method和Gauss-Seidel Method迭代次數(shù)比較的曲線如圖1所示。由表1和圖1可以得出:隨著計算精度的提高,Gauss-Seidel Method迭代速度快的優(yōu)勢越來越明顯。由此得出:當(dāng)Web頁面越來越龐大時,改進(jìn)的PageRank算法優(yōu)勢越來越明顯,即計算各個網(wǎng)頁的權(quán)威值時間減少,效率提高。
[1]Page L,Brin S,Motwani R,et al.The PageRank citation ranking:Bring order to the Web [N].Stanford Digital Libraries Working Paper,1998.
[2]Amy N L,Carl D M.Deeper Inside PageRank [J].Internet Mathematic,2005,1 (3):335-380.
[3]Liu Bing.Web數(shù)據(jù)挖掘 [M].俞勇,薛貴榮,韓定一 (譯).北京:清華大學(xué)出版社,2009.
[4]吳家麒,譚永基.PageRank算法的優(yōu)化和改進(jìn) [J].計算機(jī)工程與應(yīng)用,2009,(16):56-58.
[5]劉鵬 .云計算 [M].北京:電子工業(yè)出版社,2011.
[6]李慶揚,王能超,易大義 .數(shù)值分析 [M].北京:清華大學(xué)出版社,2008.
[7]向令,王鵬 .并行迭代算法的研究及應(yīng)用 [J].成都信息工程學(xué)院學(xué)報,2007(S):109-111.
[8]Cleve B M.Matlab數(shù)值計算 [M].喻文健 (譯).北京:機(jī)械工業(yè)出版社,2006.
[9]張德豐 .MATLAB數(shù)值分析與仿真案例 [M].北京:清華大學(xué)出版社,2011.