自然語言處理的一個基本問題就是為其上下文相關的特性建立數學模型,即統計語言模型(Statistical Language Model),它是自然語言處理的基礎。
1 用數學的方法描述語言規律
假定S表示某個有意義的句子,由一連串特定順序排列的詞ω1,ω2,...,ωn組成,這里n是句子的長度。現在,我們想知道S在文本中出現的可能性,即S的概率P(S),則P(S)=P(ω1,ω2,...,ωn)。
利用條件概率的公式:
P(ω1,ω2,...,ωn)=P(ω1)•P(ω2|ω1)•P(ω3|ω1,ω2)•••P(ωn|ω1,ω2,...,ωn-1) (1.1)
由於條件概率P(ωn|ω1,ω2,...,ωn-1)難以估算,可利用馬爾可夫假設:假設任一個詞ωi出現的概率只同它前面的詞ωi-1有關,則公式(1.1)可簡化為:
P(S)=P(ω1,ω2,...,ωn)=P(ω1)•P(ω2|ω1)•P(ω3|ω2)•••P(ωn|ωn-1) (1.2)
公式(1.2)對應的統計語言模型是二元模型(Bigram Model)。假設一個詞由前面N-1個詞決定,對應的模型稱為N元模型。
接下來的問題是如何估計條件概率P(ωi|ωi-1),根據它的定義:
$ P(\omega_i|\omega_{i-1})=\frac{P(\omega_{i-1},\omega_i)}{P(\omega_{i-1})} $ (1.3)
估計聯合概率P(ωi-1,ωi) 和邊緣概率P(ωi-1) ,可利用語料庫(Corpus),只要數一數ωi-1,ωi這對詞在統計的文本中前后相鄰出現的次數#(ωi-1,ωi),以及ωi-1本身在同樣的文本中出現的次數#(ωi-1),然后用兩個數分別除以語料庫的大小 #,即可得到二元組的相對頻度:
$ f(\omega_i,\omega_{i-1})=\frac{\#(\omega_{i-1},\omega_i)}{\#} $ (1.4)
$ f(\omega_{i-1})=\frac{\#(\omega_{i-1})}{\#} $ (1.5)
根據大數定理,只要統計量足夠,相對頻度等於頻率,因此:
$ P(\omega_i|\omega_{i-1})\approx\frac{\#(\omega_{i-1},\omega_i)}{\#(\omega_{i-1})} $ (1.6)
2 統計語言模型的工程訣竅
2.1 高階語言模型
假定文本中的每個詞ωi和前面的N-1個詞有關,而與更前面的詞無關,這樣當前詞ωi的概率只取決於前面N-1個詞P(ωi-N+1,ωi-N+2,...,ωi-1)。因此:
P(ωi|ω1,ω2,...,ωi-1)=P(ωi|ωi-N+1,ωi-N+2,...,ωi-1) (2.1)
公式(2.1)的這種假設稱為N-1階馬爾可夫假設,對應的語言模型稱為N元模型(N-Gram Model)。實際應用最多的是N=3的三元模型。
為什么N取值一般都這么小呢?主要有兩個原因。首先,N元模型的大小(空間復雜度)幾乎是N的指數函數,即0(|V|N),這里|V|是一種語言詞典的詞匯量,一般在幾萬到幾十萬。而使用N元模型的速度(時間復雜度)也幾乎是一個指數函數,即0(|V|N-1)。因此,N不能很大。當N從1到2,再從2到3時,魔性的效果上升顯著。而當模型從2到4時,效果的提升就不是很顯著了,而資源的耗費卻顯著增加。
最后還有一個問題,三元或四元甚至更高階的模型是否能覆蓋所有的語言現象呢?答案顯然是否定的。這就是馬爾可夫假設的局限性,這時要采取其他一些長程的依賴性(Long distance Dependency)來解決這個問題。
2.2 模型的訓練、零概率問題和平滑方法
第1章中所述的模型訓練方法存在一定問題。比如對於二元模型(1.2),就是拿兩個數字,(ωi-1,ωi)在語料中同現的次數#(ωi-1,ωi)和(ωi-1)在語料中同現的次數#(ωi-1),計算一下比值即可。但問題是,如果同現的次數#(ωi-1,ωi)=0,是否就意味着條件概率P(ωi|ωi-1)=0?反之,如果#(ωi-1,ωi)和#(ωi-1)都只出現了一次,能否得出P(ωi|ωi-1)=1的絕對性結論?這就涉及到統計的可靠性問題。
解決該問題,一個直接的辦法就是增加數據量,但即便如此,仍會遇到零概率或統計量不足的問題。因此,如果用直接的比值計算概率,大部分條件概率依然是零,這種模型我們稱之為“不平滑”。
1953年古德(I.J.Good)在圖靈(Alan Turing)的指導下,提出在統計中相信可靠的統計數據,而對不可信的統計數據打折扣的一種概率估計方法,同時將折扣的那一部分概率給予未出現的事件(Unseen Events),古德和圖靈還給出了重新估算概率的公式,稱為古德-圖靈估計(Good-Turing Estimate)。
下面以統計詞典中每個詞的概率為例,來說明古德-圖靈估計公式。
假定在語料庫中出現r次的詞有Nr個,特別地,未出現的詞數量為N0。語料庫大小為N。那么,很顯然
(2.2)
出現r次的詞在整個語料庫中的相對頻度(Relative Frequency)則是rNr/N。現在假定當r比較小時,它的統計可能不可靠。因此在計算那些出現r此的詞的概率時,要用一個更小一點的次數dr(而不直接使用r),古德-圖靈估計按照下面的公式計算dr:
dr=(r+1)•Nr+1/Nr (2.3)
顯然:
(2.4)
一般來說,出現一次的詞的數量比出現兩次的多,出現兩次的比出現三次的多,這種規律稱為Zipf定律(Zipf's Law),即Nr+1<Nr 。因此,一般情況下,dr<r,而d0>0。在實際的自然語言處理中,一般對出現次數超過某個閾值的詞,頻率不下調,只對出現次數低於這個閾值的詞,頻率才下調,下調得到的頻率總和給未出現的詞。
基於這種思想,估計二元模型概率的公式如下:
(2.5)
其中,T是一個閾值,一般在8~10左右,函數fgt()表示經過古德-圖靈估計后的相對頻度,而
$ Q(w_{i-1})=\frac{1-\sum_{w_i\hspace{2pt}seen}P(w_i|w_{i-1})}{\sum_{w_i\hspace{2pt}unseen} f(w_i)} $ (2.6)
這種平滑的方法,最早由前IBM科學家卡茨(S.M.Katz)提出,故稱卡茨退避法(Katz backoff)。類似地,對於三元模型,概率估計公式如下:
(2.7)
用低階語言模型和高階語言模型進行線性插值來達到平滑的目的,這種方法稱為刪除差值(Deleted Interpolation),詳見下面的公式。該公式中三個λ均為正數且和為1。線性插值效果比卡茨退避法略差,故現在較少使用。
P(ωi|ωi-2,ωi-1)=λ(ωi-2,ωi-1) • f(ωi|ωi-2,ωi-1)+λ(ωi-1) • f(ωi|ωi-1) +λ(ωi) (2.8)
2.3 語料的選取問題
1、訓練語料和模型應用的領域要一致。
2、訓練數據通常越多越好。
3、訓練語料的噪音高低也會影響模型的效果。
參考
1、吳軍 :《數學之美(第二版)》