1. 程式人生 > >數學之美閱讀筆記(1)

數學之美閱讀筆記(1)

大一的時候就開始看吳軍博士第一版的《數學之美》,苦於那時年少無知不懂事,加上自身數學知識的體系不健全,翻著翻著也就沒有了後文。現在讀了研究僧,也許是換了個視野,看到書的開頭“中國教育最失敗的就是學生從上課的第一天到考試結束,都不知道學的東西能幹什麼。”,果然是大實話,私以為學習的原動力在於內心的訴求,當有應用的需求時,學習起來就會更帶勁。趁著在校時光,安安靜靜讀讀書寫寫字,所以決定將這本書的精髓地方整理整理形成筆記,健忘症發作時就可以隨手看看電子版。

1.統計語言模型

基於統計語言的數學模型是自然語言處理(NLP)的基礎,賈里尼克的出發點是:一個句子是否合理,看它出現的可能性大小。假定S表示一個有意義的句子,且由一連串順序排列的片語成(英文中有空格隔開,中文則需要進行分詞),出現的可能性則是計算P(S),若直接使用頻數統計S在所有語料庫中出現的概率,則肯定行不通,利用條件概率展開P(S):

這裡寫圖片描述

從計算來看,計算前幾個條件概率還十分容易,但到了後面根本無法進行估算。俄國的馬爾科夫提出了一種偷懶的方法,即假設任意一個詞出現的概率只和它前面的那個詞有關。這樣P(S)就變得十分簡單:

這裡寫圖片描述

這就是統計語言模型中的二元模型(Bigram Model),如果假設一個詞由前面的N-1個詞決定,則成為N元模型。接下來計算則變得十分美妙:

這裡寫圖片描述

2.談談分詞

對於一些亞洲語言(例如中、日、韓),詞之間沒有明確的界限,因此需要對句子先進行分詞,才能做進一步的自然語言處理。最簡單的分詞方法就是查字典將句子從左到右掃描,遇到字典中有的詞就標識出來,遇到複合詞就找最長的詞匹配

基於統計的語言模型則是保證完成分詞後,使用上面的隱含馬爾科夫計算模型句子出現的可能性,即先生成所有的分詞方式,再選擇使得句子出現可能最大的分詞方式

。這樣採用窮舉法消耗較大,可以將其轉化為一個動態規劃法,快速找到句子的最佳分詞方式。一般來講,漢語分詞的顆粒度大小和應用場景有關,在機器翻譯中,顆粒度應該大一些,而在語音識別和網頁搜尋中,顆粒度應該小一些

3.資訊的度量與作用

資訊理論的創始人夏農提出了“資訊熵”(Information Entropy)的概念,解決了資訊的度量問題。一條資訊的資訊量與其不確定性有著直接的關係,可以認為:資訊量等於不確定性的多少,資訊熵的定義如下(資訊熵用H表示,單位是位元 ),至於夏農為何這樣定義,大家可以科普,十分美妙。

這裡寫圖片描述

資訊和消除不確定性是直接相關的,通過引入資訊是消除系統不確定性的唯一方法

。寫到這裡,不得不感嘆一句,生活的哲理居然可以用數學來證明。在面臨選擇時,我們不也是找資訊渠道盡可能減小自己對未來設想的不確定性嗎,真是神奇。

為啥引入新的資訊後,系統的不確定性會降低了?現在假設X和Y兩個隨機變數,知這是定義X在Y條件下的條件熵為(即Y是新的資訊):

這裡寫圖片描述

可以證明H(X)>=H(X|Y),即引入資訊Y後,X的資訊熵減小了,同時當X與Y相互獨立時上式等號成立。在度量兩個隨機變數的相關性上,夏農提出了互資訊的概念,假定有兩個隨機事件X和Y,它們的互資訊定義如下:

這裡寫圖片描述

同時滿足:

這裡寫圖片描述

相對熵則用於衡量兩個取值為正的函式的相似性,它的定義如下:

這裡寫圖片描述

為了讓其對稱,夏農又提出一種新的計算方法:即1/2(KL(f(X)||g(x))+KL(g(X)||f(x)))。

