2801# 數學之美-Statistical Language Models
Google 的使命是 "整合全球信息,讓人人能獲取,使人人能受益",研究如何讓機器對信息、語言做最好的處理和理解。喬姆斯基提出 “形式語言” 以后,人們更堅定了利用語法規則的辦法進行文字處理的信念。
此前,數學家兼信息論的祖師爺就提出了用數學的辦法處理自然語言的想法(浪潮之巔里對此人印象極為深刻),當時的計算機條件根本無法滿足大量信息處理的需要。
還有一位首先成功利用數學方法解決自然語言處理問題的是語音和語言處理大師Fred Jelinek,當時賈里尼克在 IBM 公司做學術休假,領導了一批杰出的科學家利用大型計算機來處理人類語言問題。統計語言模型就是在那個時候提出的。
自然語言處理(NLP:Natural Language Process)的領域機器翻譯可以包括:語音識別、印刷體、手寫體識別、拼寫糾錯、漢字輸入、文獻查詢。文中沒有提及的有情感分析(Sentiment Analysis)和機器翻譯(美國標準局NIST對所有的機器翻譯系統進行了評測,Google 的系統是不僅是全世界最好的,而且高出所有基于規則的系統很多。
)。
我們都需要知道一個文字序列是否能構成一個大家能理解的句子,顯示給使用者。對這個問題,我們可以用一個簡單的統計模型來解決這個問題。此處作者用條件概率公式解釋了及其對于語言識別的模式(馬爾可夫假設)。
數學的精妙就在于把一些復雜的問題變得如此的簡單,也是本書的主題。
2802#數學之美-NLP中文分詞
中文分詞是統計語言模型在中文處理中的一個應用,含有分詞的語言包括中日韓等在自然書寫時沒有分割的語言,在計算機處理時首先應進行分詞處理。
一般分詞辦法就是查字典,這種方法最早是由北京航天航空大學梁南元教授提出。 “查字典” 法把一個句子從左向右掃描一遍,遇到字典里有的詞便進行標識,遇到復合詞(比如 “上海大學”)就找最長的詞匹配,遇到不認識的字串就分割成單字詞,于是簡單的分詞就完成了。
90年前后,清華大學郭進博士用統計語言模型成功解決分詞二義性問題,將漢語分詞錯誤率降低了一個數量級。因此只要利用統計語言模型計算出每種分詞后句子出現的概率,并找出其中概率最大的,就能夠找到最好的分詞方法。
實現的技巧,窮舉所有可能的分詞方法并計算出每種可能性下句子的概率,計算量是相當大的。因此,可以把它看成是一個動態規劃(Dynamic Programming) 的問題,并利用 “維特比” 算法快速地找到最佳分詞。
Ref. Computational Linguistics” (《計算機語言學》)
2803#數學之美-信息論
一些關鍵詞:隱含馬爾可夫模型 條件概率 貝葉斯公式 馬爾可夫鏈 信息熵 冗余度 互信息
七十年代,當時 IBM 的 Fred Jelinek(關于賈的更多故事可以看《浪潮之巔》) 和卡內基·梅隆大學的 Jim and Janet Baker 分別獨立地提出用隱含馬爾可夫模型來識別語音,語音識別的錯誤率相比人工智能和模式匹配等方法降低了三倍。
八十年代李開復堅持采用隱含馬爾可夫模型的框架, 成功地開發了世界上第一個大詞匯量連續語音識別系統 Sphinx。
1948 年,Shannon提出了“信息熵”(Entropy)(一般用符號 H 表示,單位比特,從而解決了對信息的量化度量問題,信息熵很有意思,詳見Wikipedia)用來度量信息的大小。
原理則是假設一條信息的信息量大小和它的不確定性有直接的關系。可以認為,信息量的度量就等于不確定性的多少。信息量的比特數和所有可能情況的對數函數 log 有關,一個比特是一位二進制數,計算機中的一個字節是八個比特。
e.g. 一本五十萬字的中文書,信息量大約是 250 萬比特,如果用一個好的算法壓縮一下,整本書可以存成一個 320KB 的文件。
冗余度:如果用兩字節的國標編碼存儲這本書,大約需要 1MB 大小,是壓縮文件的三倍。這兩個數量的差距,在信息論中稱作"冗余度"(Redundancy)。
如果一本書重復的內容很多,它的信息量就小,冗余度就大。不同語言的冗余度差別很大,而漢語在所有語言中冗余度是相對小的。這和人們普遍的認識”漢語是最簡潔的語言"是一致的。
信息熵正是對不確定性的衡量,因此信息熵可以直接用于衡量統計語言模型的好壞。
信息論中僅次于熵的另外兩個重要的概念是“互信息”(Mutual Information) 和“相對熵”(Kullback-Leibler Divergence)。 互信息是信息熵的引申概念,它是對兩個隨機事件相關性的度量。
2804#數學之美-檢索原理——布爾運算
George Boole是十九世紀英國一位小學數學老師(他生前沒有人認為他是數學家,原因就是布爾運算本身= =)。
布爾在工作之余,喜歡閱讀數學論著、思考數學問題。1854 年“思維規律”(An Investigation of the Laws of Thought, on which are founded the Mathematical Theories of Logic and Probabilities)一書,第一次向人們展示了如何用數學的方法解決邏輯問題。
布爾運算所包含的元素運算的元素只有兩個1 (TRUE, 真) 和 0。直到 1938 年Shanon在他的碩士論文中指出用布爾代數來實現開關電路,才使得布爾代數成為數字電路的基礎。所有的數學和邏輯運算,加、減、乘、除、乘方、開方等等,全部能轉換成二值的布爾運算。
早期的文獻檢索查詢系統大多基于數據庫,嚴格要求查詢語句符合布爾運算。今天的搜索引擎相比之下要聰明的多,它自動把用戶的查詢語句轉換成布爾運算的算式。當然在查詢時,不能將每篇文獻掃描一遍,來看看它是否滿足上面三個條件,因此需要建立一個索引。
因此,整個索引就變得非常之大,以至于不可能用一臺計算機存下。大家普遍的做法是根據網頁的序號將索引分成很多份(Shards),分別存儲在不同的服務器中。每當接受一個查詢時,這個查詢就被分送到許許多多服務器中,這些服務器 同時并行處理用戶請求,并把結果送到主服務器進行合并處理,最后將結果返回給用戶。不管索引如何復雜,查找的基本操作仍然是布爾運算。
布爾運算把邏輯和數學聯系起來了。它的最大好處是容易實現和速度快,這對于海量信息查找非常關鍵。
不足是只能給出是與否的判斷,而不能給出量化的度量。因此所有搜索引擎在內部檢索完畢后,都要對符合要求的網頁根據相關性排序,然后才返回給用戶。
2805#數學之美-圖論
離散數學是當代數學的一個重要分支,也是計算機科學的數學基礎。它包括數理邏輯、集合論、圖論和近世代數四個分支,數理邏輯便基于布爾運算。簡歷搜索引擎的引索主要依靠圖論中的遍歷算法(Traverse),圖論的起源可追溯到數學家歐拉。
關于圖的算法有很多,但最重要的是圖的遍歷算法,也就是如何通過弧訪問圖的各個節點。
此處介紹了兩種圖的算法,以地圖繪制為例,為了達到通過弧訪問圖的每個節點,可以分為:“廣度優先算法”(BFS),盡可能廣地訪問每個節點所直接連接的其他節點;
”深度優先算法”(DFS),因為它是一條路走到黑。
圖論的遍歷算法可以理解為,互聯網是一張大地圖,每個網頁是一個節點,超鏈接是連接他們的弧。瀏覽器是通過這些隱含的網址轉到相應的網頁中的。這些隱含在文字背后的網址稱為”超鏈接"。有了超鏈接,我們可以從任何一個網頁出發,用圖的遍歷算法,自動地訪問到每一個網頁并把它們存起來。完成這個功能的程序叫做網絡爬蟲,或者在一些文獻中稱為"機器人" (Robot)。
在網絡爬蟲中,我們使用一個稱為"哈希表"(Hash Table)的列表而不是一個記事本紀錄網頁是否下載過的信息。因此,一個商業的網絡爬蟲需要有成千上萬個服務器,并且由快速網絡連接起來。如何建立這樣復雜的網絡系統,如何協調這些服務器的任務,就是網絡設計和程序設計的藝術了。
在計算機中一個好的算法,應該向阿卡 47 沖鋒槍那樣簡單、有效、可靠性好而且容易讀懂(或者說易操作),而不應該是故弄玄虛。Google 工程師Amit Singhal就是為 Google 設計阿卡 47 沖鋒槍的人,在公司內部,Google 的排序算法便是以他的名字命名的。Singhal早年是從搜索大師Salton,畢業后就職于AT&T 實驗室,并在這里確立了他在學術界的地位。
2806#數學之美-余弦定理與新聞分類
余弦定理和新聞的分類似乎是兩件八桿子打不著的事。但是它們確有緊密的聯系。具體說,新聞的分類很大程度上依靠余弦定理。Google 的新聞是自動分類和整理的。所謂新聞的分類無非是要把相似的新聞放到一類中。計算機其實讀不懂新聞,它只能快速計算。這就要求我們設計一個算法來算出任意兩篇新聞的相似性。為了做到這一點,我們需要想辦法用一組數字來描述一篇新聞。
向量代數中,向量實際上是多維空間中有方向的線段,如果兩個向量的方向一致(夾角為0)那么這兩個向量就相近。確定兩向量是否一致,就用到余弦定理計算向量夾角了。
任何一段信息文字,都可以對應一個不太長的隨機數,作為區別它和其它信息的指紋(Fingerprint)。只要算法設計的好,任何兩短信息的指紋都很難重復,如同人類指紋。新信息指紋在加密、信息壓縮和處理中有著廣泛的應用。
產生信息指紋的關鍵算法是偽隨機數產生器算法prng,最早的prng算法是由馮諾伊曼提出來的。他的辦法很簡單,即將一個數的平方掐頭去尾,取中間的幾位數。e.g. 一個四位的二進制數 1001(相當于十進制的9),其平方為 01010001 (十進制的 81)掐頭去尾剩下中間的四位 0100。當然這種方法產生的數字并不很隨機,也就是說兩個不同信息很有可能有同一指紋。
信息指紋的用途遠不止網址的消重,信息指紋的的孿生兄弟是密碼。信息指紋的一個特征是其不可逆性, 也就是說,無法根據信息指紋推出原有信息,這種性質正是網絡加密傳輸所需要的。值得一提的事,SHA1以前被認為是沒有漏洞的,現在已經被中國的王小云教授證明存在漏洞。