參考書籍:《統計自然語言處理》 宗成慶
一、問題的提出
平滑技術就是用來解決句子中出現零概率的問題,“平滑”處理的基本思想是“劫富濟貧”,即提高低概率(零概率),降低高概率,盡量使概率的分布趨於實際水平。
二、幾種數據平滑技術
1.加法平滑技術
是實際應用中最簡單的一種平滑技術,上世紀前半葉由Lidstone, Johnson, Jeffreys等人提出和改進。
基本思想:假設每個n元語法發生的次數比實際統計次數多發生δ次,0≤δ≤1。
通用公式:(1-1)
Lidstone和Jeffreys倡議取δ=1,V是所考慮的所有詞匯的單詞表, |V|為詞匯表中單詞的個數。 假設V取無窮大,那么分母就是無窮大,所有的概率都趨於0,但現實中,詞表中詞的個數是幾萬到幾十萬個,是有限的。
例如:在二元語法中,假設每個二元語法出現的次數比統計出現的次數多一次,即取δ=1,該處理方法稱為:加1平滑
(1-2)
未登錄詞(未知詞): 所有不在詞匯表中的詞可以映射為一個單個的區別於其他已知詞匯的單詞。
加法平滑python實現 https://www.cnblogs.com/liweikuan/p/14259886.html
2.古德-圖靈(Good-Turing)估計法
Good-Turing估計法是很多平滑技術的核心,1953年由I.J.Good引用圖靈(Turing)的方法提出的。
基本思路:對於任何一個出現r次的n元語法,都假設它出現了r*次,用r*代替r。
(2-1)
nr是訓練語料中統計出現r次的n元語法的數目。 r*對原來的統計次數r進行了折扣,所以r*< r。
要把統計數r*轉化為概率值,需要進行歸一化處理,即:
其中,
將r*用r替換得到:
也就是,N等於這個分布中最初的計數。 這樣, 樣本中所有事件的概率之和為:
(2-2)
(2-2)式的推導:
即:
而:其中
因此:剩余n1/N的概率量可以分配給所有未見的事件(r=0的事件)。
弊端:Good-Turing方法不能實現高階模型和低階模型的結合,而高低階模型的結合通常是獲得較好的平滑效果所必須的。
3.Katz平滑方法
1987年S.M.Katz提出一種后備(back-off)平滑方法,簡稱Katz平滑方法。
基本思路:當事件在樣本中出現的頻數大於某一數值k時,運用最大似然估計方法,通過減值來估計其概率值;當事件在樣本中出現的頻數小於k時,使用低階語法模型作為代替高階語法模型的后備,這中替換受歸一化因子的約束。
實質上:把從高階模型上減值的概率根據低階語法模型的分布情況分配給未發生的事件。 這種方法比將剩余概率平均分配給為發生時間更加合理。
以二元語法模型為例說明Katz思想:
對於一個出現次數為 的二元語法
,使用如下公式計算修正的計數:
(3-1)
擁有非零計數r的二元語法都根據折扣率dr被減值了,折扣率dr近似等於r*/r, 這個減值是由Good-Turing估計方法預測的。 式中為
的最大似然估計概率。
折扣率dr的計算: 由於大的計數值是可靠的,因此它們不需要減值。 對於r>k的計數,保持原值;對於r≤k情況下的折扣率,由全局二元語法分布的Good-Turing估計方法計算,及(2-1)式中的nr表示在訓練語料中恰好出現r次的二元語法的總數。
dr的約束條件:1.最終折扣量與Good-Turing估計預測的減值量成正比例。
2.全局二元語法分布中被折扣的計數總量等於根據Good-Turing估計應該分配給次數為零的二元語法的總數。
第一個約束條件相當於對於某些常數μ,r屬於{1,2,.........., k}有公式:
(3-2)
Good-Turing估計方法預測出應該分配給計數為0的二元語法的計數總量為n1,因此第二個約束條件相當於公式:
(3-3)
滿足(3-2)和(3-3)公式的唯一解為:
(3-4)
的計算 :
(3-5)
(3-5)式推導:
對於任何一個二元語法模型<Wi-1,Wi>,都應該滿足:(3-6)
即: (3-7)
將(3-1)中修正的計數帶入(3-7)中得:
(3-8)
(3-9)
最終根據修正的計數計算概率,需要進行歸一化處理:
4.Jelinek-Mercer平滑方法
問題的提出:
假定要在一批訓練語料上構建二元語法模型,其中,有兩對詞的出現次數為0:
c(SEND THE)=0
c(SEND THOU)=0
那么按照加法平滑方法和Good-Turing估計方法可以得到:
p(THE|SEND)=p(THOU|SEND)
但是,在我們的直覺上認為應該有:
p(THE|SEND)>p(THOU|SEND)
因為冠詞THE要比單詞THOU出現的頻率高的多。
解決思路:
為了利用這種情況,一種處理思想是在二元語法模型中加入一個一元模型。因為我們知道一元模型實際上只反應在訓練文本中單詞的出現頻率,這恰恰是我們所需要的,最大似然一元模型為:
將二元文法模型和一元文法模型進行線性插值:
(4-1)
其中,0≤λ≤1。當P(THE|SEND)=P(THOU|SEND)=0 時,根據P(THE)>>P(THOU),可以得到:
(4-2)
這是我們希望得到的結果。
通常情況下,使用低階的n元模型向高階的n元模型插值是有效的,當沒有足夠的語料估計高階模型的概率時,低階模型往往可以提供有用的信息。
1980年Jelinek和Mercer提出了通用插值模型:
基本思想:第n階模型可以遞歸的定義為n階最大似然估計模型和n-1階平滑模型之間的線性插值。為了結束遞歸可以用最大似然分布作為平滑的1階模型或者用均勻分布作為平滑的0階模型: