1. 程式人生 > >PageRank演算法和谷歌搜尋講解

PageRank演算法和谷歌搜尋講解

PageRank演算法和谷歌搜尋講解

吳裕雄

PageRank演算法實際上就是Google使用它來計算每個網頁價值的演算法。 Google每次的搜尋結果都有成百上千萬甚至上億個相關的查詢網頁連結。如果將所有的查詢結果不加區分,就立即顯示給客戶看的話,那麼使用者很有可能看到的就是一些沒有多大用的東西,那麼Google也就肯定會遭到淘汰的。

那麼如何向用戶顯示對他們有用的網頁連結呢?Google想出了一個辦法——就是給那成百上千萬個網頁計算出一個值。這個值呢就叫做PageRank(頁面價值得分)。通過計算這個值呢,可以區分出每個網頁價值有多高。下面來認識一下谷歌網頁快速響應的問題。

它是如何做到的呢?它其實是通過:倒排索引

這個技術來實現的。它通過全文進行索引,但它對全文進行索引的keyworld,不是文章的全體,而是把文章進行一個分詞。舉個例子,輸入:我是一名學生。進行搜尋,它首先將 我 作為一個詞,或者把 我是 作為一個詞,又或者把 一名 作為一個詞,把 學 生 作為一個或兩個詞,具體怎麼分就看谷歌具體的演算法了,但谷歌作為一個商業公司,它當然不會把原始碼公佈了。將所有的詞放到一張表中,每個詞都對應著一個倒排列表。倒排列表是從查詢到的一堆不加區分的網頁連結中得來,它是鍵值對形式的,如 單詞 我 這一行 倒排列表中有(3,5),就表示:我 這個詞出現在標識號為3的網頁,它(我)的具體位置在偏移量為5這個位置。當然它是很長很多的:(
3,5)(7,3....通過索引來查詢這些詞,是很快的,因為分詞的總量不是很多。搜尋到詞後,在查詢那個詞的倒排列表,就可以很快找到相關的網頁了。順便說一下:Google它是沒有使用任何的資料庫的,它的儲存是基於系統的檔案分散式儲存。那Google怎麼才能夠把高價值的網頁顯示出給使用者呢?Google它是通過PageRank(頁面價值得分)來實現的。

Google通過爬蟲技術來抓取網頁,它所能夠知道的資訊只能是它獲取到的,像某一個站點的點選數這些資訊,它是無法知道的,因此不能使用這些看似有用的資訊來做判斷。那Google它怎麼利用它抓取到的資訊屬性來判斷頁面的價值的呢?它是通過:網頁連結數來進行做運算,通過計算得出的。在抓取到的頁面中,如果有一個頁面被其它許多的頁面指向的話,那麼這個頁面很有可能就是一個很有價值的頁面。反過來,如果一個頁面幾乎沒有一個頁面指向它,那麼這個頁面很有可能就不是一個很重要的頁面。所以我們就可以通過一個頁面的連結數,來判斷它的價值數。但我們不能忽視一個這樣的問題:如果某一個頁面被某一個國家政府或者機關訪問了的話,那麼即使它的連結數很少,但它被某個國家或機關關注過的話,那麼它也很有可能是一個重要的網頁。所以這裡有個連結的權值該如何分配的問題。下面來看一下:

Google它是怎麼來建立一個數學模型來進行計算PageRank的。

假如有四個網頁,編號為 1 2 3 4,它們的連結是這樣子的:1-->2,1-->4,2-->3,2-->4,3-->4,4-->3,4-->2;那麼可以通過一個4*4的矩陣來將這些指向關係表示出了,這個矩陣就是原始矩陣。用S來表示:

 

怎麼得到的,就不做具體說明了。實在看不懂,再問我吧。令谷歌矩陣G=S*a+1-a*U*1/n

a取值範圍(0,1),它的值主要通過大量的資料運算和經驗得出的,由谷歌工程師得出,作用是來調整PageRank這個值的,n是網頁數,例子的話,n=4.U是一個全部元素都是1的矩陣。接下來要找到谷歌矩陣G的特徵向量q,使得q=G*q,這個特徵向量q,它的第一個元素就是網頁1PageRank,它的第二個元素就是網頁2PageRank,以此類推....

那怎麼求個q值呢?可以通過迭代的方式求得,先求得q1,再求q2...一直求下去,肯定是可以取得最終的q值的,這個在數學上已經被證明了的。也可以求到一個qn,把這個qn當成是q的一個近似解。PageRank從數學角度來說,就是這麼簡單,但如果要用計算機來具體算的時候,是根本沒有辦法算的,因為谷歌一次查詢就有成百上千億個網頁,那它的原始矩陣S就是一個成百上千億乘以成百上千億,這樣的矩陣就算是超級計算機也是處理不了的,而且每天谷歌查詢數都是過億的,那麼這些就更多了。谷歌它是通過分散式來計算的,也就是Map-Reduce DFS Hadoop也是基於谷歌這種分散式處理資料而被創造出來的。

它主要是將一個個網頁分配到一個個節點(伺服器或PC)(可以有成百上萬個)來進行本地的資料分析和處理,每個節點獨立進行計算,最後只是返回一個結果。(具體請參考hadoop Map-Reduce HDFS),就這樣就可以計算出那個特徵向量q了。