天然語言處理的一個基本問題就是爲其上下文相關的特性創建數學模型,即統計語言模型(Statistical Language Model),它是天然語言處理的基礎。app
假定S表示某個有意義的句子,由一連串特定順序排列的詞ω1,ω2,...,ωn組成,這裏n是句子的長度。如今,咱們想知道S在文本中出現的可能性,即S的機率P(S),則P(S)=P(ω1,ω2,...,ωn)。函數
利用條件機率的公式:spa
P(ω1,ω2,...,ωn)=P(ω1)•P(ω2|ω1)•P(ω3|ω1,ω2)•••P(ωn|ω1,ω2,...,ωn-1) (1.1)3d
因爲條件機率P(ωn|ω1,ω2,...,ωn-1)難以估算,可利用馬爾可夫假設:假設任一個詞ωi出現的機率只同它前面的詞ωi-1有關,則公式(1.1)可簡化爲:blog
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元模型。ip
接下來的問題是如何估計條件機率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),而後用兩個數分別除以語料庫的大小 #,便可獲得二元組的相對頻度:io
$ 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)
假定文本中的每一個詞ω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)來解決這個問題。
第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)
一、訓練語料和模型應用的領域要一致。
二、訓練數據一般越多越好。
三、訓練語料的噪音高低也會影響模型的效果。
一、吳軍 :《數學之美(第二版)》