1. 程式人生 > >【讀書筆記】數學之美2--從規則到統計

【讀書筆記】數學之美2--從規則到統計

這本書重於“道”,所以不應該著眼於其中的“術”。悟“道”才可以在今後的研究生涯中篤定地前行。

目錄

 

1.文字和語言vs數字和資訊

1.1 資訊

1.2 文字和數字

1.3 小結

2.自然語言處理

3.統計語言模型

3.1 用數學的方法描述語言規律

3.2 統計語言模型的工程訣竅

3.2.1 高階語言模型

3.2.2 模型的訓練、零概率問題和平滑方法

3.2.3 語料的選取問題

4.談談分詞

4.1 中文分詞

4.2 如何衡量分詞的結果

5.隱含馬爾可夫模型

5.1 通訊模型

5.2 隱含馬爾可夫模型

5.3 隱含馬爾可夫模型的訓練

6.資訊的度量和作用

6.1 資訊熵

6.2 資訊的作用

6.3 互資訊

6.4 相對熵

7.賈里尼克和現代語言處理


1.文字和語言vs數字和資訊

1.1 資訊

無論是語言、影象、手勢等等,它們通訊的模型都是如下圖所示,有產生、編碼、解碼、接收這幾步:

1.2 文字和數字

遠古時期的文字比較簡單、而且意思比較單一,隨著人們所需要表達的資訊的增多,文字的數量和意思也逐漸增多。而一字多意則就是--聚類,會造成歧義,於是對於單個字詞意思的判斷需要通過上下文來理解。

由羅塞塔石碑得來的指導意義:①資訊的冗餘是資訊保安的保障;②語言的資料,即語料,對於翻譯至關重要。

數字亦如文字一般,由於需要表達的不夠,於是發展出了表示大數量的數字。

1.3 小結

語言的出現是為了人類之間的通訊。字母、文字和數字實際上是資訊編碼的不同單位。任何一種語言都是一種編碼的方式,而語言的語法規則就是編解碼的演算法。

 

2.自然語言處理

早期對自然語言的解決是基於規則的,即基於語法的。後來發展成為基於統計的。所以研究方向的選取其實也要根據大環境和自己對事物本質的認知吧,因為算力的提升和大資料時代的到來,才使得基於統計的語言模型成為潮流。

 

3.統計語言模型

計算機處理自然語言,一個基本的問題:為自然語言這種上下文相關的特性建立數學模型。

3.1 用數學的方法描述語言規律

一個句子:由若干個片語成。想要看這個句子是否合理,則我們可以看它的可能性大小如何,而可能性則用概率來衡量。設一個句子S:由按順序的w1,w2,w3,...,wn詞構成。則有:

\mathbf{P(S)=P(w1,w2,...,wn) =P(w1)*P(w2|w1)*P(w3|w1,w2)\cdot\cdot \cdot P(wn|w1,w2,...w(n-1))}       (3.1)                 

基於馬爾可夫的假設,即一個詞wi出現的概率只同他前面的詞w(i-1)有關,於是上式就變成:

\mathbf{P(S)=P(w1)*P(w2|w1)*P(w3|w2)\cdot\cdot \cdot P(wn|w(n-1))}    (3.2)

上式所對應的統計語言模型是二元模型。當然,也可以假設一個詞由前面N-1個詞決定,對應的模型稍微複雜些,被稱為N元模型。

我們根據基本問題,提出了統計語言模型,則如今的任務就是如何求解模型,即求解(3.2)中的條件概率P(wi|w(i-1)),根據它的定義:

\mathbf{P(w_{i-1}|w_{i})=\frac{P(w_{i-1},w_{i})}{P(w_{i-1})}}    (3.3)

變為估計聯合概率P(wi,w(i-1))和邊緣概率P(w(i-1))。只要在語料庫中數一數w(i-1),w(i)這對詞在統計的文字中前後相鄰出現了多少次#(w(i-1),w(i)),以及w(i-1)本身在同樣的文字中出現了多少次#(w(i-1)),然後用兩個數除以語料庫的大小#,即可得到這些詞或者二元組的相對頻度,再根據大數定理,只要統計量足夠,相對頻度就等於概率:

