原文引自 豆瓣《數(shù)學之美》-筆記總結
第1章 文字和語言vs數(shù)字和信息
講述了文字、數(shù)字和語言的歷史,目的是幫助讀者感受語言和數(shù)字的內在聯(lián)系。
任何事物的規(guī)律性是內在的,不隨著載體的改變而改變。
通信方式:信息源編碼——信道傳播——接收者解碼
文字和數(shù)字的歷史:
簡單的聲音不能滿足溝通的需求,語言由此產(chǎn)生——隨著對新鮮事物的學習,用來描述共同因素的語言被抽象成詞匯——語言和詞匯多到難以記憶,便產(chǎn)生了文字——文字多到難以記憶時,概念的概括和歸納就開始了——文字按照意思來聚類會產(chǎn)生歧義,可以利用上下文來消除——不同文明相互融合,于是產(chǎn)生翻譯——記錄物件數(shù)量,計數(shù)系統(tǒng)產(chǎn)生(10位以內掰指頭,10位后使用10進制,后產(chǎn)生數(shù)量級)——阿拉伯數(shù)字的產(chǎn)生標志著數(shù)字和文字的分離,奠定了數(shù)學未來的發(fā)展。
【事物發(fā)展到一定階段時,會變得復雜起來,這時會有新的事物來代替它。新的事物看起來簡單,但這種簡單也是它的復雜性之所在,因為它又需要其它事物來進行解釋。從這方面來說,事物之間并不存在好壞之分,放到合適的位置上便是好的。】
關于翻譯:
翻譯之所以能達成,是因為不同的文字在記錄信息上的能力是等價的。即文字只是信息的載體,而非信息本身。信息冗余是信息安全的保障,只要有一份內容完好保存下來,原有信息就不會丟失。雙語或者多語的對照語料對翻譯至關重要,它是機器翻譯的基礎。
文字和語言背后的數(shù)學:
楔形/象形文字誕生——為方便雕刻,簡化成22個字母——為方便學習,拼寫和讀音結合(將物體外表編碼為抽象概念,常用字短,生僻字長)——為節(jié)省信道,傳播信息前需進行壓縮,接收后再解壓,并校驗——語法使語言表達更準確、更豐富
關于語言、語法:
語言堅持從真實語句文本(即語料)出發(fā),語法堅持從規(guī)則出發(fā),前者在自然語言處理上獲勝。
第2章 自然語言規(guī)則——從規(guī)則到統(tǒng)計
自然語言的發(fā)展:
第一階段,局限在人類學習語言的方式上(即句法分析);第二階段,基于數(shù)學模型和統(tǒng)計的方法,并取得突破。
句法分析:
將句子分為主語、謂語、句號三部分,然后對每一個部分進行分析,得到語法分析樹。
不足在于:一個短短的句子需要很復雜的文法規(guī)則,這些文法規(guī)則寫到后來甚至會出現(xiàn)矛盾,為了解決這些矛盾,還需要說明各個規(guī)則特定的使用環(huán)境;自然語言中的詞很難用文法去描述,嚴重依賴于上下文,甚至是“世界知識”或者“常識”,所以很難用計算機去解析。
基于統(tǒng)計方法的發(fā)展:
上世紀70年代,IBM利用統(tǒng)計方法將語音識別率從70%提到90%,基于統(tǒng)計的方法核心模型是通信系統(tǒng)加隱含馬爾科夫模型(這個系統(tǒng)的輸入輸出都是一維符號系列,且保持原有次序);
80年代,IBM提出提出基于統(tǒng)計的機器翻譯方法,因數(shù)據(jù)、模型欠缺,解決不了語序顛倒問題;
90年代,隨著計算機能力的提高和數(shù)據(jù)量的增加,統(tǒng)計方法得以實現(xiàn)
第3章 統(tǒng)計語言模型
講述如何利用統(tǒng)計語言模型處理自然語言,以及如何確保結果的準確性、減少不平滑。
統(tǒng)計語言模型:用來處理自然語言的上下文關系,它是所有自然語言處理的基礎。并廣泛應用于機器翻譯、語音識別、印刷體或手寫體識別、拼音糾錯、漢字輸入和文獻查詢。
利用概率大小來衡量一個文字序列是否能構成大家理解而且有意義的句子:
序列S出現(xiàn)的概率W,等于序列中每一個詞出現(xiàn)的條件概率相乘,W出現(xiàn)的概率同他前面的所有詞有關,即P(S)=P(W1,W2,...,Wn)=P(W1)P(W2|W1)P(W3|W1,W2)...P(Wn|W1,W2,...,W(n-1))。
由于計算復雜,所以就假設任意一個詞Wi出現(xiàn)的概率只同它前面的詞W(i-1)有關,即P(S)=P(W1)*P(W2|W1)...P(Wi|W(i-1))...P(Wn|W(n-1)))
P(W(i-1),Wi)=#(W(i-1),Wi)/# (注:#(W(i-1),Wi)為W(i-1),Wi這對詞在統(tǒng)計的文本中前后相鄰出現(xiàn)的次數(shù),#為語料庫的大小)
N-1階馬爾科夫模型:
假設文本中的每個詞Wi和前面的N-1個詞有關系,而與更前面的詞無關,則P(Wi|W1,W2,...,W(i-1))=P(Wi|W(i-n+1),W(i-n+2),...,W(i-1))。
n=1的一元模型實際上是一個上下文無關的模型,n的值一般為2,或3。n值很少取更高值的原因,一是n越大,復雜度n方越大;二是自然語言中上下文的相關性可能跨度非常大,甚至可以從一個段落跨到另一個段落,所以即使模型階數(shù)n再高,也沒有太多意義。這是馬爾科夫假設的局限。
模型的訓練:通過對語料的統(tǒng)計,得到模型中的參數(shù)。
大數(shù)定理: 在試驗不變的條件下,重復試驗多次,隨機事件的頻率近似于它的概率。偶然中包含著某種必然。
我們需要足夠的語料才能得到較為可靠的概率。然而語料過多,可能會導致大部分條件概率為0的情況,這種模型叫做“不平滑”。
減少不平滑:
古德-圖靈估計,對于沒有看見的事件,我們不能認為它的發(fā)生概率就是零,因此我們從概率的總量中,分配一個很小的概率給予這些沒有看見的事件。這樣一來,看見的時間的概率總和就要小于1了。即“越是不可信的統(tǒng)計折扣越多”。
設語料庫中出現(xiàn)r次的詞有Nr個,則當r比較小時,它的統(tǒng)計可能不可靠,經(jīng)過古德-圖靈估計后的相對頻度r’=(r+1)*N(r+1)/N(r).
刪除插值法,因為一元組(Wi)出現(xiàn)的次數(shù)平均比二元組(W(i-1),Wi)出現(xiàn)的次數(shù)要高得多,根據(jù)大數(shù)定理,它的頻度更接近概率分布。所依,用低階語言模型和高階模型進行線性差值來達到平滑的目的。即連續(xù)三個字出現(xiàn)的概率=T倍連續(xù)三個字出現(xiàn)的概率+t倍連續(xù)兩個字出現(xiàn)的概率+(1-T-t)倍該字單獨出現(xiàn)的概率
語料的選取:
訓練語料和模型應用的領域須保持一致,以減少噪音;語料數(shù)據(jù)通常是越多越好,可以利用平滑過渡方法解決小/零概率事件;最好能預處理能具有規(guī)律的、量比較大的噪音。
第4章 談談中文分詞
利用統(tǒng)計模型進行自然語言處理,這些語言模型是建立在詞的基礎上的,因為詞是語義的最小單位。在此之前,需要對句子進行分詞。
常見分詞方法——查字典:
把一個句子從左往右掃描一遍,遇到字典里有的詞就標識出來,遇到復核詞(如“上海大學”)就找最長的詞匹配,遇到不認識的字串就分割成單字詞。該方法能解決七八成問題,然而對二義性的分割無能為力(如發(fā)展-中-國家、發(fā)展-中國-家)。
處理二義性:
最好的分詞方法應該保證分完詞后,該句子出現(xiàn)的概率最大,但是如果窮舉所有的分詞方法并計算所有可能的概率,計算率太大。對此,不同的應用,分詞的顆粒度應采用不同的大小,即不同的應用應該有不同的分詞系統(tǒng)。
關于詞的顆粒度和層次:
不同的人對詞的切分方法差異甚大,其主要原因是對詞的顆粒度的認識不一致。在不同的應用中,詞的顆粒度可能很不一樣,如在機器翻譯中,顆粒度大翻譯效果好,在網(wǎng)頁搜索中則相反。如果對不同的應用構造不同的分詞系統(tǒng),會很浪費,最好的方法是讓一個分詞器同時支持不同層次的詞的切分,然后由不同的應用自行決定采用哪個顆粒的切分。
分詞器的準確性:
應避免越界型錯誤、覆蓋型錯誤、顆粒不一致。越界型錯誤,如“北京大學生”分為“北京大學——生”。覆蓋型錯誤,如"賈里尼克”拆成了四個字。錯誤要盡可能消除。關于顆粒不一致,需要多做些數(shù)據(jù)挖掘工作,完善不同應用的復合詞詞典。
第5章 隱含馬爾可夫模型
通信的過程本質上就是:發(fā)送者編碼——信道傳播——接收者解碼。如何根據(jù)接收端的觀測信號O1,O2,...O3...來推測信號源的發(fā)送信息S1,S2,S3,...呢?我們需要從所有的信息源中找到最可能產(chǎn)生觀測信號的那一個信息。
隱含馬爾可夫模型:
假設模型在每個時刻t會輸出一個符號Ot,而且Ot僅和St相關(即馬爾科夫假設),我們可以計算出某個特定狀態(tài)序列S1,S2,S3,...產(chǎn)生輸出符O1,O2,...O3...號的概率。如何讓找到概率最大值,需運用維特比算法(后面會提到)。(注:St可能會生成Ot,即生成概率;也可能會轉化為S(t-1),即轉移概率)
隱含馬爾科夫模型的訓練:
首先有三個基本問題:1、給定一個模型,如何計算某個特定輸出序列的概率;2、給定一個模型和某個特定的輸出序列,如何找到最可能產(chǎn)生這個輸出的狀態(tài)序列;3、給定足夠的觀測數(shù)據(jù),如何估算隱含馬爾可夫模型的參數(shù)。
問題1可參考賈里尼克《Statistical Methods for Speech Recognition 》,問題2使用維特比算法來解碼(后面會提到)。
關于問題3。通過大量的觀察信號推測模型參數(shù)的生成概率、轉移概率,以尋找最可能的模型,主要使用的是鮑穆-韋爾奇算法。首先,找到能夠產(chǎn)生O序列的模型參數(shù);然后,計算出這個模型產(chǎn)生O的概率,以及產(chǎn)生O的所有可能路徑和產(chǎn)生這些路徑的概率。最終,計算出一組新的模型參數(shù),根據(jù)新的模型參數(shù)再繼續(xù)尋找更好的模型參數(shù)。以此類推,直到目標函數(shù)的輸出概率達到最大化。這個過程被稱為期望最大化,即EM。EM能保證算法收斂到一個局部最優(yōu)點,卻不能保證找到全局最優(yōu)點。
第6章 信息的度量和作用
信息嫡:即我們弄清楚一件事所需要的信息量。信息量就等于不確定性的多少。假設一件事由n部分組成,每件事發(fā)生的概率為p(i),則該事信息嫡為H=-(p1.logp1+p2.logp2+...+pn.logpn),單位是比特。可以用來衡量統(tǒng)計語言模型的好壞。
信息的作用在于消除不確定性,這些信息可以針對事物本身,也可以是與關注對象相關的信息。
條件嫡:假定x和y是兩個隨機變量,我們知道了y隨x一起出現(xiàn)的概率,以及x的概率,那我們就可以求出y的概率。
互信息就是對兩個隨機事件“相關性”的量化度量。例舉互信息在解決詞義二義性上的運用,bush一詞可以解釋為:灌木叢、布什,區(qū)分辦法如下:首先從大量文本中找出和總統(tǒng)布什一起出現(xiàn)的互信息最大的一些詞,比如:總統(tǒng)、美國、國會等;同理找出和灌木叢一起出現(xiàn)的互信息量大的詞,比如土壤、樹木、植物等。翻譯時,看看上下文中哪類相關的詞多就可以了。
相對嫡也可以用來衡量兩個取值為正數(shù)的函數(shù)相關性。相對嫡越大,兩個函數(shù)的差異越大;反之差異越小。對于概率分布或者概率密度函數(shù),如果取值均大于零,相對嫡可以度量兩個隨機分布的差異性,如用來衡量兩個常用詞在不同文本中的概率分布,看它們是否同義,或者根據(jù)兩篇文章中不同詞的分布,看看它們的內容是否相近。
因為有了上下文條件,所以對于高階的語言模型,應該用條件嫡;如果再考慮從訓練語料和真實應用的文本中得到的概率函數(shù)有偏差,就需要再引入相對嫡的概念。
第7章 賈里尼克和現(xiàn)代語言處理
賈里尼克和作者花在學校里讀書的時間比99%的孩子都少,卻比他們的建樹都高。他們都認為,第一,小學生沒和中學生其實沒必要花那么多時間讀書,而他們的社會經(jīng)驗、生活能力以及在那時樹立起的志向將幫助他們的一生。第二,中學階段花很多時間比同伴多讀的課程,在大學以后用非常短的時間就可以讀完,因為大學階段,人的理解力要強得多。第三,學習是一輩子的事,興趣是最好的動力。第四,書本的內容可以早學,也可以晚學,但是錯過了成長階段確是無法彌補回來的。
第8章 簡單之美——布爾代數(shù)和搜索引擎的應用
技術分為術和道兩種,具體的做事方法是術,做事的原理和原則是道。追求術的人一輩子工作都很辛苦,只有掌握了搜索的本質和精髓才能游刃有余。真正做好一件事沒有捷徑,作者在Google做搜索時,每天至少要分析20個左右不好的搜索結果。
搜索引擎的原理:自動下載盡可能多的網(wǎng)頁;建立快速有效的索引;根據(jù)相關性對網(wǎng)頁進行公平準確的排序。
布爾代數(shù):元素(真、假)、基本運算(與、或、非)。文獻檢索時,需要根據(jù)是否含關鍵字返回相應的參數(shù):真或假。這樣邏輯推理和計算就合二為一了。
索引:是一張大表,表的每一行對應一個關鍵字,以及包含該關鍵字的文獻序號。為方便網(wǎng)頁排名,索引中還有一些附加信息,諸如每個詞出現(xiàn)的位置、次數(shù)等等,使得索引變得非常之大,一臺服務器難以存儲。普遍的做法是根據(jù)網(wǎng)頁的序號將索引分成很多份,分別存儲在不同的服務器中,這些服務器同時并行處理用戶的請求,并把結果送到主服務器進行合并處理,最終將結果返回給用戶。
需要根據(jù)網(wǎng)頁的重要性、質量和訪問的頻率建立常用和非常用等不同級別的索引。常用的索引需要訪問速度快、更新快,附加信息多。
真理在形式上從來是簡單的,而不是復雜和含混的。
第9章 圖論和網(wǎng)絡爬蟲
圖論中的遍歷算法:
圖論中的圖由一些節(jié)點和連接這些節(jié)點的弧組成。順著弧把所有的節(jié)點都走一遍,記錄訪問過的節(jié)點,同時避免多次訪問或漏掉某個節(jié)點,該方法叫做遍歷。常見遍歷算法有廣度優(yōu)先(BFS-盡可能廣得訪問每一個節(jié)點所直接連接的其他節(jié)點)和深度優(yōu)先(DFS-從頭一路走到黑)。
網(wǎng)絡爬蟲:有了超鏈接,我們可以利用遍歷算法,自動地訪問每一個網(wǎng)頁,并把它們存起來。完成該功能的程序即網(wǎng)絡爬蟲。
圖論定理:如果一個圖能夠從一個頂點出發(fā),每條邊不重復地遍歷一遍回到這個頂點,那么每個頂點的度必須為偶數(shù)。(若想回到頂點,則有多少出去的邊,就要有多少進入的邊)
構建網(wǎng)絡爬蟲的工程要點:
1、采用BFS還是DFS?即如何在有限的時間里最多地爬下最重要的網(wǎng)頁。
對于某個網(wǎng)站來說,首頁最重要,其次是首頁的鏈接,鏈接越深越相對不重要。所以,在下載某一個互聯(lián)網(wǎng)的具體內容時,BFS優(yōu)先于DFS。
但是,在網(wǎng)路通信的握手成本上,DFS優(yōu)先于BFS。“握手”就是指下載服務器網(wǎng)站和網(wǎng)站服務器建立通信的過程。如果握手的次數(shù)太多,下載的效率就降低。對于某個網(wǎng)站,一般是由特定的一臺或幾臺服務器專門下載。這些服務器下載完一個網(wǎng)站,再去下載另一個網(wǎng)站,而不是先下載一部分,再來回折騰。
所以,同時存在DFS、BFS。有一個調度系統(tǒng)來存儲那些已經(jīng)發(fā)現(xiàn)但尚未下載的網(wǎng)頁URL,且按優(yōu)先級排列。
2、頁面的分析和URL的提取
以html語言書寫的網(wǎng)頁,解析起來比較簡單;以腳本js等書寫網(wǎng)頁,解析起來較為困難,需要做瀏覽器的內核工程師來做。
3、記錄哪些網(wǎng)頁URL已經(jīng)下載過——哈希表
如果同時有上千臺服務器一起下載網(wǎng)頁,維護一張統(tǒng)一的哈希表就比較麻煩。首先,哈希表會大到一臺服務器存儲不下,其次由于每個下載服務器在開始下載前和完成下載后都需要訪問和維護這張表,以免不同的服務器重復工作,存儲這張哈希表的服務器的通信就成為了整個爬蟲系統(tǒng)的瓶頸。
好的方法一般采用兩個技術:首先明確每臺服務器的分工,也就是在調度時一看到某個URL就知道要交給哪臺服務器去下載,這樣就避免了很多服務器對同一個URL做出是否要下載的判斷。然后,在明確分工的基礎上,可以批量判斷URL是否下載,比如每次向哈希表發(fā)送一大批詢問,或者每次更新一大批哈希表的內容,以減少通信的次數(shù)。
第10章 PageRank——Google民主表決式網(wǎng)頁排名技術
對于一個特定的查詢,搜索結果取決于網(wǎng)頁的質量信息,和這個查詢與每個網(wǎng)頁的相關性信息。
pagerank算法核心思想:如果一個網(wǎng)頁被很多其他網(wǎng)頁所鏈接,說明它受到普遍的承認和信賴。比如說,對于來自不同網(wǎng)頁的鏈接區(qū)別對待,因為網(wǎng)頁排名高的網(wǎng)頁鏈接更可靠,于是要給這些鏈接以較大的權重。
計算結果的網(wǎng)頁排名需要用到網(wǎng)頁本身的排名。布林破解了這個怪圈,把這個問題變成了一個二維矩陣相乘的問題。先假設所有的網(wǎng)頁排名是相同的,并根據(jù)這個初始值,算出各個網(wǎng)頁的第一次迭代排名,然后根據(jù)第一次迭代排名算出第二代的排名。
網(wǎng)頁排名的高明之處在于它把整個互聯(lián)網(wǎng)系統(tǒng)當作一個整體對待。以前的信息檢索把每個網(wǎng)頁當做獨立的個體對待,只注意到網(wǎng)頁內容和查詢語句的相關性,忽略了網(wǎng)頁之間的關系。
pagerank的計算方法
假定向量B=[b1;b2;...bn]為第一、第二...第n個網(wǎng)站的網(wǎng)頁排名。初始值為B0=[1/n;1/n...;1/n]
矩陣A=[a11 ...a1n...a1m;...;am1...amn...amm;...;am1 ...amn...amm]為網(wǎng)頁之間的鏈接數(shù)目,其中amn代表第m個網(wǎng)頁指向第n個網(wǎng)頁的鏈接數(shù)。A已知,B未知。
假定Bi是第i次迭代結果,那么Bi=A*Bi-1。最終Bi會收斂于B,當Bi與Bi-1的結果差異非常小時,就可以停止迭代運算。(注:計算訪問概率較小的網(wǎng)站時,需要做平滑處理)
第11章 如何確定網(wǎng)頁和查詢的相關性
搜索關鍵詞權重的科學度量TF-IDF
某關鍵詞頻率TF=關鍵詞的次數(shù)/該網(wǎng)頁的總字數(shù)。這個查詢和該網(wǎng)頁的相關度=TF1+TF2+...+TFn。由于每個詞的重要程度不一樣,所以給每個詞設置權重時,需滿足如下兩個條件:
1、一個詞的預測主題能力越強,權重越大;反之,權重越小。
2、停止詞的權重為零。如果一個詞只在很少的網(wǎng)頁中出現(xiàn),通過它就容易鎖定目標,它的權重也就應該大;反之,類似“的、是”等詞,權重應該小。概括地將,假定一個詞w在Dw個網(wǎng)頁中出現(xiàn)過,那么Dw越大,w的權重越小。使用最多的權重是“逆文本頻率指數(shù)”,即IDF=log(D/Dw),其中,D是全部網(wǎng)頁數(shù)。
所以,得到相關性的計算公式TF-IDF=TF1IDF1+TF2IDF2+...+TFn*IDFn
TF-IDF的信息論依據(jù)??P136
第12章 地圖和本地搜索的最基本技術
智能手機的定位和導航功能涉及3個關鍵技術:利用導航儀進行衛(wèi)星定位,地址的識別,根據(jù)用戶輸入的起點和終點,在地圖上規(guī)劃最短路線或者最快路線。
有限狀態(tài)機:是一個特殊的有向圖,包括一些狀態(tài)(節(jié)點)和連接這些狀態(tài)的有向弧。每一個有限狀態(tài)機有一個開始狀態(tài)和一個終止狀態(tài),以及若干中間狀態(tài)。每一條弧上帶有從上一個狀態(tài)進入下一個狀態(tài)的條件。如果輸入的符號可以從狀態(tài)機的開始狀態(tài)經(jīng)過中間狀態(tài),走到終止狀態(tài),那么這條地址就有效,否則無效。
有限狀態(tài)機是一個五元組,輸入符號的集合、非空的有限狀態(tài)的集合S、初始狀態(tài)S0、從輸入到有限狀態(tài)的映射函數(shù)、終止狀態(tài)。如果輸入和輸出的可能性不同,也可以給賦予每條邊權重。
使用有限狀態(tài)機識別地址,關鍵要解決兩個問題,即通過一些有效的地址建立狀態(tài)機,以及地址字串的匹配算法。
有限狀態(tài)機只能進行嚴格匹配,當用戶輸入存在錯誤時,則無法識別。基于概率的有限狀態(tài)機可以解決該問題(效果等同馬爾可夫鏈,相當于給每個有向弧加上概率)
動態(tài)規(guī)劃——解決最短路徑:
加權圖:一個抽象的圖包括節(jié)點和連接他們的弧,以及每條弧的權重。找到一個圖中給定兩點間的距離,最直接的辦法就是計算出所有的路徑權重,找出最優(yōu)的。不過可能路徑數(shù)量隨著節(jié)點數(shù)的增長而成指數(shù)增長,復雜度過高。
假設已經(jīng)找到了從北京到廣州的最短路徑,且經(jīng)過鄭州,那么從北京到鄭州的這條子徑也是所有從北京到鄭州的路線中最短的。反過來想,如果想要找到從北京到廣州的最短路線,先要找到北京到鄭州(即某個必經(jīng)的中間節(jié)點)的最短路線。如何找到必經(jīng)的中間節(jié)點?
只要在圖上橫切一刀,這一刀一定要保證將任何從北京到廣州的路線一分為二(怎么切??)。那么從廣州到北京的最短路徑必須經(jīng)過這一條線上的某個城市。我們可以先找到從北京出發(fā)到這條線上所有城市的最短路徑,最后得到的全城最短路線一定包括這些局部最短路線中的一條,這樣,就可以將一個“尋找全城最短路線”的問題,分解成一個個尋找局部最短路線的小問題。
第13章 Google ak-47 的設計者
從辛格身上學到的:
先幫助用戶解決80%的問題,再慢慢解決剩下20%的問題。一開始追求大而全,可能長時間不能完成,最后不了了之。
堅持選擇簡單方案的另一個原因是容易解釋每一個步驟和方法背后的道理,這樣不僅便于出了問題時查錯,而且容易找到今后的改進目標。
第14章 余弦定理和新聞分類
總結:求特征向量時,要先計算TF-IDF(即每篇文章中關鍵詞的詞頻 乘以 關鍵詞的權重。權重與關鍵詞在語料庫文章中的集中/分散程度,以及關鍵字在文章中的位置有關。)。計算余弦相似度時,要注意矩陣存儲大小及計算復雜度。
對于一篇新聞中所有的實詞,計算出它們的TF-IDF值,沒有出現(xiàn)的詞的TF-IDF為零。把這些詞按照對應的實詞在詞匯表的位置依次排列,就得到一個多維向量,即該新聞的特征向量,向量中每一個維度的大小代表每個詞對這篇新聞主題的貢獻度。
同一類新聞一定是某些主題詞用得較多,即它們的特征向量在某幾個維度上的值都比較大。如果不屬于同一類,則較大的特征向量應該沒什么交集。由于每篇新聞的文本長度不同,所以特征向量各個維度的數(shù)值也不同。單純比較各個維度的大小沒有太大意義。但是向量的方向卻有很大意義。如果兩個向量的方向一字,說明對應的新聞用詞的比例也基本一致。因此可以利用余弦定理計算兩個向量的夾角來判斷對應新聞主題的接近程度。
有兩種計算方法:
第一種假設我們已知一些新聞類別的特征向量,計算出要被分類的新聞和各類新聞特征向量的余弦相似性,余弦越小,相似度越高。
第二種假設我們不知道這些新聞類別的特征向量,則我們要計算出所有新聞兩兩之間的余弦相似性,把相似性大于一個閾值的新聞合并成一個小類,然后把每個小類中的所有新聞作為一個整體,并計算出小類的特征向量,再計算出所有小類之間兩兩的余弦相似性,然后把小類合并成大一點的小類,以此類推,直到小類之間的余弦相似度很小時,就可以停止迭代了。
計算向量余弦的技巧:
計算N篇新聞之間的兩兩相關性,一次迭代計算復雜度為N方,計算量較大。簡化方法如下:首先,分母(向量的長度)不需要重復計算,第一次計算余弦以后,長度可以存起來。其次,只考慮向量中的非零元素即可,這樣一來復雜度取決于兩個向量中非零元素個數(shù)的最小值。第三,刪除虛詞,如“因為、是、的、如果”等等,既提高了計算速度,又減少了干擾。
標題中的詞對主題的貢獻要大于正文中的;出現(xiàn)在文章首尾中的詞比中間部分的詞重要。所以,可以對重要位置的詞進行額外的加權,以提高文本分類的準確性。
第15章 矩陣運算和文本處理中的兩個分類問題
將文本按主題歸類與將詞匯表中的詞按意思歸類,需要多次迭代計算相似度,耗時較長。可以利用矩陣運算中的奇異值分解來一次性計算相關性。
首先,要用一個大矩陣A描述成千上萬篇文章和百萬個詞的關聯(lián)性。在矩陣中,每一行對應一篇文章,每一列對應一個詞,導致矩陣非常大。奇異值分解就是將大矩陣分解成三個小矩陣相乘。
第一個矩陣X是對詞進行分類的一個結果,每一行代表一個詞,每一列表示一個語義相近的詞類。第三個矩陣Y是對文本分類的結果,每一列對應一個文本,每一行對應一個主題,每一列可以只保留最大值,其余的都改為零,那么每一篇文本都被唯一地分到一類主題中。中間的矩陣B則表示詞的類和文章的類之間的相關性,每一行代表一篇文章,每一列代表一個詞。
A=X *B *Y。分解后,可以同時完成近義詞分類和文章的分類,以及每個主題和每個詞的語義類之間的相關性。
相比于利用文本特征向量余弦的距離自底向上聚類的方法,奇異值分解的優(yōu)點是能較快速地得到結果,因為它不需要一次次迭代。但這種方法得到的分類結果略顯粗糙。實際工作中,可以先進行奇異值分解得到粗分類結果,再利用計算向量余弦的方法,在粗分類結果的基礎上,迭代得到更精確的結果。
P169奇異值分解的方法??
第16章 信息指紋及其應用
一段文字所包含的信息,就是它的信息嫡。如果對這段信息進行無損壓縮編碼,理論上編碼后的最短長度就是它的信息嫡。但是,如果僅僅要區(qū)分兩段文字或者圖片,則遠不需要那么長的編碼。任何一段信息,都可以對應一個不太長的隨機數(shù),作為區(qū)分它和其他信息的指紋。
信息指紋的用途:
網(wǎng)址消重:比如一般網(wǎng)址由字符串組成,長度不固定,所以查找困難,占用容量較大。可以將字符串看成是一個特殊的、長度很長的整數(shù),利用偽隨機數(shù)產(chǎn)生算法器,將其轉換成特定長度的偽隨機數(shù),即信息指紋。
密碼:cookie也是一種信息指紋,網(wǎng)站無法根據(jù)信息指紋了解用戶的身份,這樣可以起到保護隱私的作用。信息指紋具有不可逆性。
網(wǎng)絡爬蟲:可以利用信息指紋判斷一個網(wǎng)址是否已經(jīng)下載過。
判定集合相同:計算兩個集合元素的信息指紋,由于加法的交換律,保證集合的指紋不因元素出現(xiàn)的次序而改變,如果兩個集合元素相同,那么它們的信息指紋一定相同。
判定集合基本相同:比較兩個網(wǎng)頁是否相同,只需找出每個網(wǎng)頁中IDF最大的幾個詞,計算并比較他們的信息指紋。
反盜版:提取并比較視頻的關鍵幀
P151相似哈希計算方法?(能看懂,原因??)
第17章 由電視劇《暗算》所想到的
加密的過程可以看做是一個函數(shù)的運算F,解密的過程是反函數(shù)運算。明碼是自變量,密碼是函數(shù)值。好的加密函數(shù)不應該通過幾個自變量和函數(shù)值就能推導出函數(shù)。
一般來講,當密碼之間分布均勻并且統(tǒng)計獨立時,提供的信息最少。均勻使得敵人無從統(tǒng)計,而統(tǒng)計獨立能夠保證敵人即使看到一段密碼和明碼后,不能破譯另一段密碼。
設計一個密碼系統(tǒng):
1、找兩個很大的素數(shù)(質數(shù))P和Q,越大越好,然后計算他們的乘積:
N=P * Q,M=(P-1)*(Q-1)
2、找一個和M互素的整數(shù)E,找一個整數(shù)D,使得E*D mod M=1(mod為兩個表達式作除法運算后的余數(shù))。E是公鑰,誰都可以用來加密,D是私鑰用于解密,一定要自己保存好。乘積N是公開的。
3、用公式對X加密,得到密碼Y= X的E次方 mod N。根據(jù)費爾馬小定理,得到:X=Y的D次方 mod N,所以要解密,必須知道D。
公開密鑰的好處有:簡單,只涉及一些乘法;可靠,公開密鑰方法保證產(chǎn)生的密文是統(tǒng)計獨立而分布均勻的。更重要的是N、E可以公開給任何人加密使用,但只有掌握密鑰D的人才能解密;靈活,可以產(chǎn)生很多E和D的組合給不同的加密者。
該種方法破解難度較大,破解的最好辦法是對大數(shù)N進行因式分解,即通過N反過來找P、Q,得到M、N。而找到P、Q目前只有用計算機把所有的數(shù)字試一遍的笨辦法,耗時很長。這也是為什么P、Q都需要非常大的原因。
第18章 閃光的不一定是金子——談談搜索引擎
搜索反作弊也存在道和術兩種境界:
術:分析作弊的例子,分析它,然后清除它,這種方法能解決問題,且不需要太動腦筋,但工作量較大,難以從個別現(xiàn)象上升級到普遍規(guī)律。道:通過具體的作弊例子,找到作弊的動機和本質,從本質上解決問題。
在通信中解決噪音抗干擾問題的基本思路有兩條:
從信息源出發(fā),加強通信編碼自身的抗干擾能力;從傳輸上看,過濾掉噪音,還原信息。
賣鏈接的網(wǎng)站,都有大量的出鏈。每一個網(wǎng)站到其它網(wǎng)站的出鏈數(shù)目可以作為一個向量,它是網(wǎng)站的固有特征。既然是向量就可以計算出余弦距離。通常情況下,這些網(wǎng)站的出鏈向量之間的余弦距離幾乎為1。
運用圖論。作弊網(wǎng)站一般需要互相鏈接,以提高排名。這樣就在互聯(lián)網(wǎng)這張大圖中形成了一些Clique。
第19章 談談數(shù)學模型的重要性
一個正確的模型應當在形式上是簡單的。
一個正確的模型可能一開始還不如一個精雕細琢過的錯誤模型來得準確,但是,如果我們認定大方向是對的,就應該堅持下去。
大量的準確數(shù)據(jù)對研發(fā)很重要。
正確的模型也可能受噪音干擾,而顯得不準確;這時不應該用一種湊合的修正方法來彌補它,二是要找到噪音的根源,這樣也許能通往重大的發(fā)現(xiàn)。
第20章 不要把雞蛋放到一個籃子里
最大嫡原理指出,需要對一個隨機事件分布進行預測時,我們的預測應當滿足全部已知的條件,而對未知的情況不要做任何主觀假設。在這種情況下,概率分布最均勻,預測風險最小。因為這時,概率分布的信息嫡最大,所以叫“最大嫡模型”。總結一句話就是:當我們不確定時,就要保留各種可能性。
P208最大嫡模型公式及訓練??
通用迭代算法GIS:
假定第零次迭代的初始模型為等概率的均勻分布;用第n次迭代的模型來估算每種信息特征在訓練數(shù)據(jù)中的分布,如果超過實際的,則把相應參數(shù)變小,反之,則變大;重復步驟2直至收斂。
第21章 拼音輸入法的數(shù)學原理
輸入法輸入漢字的快慢取決于對漢字編碼的平均長度,即擊鍵次數(shù)乘以尋找這個鍵所需要的時間。
拼音輸入法的優(yōu)點:第一,不需要專門學習;第二,輸入自然,不會中斷思維,也就是說找每個鍵的時間非常短。第三,因為編碼長,有信息冗余,容錯性好。如果把字換成詞,每個漢字的信息嫡將會減少。如果能更多地利用上下文相關性,當輸入一半的時候,可能已經(jīng)看到自己要找的字了。
拼音轉漢字的算法:
輸入法就是將拼音串變?yōu)闈h字串的轉換器。一個拼音可以對應多個漢字,把一個拼音對應的漢字從左到右連起來,就是一張有向圖,它被稱為網(wǎng)格圖或籬笆圖。
從第一個漢字到最后一個漢字可以對應很多很多句子,每一個句子和圖中的一條路徑一一對應。拼音輸入法就是要根據(jù)上下文在給定拼音條件下找到一個最優(yōu)的句子(可以參考隱含馬爾可夫,前后漢字關系可以只考慮二階關系,求出概率最大的句子)。
個性化的語音模型:
每個人的輸入習慣不同,可以找到大量符合用戶經(jīng)常輸入的內容和用語習慣的語料,訓練出一個用戶特定的語言模型,步驟如下:
將訓練語言模型的文本按照主題分成很多不同的類別,對于每個類,找出它們的特征向量;
統(tǒng)計某個人輸入的文本,得到他輸入的詞的特征向量Y;
計算Y和每個分類特征向量的余弦相似度,并選擇前K個和Y距離最近的類對應的文本,作為這個特定用戶的語言模型訓練數(shù)據(jù);
訓練出用戶特定的語言模型M1。大部分情況下,M1對這個用戶的輸入比通用模型M0要好。但是相對于偏僻的內容,M1覆蓋語言較少,效果就不如M0了。所以最好是綜合二者(線性關系)。
第22章 自然語言處理的教父馬庫斯
第23章 布隆過濾器
布隆過濾器實際上是一個很長的二進制向量和一系列隨機映射函數(shù)。
布隆過濾器過濾垃圾郵件的工作原理:對于每一個電子郵件地址,用8個不同的隨機數(shù)產(chǎn)生器產(chǎn)生8個信息指紋(f1,f2,...f8)。再用一個隨機數(shù)產(chǎn)生器把這8個信息指紋映射到布隆過濾器的8個二進制位,并把這8個位置的二進制全部設置為1。
如果郵件在黑名單中,該郵件經(jīng)過兩次映射最終得到的8個二進制位都是1。
布隆過濾器優(yōu)點在于快速、省空間,但是有一定的誤識別率。常見的辦法是再建立一個小的白名單,存儲那些有可能被誤判的郵件地址。
P207布隆過濾器的誤識別問題??
第24章 馬爾科夫鏈的擴展——貝葉斯網(wǎng)絡
貝葉斯網(wǎng)絡:有很多節(jié)點(狀態(tài)),節(jié)點之間通過有向弧連接,各個節(jié)點之間的相互轉化可能存在一定的概率。
首先確定貝葉斯網(wǎng)絡的結構。優(yōu)化結構要保證它產(chǎn)生的序列從頭到尾的可能性最大,即后驗概率最大。尋找全局最優(yōu)的路徑,一般采用貪婪算法,也就是在每一步時,沿著箭頭的方向尋找有限步。若要避免局部最優(yōu),就要用許多隨機數(shù)在貝葉斯網(wǎng)絡中試一試,看看是否有更好的方法。
然后,要通過參數(shù)訓練確定這些節(jié)點之間的弧的權重(參考前面提到的EM過程)。實際上,結構的訓練和參數(shù)的訓練是交替進行、不斷優(yōu)化的,直至得到收斂或者誤差較小的模型。
第25章 條件隨機場和句法分析
第26章 維特比和他的維特比算法
維特比算法是一個特殊的但應用最廣泛的動態(tài)規(guī)劃算法,維特比算法主要解決籬笆網(wǎng)絡的有向圖的最短路徑問題。它之所以重要,是因為凡是使用隱含馬爾可夫模型描述的問題都可以用它來解碼。
對于每一個給定的起始點、終止點,如果列出所有可能的路徑,從中找出最短路徑,計算復雜度呈指數(shù)增長。
P230維特比算法:假設在隱含馬爾可夫鏈中,總共有N個節(jié)點,節(jié)點最多的狀態(tài)有D個節(jié)點,也就是整個網(wǎng)格的寬度為D,那么找出任何相鄰兩個狀態(tài)節(jié)點的最短路徑的復雜度不超過 D的平方。由于網(wǎng)格的長度是N,所以整個維特比的復雜度不超過 N*D的平方。(確定節(jié)點的狀態(tài)順序??)
第27章 再談文本自動分類問題——期望最大化EM
文本的自收斂分類:
不同于TF-IDF利用余弦相似度來進行分類,這里不需要事先設定好類別,也不需要對文本兩兩比較進行合并聚類。而是隨機挑選一些類的中心,然后來優(yōu)化這些中心,使它們和真實的聚類中心盡可能一致。步驟如下:
假設有很多點隨機分布,隨機挑選k個點作為聚類的中心;分別計算出所有點到這些聚類中心的距離,將這些點歸到最近的一類中;重新計算每一類的中心(分別計算每個維度的平均值);重復上述過程,直到新的中心和舊的中心之間偏移非常非常小,即過程收斂。
如何確保期望最大化:
首先,我們的距離函數(shù)必須足夠好,能保證同一類相對距離較近,不同類相對距離較遠。我們希望最終的分類結果是:相近的點都被聚類到了一類中,即同一類中各個點到中心距離的平均距離d較近,而不同類中心之間的平均距離D較遠。
EM算法——上帝的算法:
在一般性的問題中如果有很多觀測值,可以讓計算機不斷迭代來學習一個模型。首先,根據(jù)現(xiàn)有的模型,計算出觀測數(shù)據(jù)輸入到模型中的結果,這個過程為期望值計算過程(Expectation,E過程);接下來,重新計算模型參數(shù),以最大化期望值(文本分類中是最大化D和-d),該過程為最大化過程(Maximization,M過程)。統(tǒng)稱為EM算法。
EM算法只需要有一些訓練數(shù)據(jù),定義一個最大化函數(shù),剩下的事就交給計算機了。經(jīng)過若干次迭代,達到收斂或誤差最小化,模型就訓練好了。是一個通用的算法。
EM算法不一定能得到全局最優(yōu)解,如果目標函數(shù)是凸函數(shù),就可以;如果是凹函數(shù),則可能得到的是局部最優(yōu)解。
第28章 邏輯回歸和搜索廣告
廣告搜索跟很多因素相關,如以前的經(jīng)驗值、統(tǒng)計數(shù)據(jù)的大小、擺放的位置、廣告費等等。
邏輯回歸模型
f(z)=e的z次方/(e的z次方+1)。
將一個事件出現(xiàn)的概率適應到一條邏輯曲線上。邏輯曲線是一條S型曲線,其特點是開始變化快,逐漸減慢,最后飽和。其好處是自變量范圍是負無窮到正無窮,而值域范圍限制在0~1之間,不論自變量如何組合,總能得到一個概率分布。
假設有n個影響廣告點擊率的變量x1,x2,...xn。設自變量z=k0+k1x1+k2x2+...+knxn。(ki是自回歸參數(shù),k0是一個特殊的參數(shù),保證在沒有任何信息時,有一個穩(wěn)定的分布)
可以通過最大嫡-GIS算法來訓練邏輯回歸函數(shù)的參數(shù)。
第29章 各個擊破算法和Google云計算的基礎
云計算的一個關鍵問題是,如何把一個非常大的計算問題,自動分解到許多計算能力不是很強大的計算機上,共同完成。其根本原理是分治算法。
分治算法:將一個復雜的問題,分成若干簡單的子問題進行解決。然后,對子問題的結果進行合并,得到原有問題的解。
通過分治算法實現(xiàn)矩陣相乘C=A*B:將矩陣A、B劃分為小的矩陣,分別放到不同的服務器上計算求得中間值,再進行合并。