自然語言處理(九)——數據平滑

一、概念

什麼是數據平滑?我通過一個例子來解釋一下。假設有如下語料庫:

{

  今天 天氣 不錯,

  天氣 晴朗,

  晴朗 的 天氣,

}

如果要計算句子s=“晴朗天氣”的概率(用二元語法模型,自然語言處理(七)已經介紹過),有如下計算過程。

p(天氣 | 晴朗)  = c(晴朗天氣)/ c(晴朗)  = \frac{0}{2} = 0

顯然上面計算得到的概率不怎麼準確,晴朗天氣總有出現的可能,最起碼概率應該大於0。

爲了解決這種問題,數據平滑就有了用武之地,數據平滑的作用把概率爲0的變爲概率較小的非0概率。最後可能還有一個疑問,句子的概率是0就0唄,爲什麼要平滑?實際上在語音識別中如果識別到句子的概率是0,那麼就識別失敗了,不管如何都要識別出一個結果,所以不能讓句子的概率成爲0。

知道了數據平滑的目的和用途,就該瞭解,數據平滑到底怎麼個平滑?怎麼消除0概率?其實平滑的方法有很多,接下來介紹一些常用方法。

二、數據平滑方法

加1法:這個方法是用於n元語法模型的比較簡單的方法,就是計算頻率時,每個二元語法出現的次數加1。公式如下:

上面的 |V| 指的是所有不同基元的個數,對下面這個語料庫來說:

{

  今天 天氣 不錯,

  天氣 晴朗,

  晴朗 的 天氣,

}

|V| = 5。這時候採用平滑的方法要計算句子s=“晴朗天氣”的概率:

p( 天氣 | <BOS> )  = \frac{1+1}{5+3} = \frac{1}{4}

p( 天氣 | 晴朗 )  = \frac{1+0}{5+2} = \frac{1}{7}

p( <EOS> |  天氣 )  = \frac{1+1}{5+3}=\frac{1}{4}

因此,這是句子s出現的概率爲p(s) = \frac{1}{4}\times \frac{1}{7}\times\frac{1}{4}=\frac{1}{112}。通過數據平滑,就解決了概率爲0問題。不過加1法算出的概率有時候並不準確,甚至於原始求概率相差較大,因此,又出現了其他的方法來解決。

加法平滑法:同上面的加1法類似,這個方法只不過是加一個\delta,且0\leqslant \delta \leqslant 1。這個\delta的值並沒法求,可以把它當做一個超參數。

古德—圖靈估計法:這個計算方法,要改變出現r次的n元語法爲r*次。r* = (r+1) \frac{n_{r+1}}{n_{r}}。這裏的n_{r}是指訓練語料庫中恰好出現r次的n元語法的數目。出現r次的n元語法的概率:p_{r} = \frac{p*}{N}。其中N = \sum_{r=1}^{\infty }n_{r}\times r。這些公式的推算這裏就不加證明了,這些都是最後推出的結果可以直接用來計算。下面這個例子是教材上的例子。這裏就不一一推敲了。

總之這個古德-圖靈估計法是將部分的概率分配到了未出現的事件,這樣的話就不會出現概率爲0的事件。下圖是一個示意圖,至於爲什麼概率總和是被均分的,就不再證明。

JEM平滑方法:這個方法解決的問題主要是古德-圖靈方法中概率總和是被均分。假如有如下語料庫:

{

  今天 天氣 不錯,

  天氣 晴朗,

  晴朗 的 天氣,

}

如果計算“晴朗天氣”和“晴朗雲彩”兩個句子的概率,顯而易見如果用古德-圖靈平滑法,兩個句子的概率是一樣的。然而根據常識來看,晴朗天氣出現的概率要遠遠大於晴朗雲彩。JEM平滑方法就是要解決這個問題。

JEM平滑方法在二元模型中加入一個一元模型。一元模型爲:

將二元文法模型和一元文法模型進行線性插值:

這時“天氣”的概率就遠遠大於“雲彩”的概率,因此,這時“晴朗天氣”和“晴朗雲彩”兩個句子的概率就不會相等均分,而是合乎常理的概率。

這就是JEM平滑方法的基本思想,平滑的方法有很多,這裏就不再全部深究,上述的平滑方法也沒有很精細的闡述,本文可能有錯誤之處,望各位同行看到的話不吝賜教,拜謝。

參考的書目有:宗成慶《統計自然語言處理》

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章