\mathbf{P(w_{i-1}|w_{i})=\frac{P(w_{i-1},w_{i})}{P(w_{i-1})}=\frac{f(w_{i-1},w_{i})}{f(w_{i-1})}}=\frac{\#(w_{i-1},w_{i})}{\#(w_{i-1})}    (3.4)

3.2 統計語言模型的工程訣竅

3.2.1 高階語言模型

實際中應用最多的是N=3的三元模型,更高階的模型就很少使用了。N取值一般比較小的原因:

  1. N元模型的大小几乎是N的指數函式,即O(|words|^{N})
  2. 模型從3到4時,效果提升不明顯,但對資源的耗費卻增加的非常快。

3.2.2 模型的訓練、零概率問題和平滑方法

基本問題:統計樣本的不足,導致基於大數定律的統計語言模型出現可靠性問題。

解決方法:

  1. 增加資料量,但還會出現大部分條件概率依然是零的情況,這種模型我們稱之為“不平滑”
  2. 古德-圖靈估計:對於沒有看見的事件,我們不能認為它發生的概率就是零,因此我們從概率的總量中,分配一個很小的比例給這些沒有看見的事件。還要就是,對於出現次數較少的詞通過dr=(r+1)*N(r+1)/Nr來減小概率,因為當r較小時,它的統計可能不可靠。

3.2.3 語料的選取問題

  1. 訓練語料和模型應用的領域要一致;
  2. 訓練資料是越多越好;
  3. 對於能找到模式的、量比較大的噪音有必要過濾掉。

 

4.談談分詞

4.1 中文分詞

利用統計語言模型分詞的方法,假定一個句子S可以有幾種分詞的方法:

\mathbf{A_{1},A_{2},A_{3},\cdot \cdot \cdot ,A_{k}}   

\mathbf{B_{1},B_{2},B_{3},\cdot \cdot \cdot ,B_{m}}   

\mathbf{C_{1},C_{2},C_{3},\cdot \cdot \cdot ,C_{n}}

那麼最好的分詞方法應該保證分完詞後這個句子出現的概率最大。如此便可轉化為如第三章的求解。

分詞的兩點說明:①該問題已解決,不是什麼難題;②英文沒有這樣的問題。

4.2 如何衡量分詞的結果

人工分詞產生不一致性的原因主要在於人們對詞的顆粒度的認識問題。所以我們可以讓一個分詞器同時支援不同層次的詞的切分。

如圖所示:

分詞器有好有壞,這裡面的差別主要在於資料的使用和工程實現的精度。

 

5.隱含馬爾可夫模型

5.1 通訊模型

一個典型的通訊系統:

在通訊中, 大多數情況是已知接收端的觀測訊號o1,o2,o3,...來推測訊號源傳送的資訊s1,s2,s3,...。就像SLAM當中的狀態估計問題:已知輸入資料u和觀測資料z的條件下,求計算狀態x的條件概率分佈,並求取最大值時候的x。模型如下所示:

\mathbf{s_{1},s_{2},s_{3},\cdot \cdot \cdot =Arg\ Max\ P(s_{1},s_{2},s_{3},\cdot \cdot \cdot|o_{1},o_{2},o_{3},\cdot \cdot \cdot)}    (5.1)

貝葉斯公式和P(o1,o2,o3,...)=可忽略的常數(因為輸出已經產生了)可得上面公式的等價:

\mathbf{P(o_{1},o_{2},o_{3},\cdot \cdot \cdot |s_{1},s_{2},s_{3},\cdot \cdot \cdot) *P(s_{1},s_{2},s_{3},\cdot \cdot \cdot )}    (5.2)

這個公式完全可以用隱含馬爾可夫模型來估計。

5.2 隱含馬爾可夫模型

隱含馬爾可夫模型是馬爾科夫鏈(如上二元模型所述)的擴充套件:任一時刻t的狀態st是不可見的。但是隱含馬爾可夫模型在每個時刻t會輸出一個符號ot,而且ot跟st相關且僅跟st相關。這個被稱為獨立輸出假設。如圖所示:

基於馬爾可夫假設和獨立輸出假設,有:

\mathbf{P(s_{1},s_{2},s_{3},\cdot \cdot \cdot )=\prod_{t}P(s_{t}|s_{t-1})}    

\mathbf{P(o_{1},o_{2},o_{3},\cdot \cdot \cdot|s_{1},s_{2},s_{3},\cdot \cdot \cdot )=\prod_{t}P(o_{t}|s_{t})}          (5.3)

將(5.3)帶入(5.2)得

\mathbf{P(o_{1},o_{2},o_{3},\cdot \cdot \cdot |s_{1},s_{2},s_{3},\cdot \cdot \cdot) *P(s_{1},s_{2},s_{3},\cdot \cdot \cdot )=\prod_{t}P(s_{t}|s_{t-1})*P(o_{t}|s_{t})}    (5.4)

所以求解(5.1)當中的模型,就等於求解使得(5.4)取最大值時的字串(s1,s2,s3,...)。

5.3 隱含馬爾可夫模型的訓練

圍繞著隱含馬爾可夫模型有三個基本問題:

  1. 給定一個模型,如何計算某個特定的輸出序列的概率;
  2. 給定一個模型和某個特定的輸出序列,如何找到最可能產生這個輸出的狀態序列;
  3. 給定足夠量的觀測資料,如何估計隱含馬爾可夫模型的引數

解決的演算法:

  1. Forward-Backward Algorithm
  2. Vterbi Algorithm
  3. Baum-Welch Algorithm

第三個問題就是這一節要討論的模型訓練問題。這三個問題是遞進解決的。

然後我們需要估計隱含馬爾可夫模型的引數有:

  1. 轉移概率(Transition Probability):從前一個狀態s(t-1)進入到當前狀態st的概率P(st|s(t-1));
  2. 生成概率(Generation Probability):每個狀態st產生相應輸出符號ot的概率P(ot|st)。

計算或者估計這些引數的過程稱為模型的訓練。

有監督的訓練方法(Supervised Training):

若如前面統計語言模型一樣從語料庫中進行大數統計來近似概率的話,需要知道#(ot,st)--(若在機器翻譯中,則是大量的中英對照的語料,還要把中英文的片語一一對應起來),如此成本是非常高的!

無監督的訓練方法(Unsupervised Training):

因此,訓練隱含馬爾可夫模型更實用的方式是僅僅通過大量觀測到的訊號o1,o2,o3,...就能推算模型引數的P(st|s(t-1))和P(ot|st)的方法,其中主要是用的是Baum-Welch Algorithm。

Baum-Welch Algorithm的思想如下:

1.初始化模型,一個能夠產生輸出序列O的模型(如此便已知轉移概率和生成概率),稱之為\mathbf{M_{\theta 0}}

2.運用Forward-Backward和Viterbi解決問題1和2,算出這個模型產生O的概率\mathbf{P(O|M_{\theta 0})};(用於衡量模型的可靠性)

3.而且能夠找到這個模型產生O的所有可能的路徑以及這些路徑的概率(這些可能的路徑,實際上記錄了每個狀態經歷了多少次,到達了哪些狀態,輸出了哪些符號),代入以求得一組新的\mathbf{M_{\theta 1}}

     \mathbf{P(o_{t}|s_{t})=\frac{P(o_{t},s_{t})}{P(s_{t})}}

     \mathbf{P(s_{t}|s_{t-1})=\frac{P(s_{t-1},s_{t})}{P(s_{t-1})}}      (5.5)

4.再從\mathbf{M_{\theta 1}}出發,可以找到一個更好的模型\mathbf{M_{\theta 2}},並且不斷地找下去,直到輸出的概率(我們的目標函式)達到最大化(EM過程,但所求的為區域性最優點,若目標函式是凸函式(比如資訊熵),則只有一個最優點)。

 

6.資訊的度量和作用

6.1 資訊熵

在熱力學中學過,熵代表的就是不穩定性的度量,在此處一樣,代表的是不確定性的多少,也即資訊量。它們的關係就是--變數的不確定性越大,熵也就越大,要把它搞清楚,所需資訊量也就越大。

熵的定義如下:

\mathbf{H(X)=-\sum_{x\ in\ X}P(x)logP(x)}    (6.1)

熵在各元素的概率一樣大時候是最大的,在其中一個元素佔大頭時候比較小。就像世界盃裡面猜32支球隊的勝負,如果大家實力相當,則獲勝的概率差不多大,則不確定性就大了;假如像勇士一樣在NBA裡面實力值爆棚的話,它的勝率肯定是最高的,這樣不確定性就小了,進而熵就小了。

6.2 資訊的作用

資訊是消除系統不確定性的唯一辦法。那麼“相關的”資訊就能夠幫助我們消除不確定性,由此引入條件熵:

已知X的隨機分佈P(X),那麼也就知道了X的熵:

\mathbf{H(X)=-\sum_{x\ in\ X}P(x)logP(x)}   (6.1)

假定還知道Y的一些情況,包括它和X一起出現的概率即聯合概率分佈P(x,y),以及在條件概率分佈P(x|y)。定義在Y的條件下的條件熵為:

\mathbf{H(X|Y)=-\sum_{x,y\ in\ X,Y}P(x,y)logP(x|y)}    (6.2)

同理可以定義有兩個條件的條件熵:

\mathbf{H(X|Y,Z)=-\sum_{x,y,z\ in\ X,Y,Z}P(x,y,z)logP(x|y,z)}    (6.3)

可以證明:\mathbf{H(X)\geq H(X|Y)\geq H(X|Y,Z)}    (6.4)

當我們獲得的資訊和要研究的事物毫無關係時,等號成立。

所以說,自然語言處理的大量問題就是尋找相關的資訊,以消除系統的不確定性。

6.3 互資訊

由上一節可知,只有相關性的資訊才有用,那麼如何度量“相關性”呢?假定有兩個隨機事件X和Y,它們的互資訊定義如下:

\mathbf{I(X;Y)=\sum_{x,y\ in\ X,Y}P(x,y)log\frac{P(x,y)}{P(x)P(y)}}    (6.5)

\mathbf{I(X;Y)=H(X)-H(X|Y)}    (6.6)

只要有足夠的語料,就不難估計P(x,y),P(x),P(y),所以互資訊被廣泛用於度量一些語言現象的相關性。

就比如“ball”這個單詞,它的意思有“球”和“舞會”。若想要確定“ball”在一個句子中的準確意思,則可以從大量文字中找出和“球”一起出現的互資訊最大的一些詞,如籃球、運動、投射等等;再用同樣方法找出和“舞會”一起出現的互資訊最大的詞,如俊男俊女、交際、裙子、雞尾酒等等。有了這兩組詞,在翻譯“ball”時,看看上下文中哪類相關的詞多就可以了。

6.4 相對熵

相對熵,也被稱為“交叉熵”,也用來衡量相關性,但和變數的互資訊不同,它用來衡量兩個取值為正數的函式的相似性,它的定義如下:

\mathbf{KL(f(x)||g(x))=\sum_{x\ in\ X}f(x)log\frac{f(x)}{g(x)}}    (6.7)

重點在於以下三條結論:

  1. 對於兩個完全相同的函式,它們的相對熵等於零;
  2. 相對熵越大,兩個函式差異越大;反之,相對熵越小,兩個函式差異越小;
  3. 對於概率分佈或者概率密度函式,如果取值均大於零,相對熵可以度量兩個隨機分佈的差異性。

因為相對熵是不對稱的:\mathbf{KL(f(x)||g(x))\neq KL(g(x)||f(x))}

這樣使用起來有時不是很方便,為了讓它對稱,詹森和夏農提出一種新的相對熵的計算方法,將上面的不等式量變取平均,即:

\mathbf{JS(f(x)||g(x))=\frac{1}{2}[KL(f(x)||g(x))+KL(g(x)||f(x))]}    (6.8)

相對熵的應用十分廣:可以衡量兩個隨機訊號的差異、兩篇文章中詞頻分佈以查重、衡量兩個常用詞在不同文字中的概率分佈,看它們是否同義。

 

7.賈里尼克和現代語言處理

一個好的導師,他教給你的應該是:

  1. 不要去做什麼,以少走歪路;
  2. 考慮問題的方法。

知之為知之,不知為不知。有不懂的就積極去理解,去探索。