4.賈里尼克八卦錄

1.大學階段,人的理解能力要強很多。
2.成績優異比不上因為興趣的持續後動力。

5.布林代數與搜尋引擎

技術分為兩種,原理稱之為道,實現方法稱之為術。建立一個搜尋引擎,大致需要做三件事情:1.自動下載儘可能多的網頁;2.建立快速有效的索引;3.根據相關性對網頁進行公平排序。因此搜尋產品都可以提煉成:下載、索引和排序,這就是搜尋引擎的道。

對於文獻檢索或搜尋引擎,通常是使用者先輸入一個關鍵詞,接著來查詢哪些文獻或網頁包含這個關鍵詞,包含則為1,不包含則為0,在布林代數的世界裡,萬物都是可以量子化的。這樣我們就可以建立一張簡單的索引表,用一個很長的二進位制串來表示一個關鍵字是否出現在每篇文獻中。即:每一行對應一個關鍵字,每一列對應一篇文獻,常見的搜尋引擎會對所有的詞都進行索引。為了排名方便,索引中可能還需要一些附加資訊,因此整個索引表就十分之大,通常都是通過分散式的方式儲存到不同的伺服器上

這裡寫圖片描述

6.圖論和網路爬蟲

圖的遍歷策略通常分為兩種:1.深度優先(DFS),2.廣度優先(BFS)。深度優先指的是一條路走到黑,先浪跡天涯,沒錢了再回頭;廣度優先則是先把窩邊草吃完,再開闢更遠的芳草。不管哪種方式,都應該浪過的地方記錄下來,以免漏網之魚或者再回到記憶之處。

網際網路雖然複雜,但事實上就是一張大網,換句話說每個頁面當做一個節點,把頁面中的超連結看做為弧,就是一個巨大的圖。使用圖的遍歷演算法,自動訪問大網中的每一個頁面並儲存下來,這樣的程式就是我們所說的“網路爬蟲”(Web Crawlers),正如上面所說的要記錄風流往事,在網路爬蟲中,我們使用一種“散列表”來記錄網頁是否已經下載(URL)的資訊。基本上網路爬蟲使用的是BFS

7.PageRank演算法

今天的搜尋引擎對於上述中的關鍵字布林運算,都會返回成千上萬條結果,那如何對這些網頁進行排序,將高質量的網頁排在前面而不是那些莆田系呢?一般排名取決於兩個因素:網頁的質量網頁的相關性(當然百度多了個money),PageRank就是衡量網頁的質量一種經典方法。

PageRank演算法的核心思想是:被使用者訪問越多的網頁質量可能越高。下面用一個通俗的例子來解釋這一原理,上面已經提到,可以將網際網路看做一張大網,假設現在我們的網路拓撲圖如下所示:

這裡寫圖片描述

最簡單的是,我們假設停留在一個頁面時,跳轉到其連結到的頁面的概率相同,例如從網頁A跳轉到B、C、D的概率各為1/3,這樣我們可以根據網路的拓撲結構,定義出上圖的轉移矩陣:(例如圖中的第一行就表示從四個網頁各自跳轉到網頁A的概率)

這裡寫圖片描述

然後,設初始時每個頁面的rank值為1/N,這裡就是1/4。按A-D順序將頁面rank為向量v:

這裡寫圖片描述

因此用M的第一行乘以v的第一列,所得結果就是頁面A最新rank的合理估計,同理,M*v的結果就分別代表A、B、C、D新rank值:

這裡寫圖片描述

然後用M再乘以這個新的rank向量,又會產生一個更新的rank向量。迭代這個過程,可以證明v最終會收斂,即v約等於Mv,此時計算停止。最終的v就是各個頁面的pagerank值。例如上面的向量經過幾步迭代後,大約收斂在(1/4, 1/4, 1/5, 1/4),這就是A、B、C、D最後的pagerank。當然這只是最簡單的情形,在實際應用中還需要考慮很多的特殊情形,譬如:Dead Ends、平滑處理、反作弊等。pagerank演算法被評選為資料探勘十大經典演算法,用慣了Google,就再也不相信Baidu了…【待續】