1996年,兩位還在斯坦福大學攻讀計算機理學博士學位的研究生,開始了一項研究:如何對互聯網上「成萬上億」的網頁進行排序。在當時看來,這只是發生在斯坦福的一個普通課題研究而已,然而包括其研究者在內,都沒有意識到,這項研究最後的成果,會引起互聯網搜索引擎領域一個劃時代的變革。php
這兩位博士的名字相信你們都很熟悉了,他們正是後來大名鼎鼎的Google公司的創始人:拉里佩奇(Larry Page)和謝爾蓋布林(Sergey Brin)。而Google做爲全球最大的搜索引擎,在其創立之初,使用的核心算法正是咱們今天要講的PageRank.html
搜索引擎的根本用途在於根據用戶的查詢,快速而準確地從網絡的海洋中找到用戶最須要的網頁。這是針對網頁的一類特殊的信息檢索過程。它主要有如下兩個特色:算法
所以,基本的解決思路是根據查詢,對這些網頁進行排序,按照對用戶搜索目的的判斷,將最符合用戶需求的網頁依次排在最前面。也就是說,搜索引擎要解決的最主要問題是對網頁排序模型的設計。瀏覽器
佩奇和布林兩我的開始這項研究的原因來自於導師的提議,由於當時搜索引擎的發展遇到了瓶頸——缺少合理的排序算法。在1998年以前(也就是PageRank正式問世的那一年以前),即使是當時最早進的搜索引擎,也是主要依靠以關鍵詞詞頻爲核心的排序技術(這一點在文檔檢索中保持了旺盛的生命力,咱們到如今還主要依靠」TF(詞頻)×IDF(逆向文件頻率)TF(詞頻)×IDF(逆向文件頻率) 」模型爲搜索結果排序)。可是在搜索引擎技術中,依賴於詞頻的模型有其自然缺陷:網頁排序的結果僅僅考慮了基於關鍵詞的相關度判斷,而未考慮網頁自己的質量。顯而易見的是,海量的網頁來自不一樣的製造者,質量必定是良莠不齊的。能夠想象,若是有一些低質量的網頁對於某些詞的詞頻很高,這至關因而一我的一直在無心義的絮叨某句話,雖然毫無信息量可言的垃圾,卻在基於關鍵詞的模型下如魚得水,一旦其中某個詞被查到,當即能「嶄露頭角」。這一點在當時正是阻礙搜索引擎發展的最大困難。好比,使人感到諷刺的是,在1997年,堪稱早期互聯網鉅子的當時四大搜索引擎在搜索本身公司的名字時, 竟然只有一個能使之出如今搜索結果的前十名內,其他全被這種垃圾網頁擠到後面去了[1]。markdown
總結一下,網頁排序的任務中,最核心的難點在於判別網頁質量。若是網頁數量不多,這件事就簡單了,靠人工賦予其得分便可,但實際狀況是:互聯網山網頁如大海般浩瀚,且新的網頁不斷產生,舊的網頁也在不停變化,這是人工所不可能完成的任務。咱們只能依靠計算機和算法,自動評估網頁質量。因而,當時正在讀博的佩奇和布林想到了學術論文的質量判別方法:依靠文章的引用狀況。一篇論文的好壞固然與它的引用直接相關,有多少文章引用,什麼樣級別的文章在引用,纔是判斷一個文章質量最「靠譜」的標準。這一點放在網頁排序上也是同樣,論文的引用至關於就是網頁的連接,不論某個網頁再怎麼在關鍵詞方面作「手腳」,沒人願意連接你,那仍是白扯。因而,做爲一門學問的「連接分析」就此產生了,這一點也是PageRank算法最基本的原理。網絡
根據上面的分析,咱們能夠將互聯網上的網頁模擬爲一個節點,而這個網頁的「出鏈」看作是指向其餘節點的一條「有向邊」,而「入鏈」則是其餘節點指向這個節點的有向邊。這樣整個網絡就變成了一張有向圖。事情到此就顯得容易解決了,由於咱們用圖論中最普通的有向圖模型,完成了對此類問題的建模。具體的說,網頁質量的評估是遵循如下兩個假設的:機器學習
可是如今還面臨着一個問題,就是既然一個網頁A的質量與連接它的頁面質量相關,而連接A的那些頁面(咱們記爲B)的質量又與連接B們的頁面相關。以此類推下去,好像進入了一個無窮無盡的死循環。爲了解決這個問題,兩顆聰明的大腦又想到,也許能夠用數學中隨機過程的「隨機遊走模型」解決這個問題。隨機遊走模型又稱「醉漢模型」,指的是事物當前的狀態只與其上一個狀態有關,而與其再以前的狀態無關。就比如一個醉漢,他這一步走到哪裏只跟他上一步在哪裏有關,這有點接近於物理學中常講的「布朗運動」。用戶上網也能夠看作是一個相似的過程。咱們能夠假設,初始狀態時,用戶訪問全部頁面的機率都是等大的,而每次訪問事後,用戶會依照此時該頁面中給出的連接以相等機率訪問連接所指向的頁面,那這就比如是用戶在剛剛咱們所說的有向圖上作「隨機遊走」。因此,經過對這種隨機遊走的機率分析,咱們就能獲得用戶在上網時,停留在哪個網頁上的機率要大一些,機率越大的,表示其質量越高。性能
如今,咱們將上面的兩個假設以及隨機遊走模型數學化。若是說最終的目的是要爲每一個網頁賦予一個得分的話,那麼在初始化階段,全部網頁的得分應該是相等的,假設如今一共有NN 個網頁,那麼初始階段用戶訪問每一個網頁的機率就是1N1N ,好比下圖中的初始機率向量爲(1/4,1/4,1/4,1/4)(1/4,1/4,1/4,1/4) ,而由於每一個網頁均可能存在着到其餘任何網頁的連接,因此,咱們能夠將這些連接以平均的機率表示成一個機率轉移向量。好比下面這張圖,(圖的來源:PageRank算法–從原理到實現)網頁A中有3個連接,分別指向B, C, D,則A的機率轉移向量爲(0,1/3,1/3,1/3)(0,1/3,1/3,1/3) ,向量的維度依次對應的是網頁A指向A, B, C, D四個網頁的機率。學習
顯然,每一個網頁都有這樣一個機率轉移向量,咱們把這些向量轉置後(按列放置)合起來就是隨機過程當中經典的機率轉移矩陣了,以下:網站
不難理解,這種機率轉移矩陣的一個顯著的特徵是每一個元素都≥0≥0 ,且列和爲1,含義表示從當前網頁跳轉到其餘網頁的機率和爲1。咱們記這個矩陣爲TT ,T[i][j]T[i][j] 的含義是既能夠表示由網頁ii 跳轉至網頁jj 的機率,又能夠表示由網頁jj 跳轉至網頁ii 的機率。
根據這個矩陣,咱們可以計算出通過一次網頁跳轉以後,用戶訪問到每一個網頁的機率分佈,好比上圖中,通過一次跳轉以後,用戶訪問到各個網頁的機率能夠以下計算:
其中,TT 爲機率轉移矩陣。同理,咱們能夠按照這個方法持續計算到用戶第nn 次跳轉以後的機率分佈,公式以下:
佩奇和布林發現,當n→+∞n→+∞ ,且機率轉移矩陣TT 知足如下3個條件時,limn→+∞Vnlimn→+∞Vn 最終收斂,保持在一個穩定值附近。
TT 爲隨機矩陣。即全部T[i][j]≥0T[i][j]≥0 ,且的全部列向量的元素加和爲1,∑ni=1T[i][j]=1∑i=1nT[i][j]=1
TT 是不可約的。所謂不可約是說TT 所對應的圖示強連通的,即圖中任何一個節點均可以達到其餘任何一個節點,它要求機率轉移矩陣不存在某些特殊狀況,好比某個列向量都爲0,即有一個網頁沒有連接到任何其餘網頁,咱們把這類狀況又稱爲終止點;或者是在機率轉移矩陣的主對角線上,存在有一個元素爲1的狀況,即這個網頁連接只連接它本身,咱們把這類狀況又稱爲陷阱。這兩類特殊的情形在後面會詳細說。
TT 是非週期的。所謂週期性,體如今Markov鏈的週期性上。即若A是週期性的,那麼這個Markov鏈的狀態就是週期性變化的。由於A是素矩陣(素矩陣指自身的某個次冪爲正矩陣的矩陣),因此A是非週期的
好比上面這個例子中,limn→+∞Vn=limn→+∞Tn⋅V0=(3/9,2/9,2/9,2/9)Tlimn→+∞Vn=limn→+∞Tn⋅V0=(3/9,2/9,2/9,2/9)T
這代表,通過足夠屢次的網頁跳轉,用戶停留在網頁A的機率要比停留在B, C, D的機率高,然後三者基本是等機率的。通過這樣的計算獲得的每一個網頁的機率值也叫PR值,是評估網頁質量的依據。也就是說,在咱們使用搜索引擎時,在保持網頁與查詢必定相關度的基礎上,PR值能夠提供很是不錯的排序依據。
然而,如今存在的問題是,上面的全部推導都是創建在理想狀態下的,即假設全部網頁組成的這個有向圖是強連通的。可是實際上,網頁形形色色,總有那麼一些「奇葩」存在,從而在PageRank中,對算法會產生「惡劣」影響,基本上有2種狀況:終止點和陷阱。
終止點指的是沒有任何出鏈的網頁。能夠想象,按照上面這種隨機遊走模型,用戶訪問到這個網頁後,由於找不到連接,就會「四顧茫然」,不知下一步該怎麼辦了。好比下圖中,網頁C沒有出鏈。這種狀況下,機率轉移矩陣在終止點對應的那一列,全部元素都是0,代入上面的PR值計算公式,會發現通過無窮屢次跳轉後,全部網頁的PR值都是0:
上圖對應的機率轉移矩陣爲:
可見,對應C的第3列全爲0,迭代計算PR值,最後的結果都是0:
那這樣的計算結果固然是毫無心義的。
陷阱指的是隻有指向自身連接的網頁。這種狀況下,全部「隨機遊走」的用戶到了這個網頁後,就如同進了黑洞通常,一直在裏面「打轉」,出不來了。好比下圖中,網頁C只有一條出鏈,而且仍是指向它本身的,這就把C變成了陷阱。
有陷阱的網絡對應的機率轉移矩陣中,主對角線上存在至少一個爲1的元素(主對角線存在nn 個1,就表明整個網絡中有nn 個陷阱)。
這種狀況下,陷阱的PR值爲1,而其餘正常網頁的PR值爲0。迭代計算的結果大體以下:
爲了解決這兩個致命的問題,佩奇和布林想到,他們最初定義的用戶的上網模型是不夠準確的,由於用戶不是傻乎乎的機器,他們是具備聰明大腦的人,當一我的遇到終止點或者陷阱的話,他不會不止所錯,也不會無休止地本身打轉,他會經過瀏覽器的地址欄輸入新的地址,以逃離這個網頁。也就是說,用戶從一個網頁轉至另外一個網頁的過程當中,會以必定的機率不點擊當前網頁中的連接,而是訪問一個本身從新輸入的新地址。咱們能夠依照這個原理修正以前的機率轉移公式,以下:
其中,αα 爲用戶繼續點擊當前網頁中的連接的機率,(1−α)(1−α) 爲用戶經過地址欄「逃離」的機率。關於這裏的αα ,其實很講究,首先αα 不能太大,由於αα 的大小與算法的收斂速度呈反比,
αα 太大會致使算法收斂慢而影響性能;其次,αα 也不能過小,由於PageRank的精華就在於上面的公式中前一部分——由機率轉矩陣的屢次迭代計算獲得PR值。因此,最終兩位博士將αα 值定爲0.85.
咱們來看通過這樣處理以後,上面的終止點和陷阱問題可否獲得解決:
當存在終止點時,迭代的結果爲:
當存在陷阱時,迭代的結果爲:
這樣就解決了終止點與陷阱的問題。
PageRank的優勢太明顯,從它取得的巨大成功就可見一斑。可是他也並不是十全十美,文獻[2]總結了PageRank的一些缺點,我將它們摘抄以下:
第一,沒有區分站內導航連接。不少網站的首頁都有不少對站內其餘頁面的連接,稱爲站內導航連接。這些連接與不一樣網站之間的連接相比,確定是後者更能體現PageRank值的傳遞關係。
第二,沒有過濾廣告連接和功能連接(例如常見的「分享到微博」)。這些連接一般沒有什麼實際價值,前者連接到廣告頁面,後者經常連接到某個社交網站首頁。
第三,對新網頁不友好。一個新網頁的通常入鏈相對較少,即便它的內容的質量很高,要成爲一個高PR值的頁面仍須要很長時間的推廣。
當今的搜索引擎固然與20年前不可同日而語,PageRank早已不是惟一的網頁質量評估算法了,比較主流的搜索引擎用到的搜索算法數量成百,是一個多算法,多層次的系統。可是咱們依然不能忘記搜索引擎系統曾經這一次巨大的變革,完全改變了咱們對信息檢索的認識。
不得不說,PageRank是20世紀末計算機科學史上的一大奇蹟,它以及其簡明的邏輯,發明了迄今爲止在搜索引擎領域還至關有表明性的算法,解決了數以億計的網頁質量評估問題,拋開它難以估量的商業價值不談,就說其學術方面,這種依靠數據自身結構的學習方法,也依然還在當前不少信息檢索領域啓發着咱們。
最後,我想以一個故事結束[1]: 2001年, 佩奇爲」PageRank」申請到了專利,專利的發明人爲佩奇,擁有者則是他和布林的母校斯坦福大學。2004 年 8 月, 谷歌成爲了一家初始市值約17億美圓的上市公司。不只公司高管在一晚上間成爲了億萬富翁,就連當初給過他們幾十美圓 「贊助費」 的某些同事和朋友也獲得了足夠終身養老所用的股票回報。做爲公司搖籃的斯坦福大學則因擁有」PageRank」的專利而得到了180萬股谷歌股票。2005 年 12 月,斯坦福大學經過賣掉那些股票得到了3.36億美圓的鉅額收益,成爲美國高校因支持技術研發而得到的有史以來最鉅額的收益之一。從投資角度講, 斯坦福大學顯然是過早賣掉了股票,不然獲利將更爲豐厚。不過,這正是美國名校的一個難得之處,它們雖擅長從支持技術研發中獲利,卻並不惟利是圖。 它們有本身的原則,那就是不能讓商業利益干擾學術研究。爲此,它們一般不肯長時間持有特定公司的股票,以避免在無形中干擾與該公司存在競爭關係的學術研究的開展。
我這裏沒有崇洋媚外的意思,不過我想說,美國的大學,至少是一部分名校,是有所謂的「大學精神」的。大家能夠想象一下,假如兩個中國學生髮明瞭PageRank,創建了Google這樣的企業,會不會有哪一個學校像斯坦福這般處理所持有的股票呢?中國想建設世界一流的大學,任重而道遠!
[1] 谷歌背後的數學
[2] PageRank算法–從原理到實現