簡與美(7)

腦中的數學是抽象的,手中的數學是簡單的。
 
我們已經介紹了隱馬模型,並且用動態規劃思想解決了隱馬模型提出的兩個問題。尤其是第二個問題,和我們接下來要討論的詞性標註有直接關係。
 
在NPL領域,有一個稱爲N元模型的語言統計模型,它對應N-1階馬爾科夫模型。
 
N元模型可用於計算語句W=w1,w2,..,wn的先驗概率P(W),在這裏用變量W代表一個文本中順序排列的n個詞語。根據概率的乘法規則,P(W)可以分解爲:
P(W)=P(w1)P(w2|w1)P(w3|w1,w2) .. P(wn|w1,w2,..,wn-1)
可見,爲了預測wn的出現概率,必須要知道它前面所有詞語的出現概率。w1,w2,..,wn-1被稱爲產生wn的歷史。隨着歷史長度的增加,不同歷史數按指數級增長。如果歷史長度爲i-1,則有kenbin個不同的歷史(L爲詞彙集的大小,還記得排列組合知識吧,這就是一個排列組合結果)。我們必須考慮在所有的kenbin種歷史的情況下,產生第i個詞語的概率。也就是說,這樣的模型中有kenbin個自由參數P(wi|w1,w2,..,wi-1)。當L=5000,i=3時,自由參數的數目是1250億。我們幾乎不可能從訓練數據中正確的估計這些參數,並且絕大多數的歷史(排列組合)在訓練數據中根本沒有出現。解決這個問題的方法是將歷史w1,w2,..,wi-1按照某個法則映射到等價類S(w1,w2,..,wi-1),而等價類的數目遠遠小於不同歷史的數目。有很多方法可以將歷史劃分爲等價類,比如,把參數空間中一些特徵相近的元素合併到一起得到一個個等價類,於是,參加運算的是這些類,而不再是單個的元素。從計算角度看,這還是太複雜。如果任意一個詞語出現的概率只和它前面的N-1個詞語相關,那麼問題可以得到進一步的簡化。這時的語言模型叫做N元模型或N元語法(N-gram),即:
P(W)=P(w1)P(w2|w1)P(w3|w1,w2)..P(wi|wi-N+1,..,wi-1)
通常N的值不能太大,否則會有太多的等價類,前面提到的過多自由參數的問題仍然存在。當N=1時,即近似認爲出現在第i位置上的詞語wi獨立於歷史(它的出現概率跟它前面的詞語無關),這種N元語言模型成爲一元語法(uni-gram)。當N=2時,即近似認爲出現在第i位置上的詞語wi的出現概率只跟它前面緊鄰的一個詞語有關,這種N元語言模型稱爲二元語法(bi-gram)。當N=3時,即近似認爲出現在第i位置上的詞語wi的出現概率只跟它前面緊鄰的兩個詞語有關。這種N元語言模型稱爲三元語法(tri-gram)。其實,N元模型就是N-1階馬爾科夫模型。因此,一元語法就是零階馬爾科夫鏈,二元語法就是一階馬爾科夫鏈,三元語法就是二階馬爾科夫鏈,...。當使用三元語法模型時,P(W) 可以分解爲:
P(W)=P(w1)P(w2|w1)P(w3,|w1,w2)P(w4|w2,w3)..P(wi|wi-2,wi-1)
該模型的參數爲P(w3|w2,w1),其值可以通過大規模語料庫用最大似然估計方法求得:
P(w3|w2,w1)=f(w3|w2,w1)=count(w1,w2,w3)/count(w1,w2)
其中,count(w1,w2,w3)表示一個特定的詞序列w1,w2,w3在語料庫中出現的次數,count(w1,w2)表示一個特定的詞序列w1,w2在語料庫中出現的次數,f(w3|w2,w1)表示在給定w1,w2的條件下出現w3的概率。但是,在訓練數據中,很可能事件w1,w2,w3這種詞序列根本沒有出現過,根據最大似然估計,這些事件的概率爲零。然而,這些事件的真實概率不一定爲零。這就是所謂的數據稀疏問題。這個問題有一些方法解決,比如遇到概率爲零的時候給一個小的數值。
 
我們來看看詞性標註問題。
 
詞性標註問題可以看作是在給定詞的序列W=w1,w2,..,wn的條件下,尋找一個詞性標註序列C=c1,c2,..,cn使得P(C|W)最大。P(C|W)表示已知輸入詞序列W的情況下,出現詞性標註序列C的條件概率。根據貝葉斯定律:
P(C|W)=P(W|C)P(C)/P(W)
P(W)是一個常數。可以忽略不計,則:
P(C|W)=P(W|C)P(C)
接着,對公式進行近似。首先,引入獨立性假設,認爲詞序列中任意一個詞wi的出現概率近似只跟當前詞的詞性標註ci有關,而跟上下文的詞性標註無關。則詞彙概率(某個詞以某種詞性出現的概率)爲:
P(W|C)=P(w1|c1)P(w2|c2)..P(wn|cn)
顯然,這是一種一元語法模型,它只考慮詞跟在其上可能出現的詞性標註之間的統計信息,即一個詞用作某種詞性的概率。其次,採用二元假設,認爲任意詞性標註ci的出現概率只跟它的緊鄰的前一個詞性標註ci+1相關,即:
P(C)=P(c2|c1)P(c3|c2)..P(cn|cn-1)
P(ci|ci-1)是詞性標註的轉移概率,顯然這是一種二元語法模型,他只考慮詞性一級上的相鄰上下文關係(即某種詞性序列是否出現的統計關係),但是沒有考慮特定的詞跟某種詞性標註之間的統計關係(即一個詞用作某種詞性的概率)。現在公式爲:
P(C|W)=P(w1|c1)P(c1|c0)..P(wi|ci)P(ci|ci-1)..P(wn|cn)P(cn|cn-1)
 
到目前爲止,我們是用N元模型解釋詞性標註過程,仔細觀察上面那個公式,我們要求的是使得P(C|W)取得最大值的C,這不就是一個隱馬爾科夫模型嘛。模型中每個狀態對應於一個詞性標註,從狀態Si(對應於詞性標註ci)到狀態Sj(對應於詞性標註cj)的轉移概率aij爲相應的詞性標註的二元語法模型P(cj|ci),從狀態Si輸出詞語wi的發射概率bi(wi)爲基於一元語法的詞彙概率P(wi|ci)。於是,詞性標註問題變爲求隱馬爾科夫模型的最佳狀態序列的問題。用viterbi算法來解決。
 
另外,這個隱馬爾科夫模型中的兩個概率參數都可以通過訓練數據來分別估計:
P(wi|ci)=count(wi,ci)/count(ci)
P(ci|ci-1)=count(ci-1,ci)/count(ci-1)
第一個公式說的是,詞彙概率(發射概率)約等於訓練數據中某個詞語wi作某種詞性ci使用的次數,除以該詞性標註ci在訓練數據中出現的總次數。第二個公式說的是,轉移概率約等於訓練數據中某種詞性標註ci出現在另一種詞性標註ci-1之後的次數,除以另一種詞性標註ci-1在訓練數據中出現的總次數。
 
我們通過介紹N元模型來說明詞性標註的問題,並在最終把N元模型解釋的問題轉化爲隱馬爾科夫模型,並介紹了訓練隱馬參數的估計方法。到目前爲止,中文分詞系統涉及的大部分知識已經講述差不多了。至於未登錄詞的識別問題,也是轉化爲隱馬模型可以解決的問題來求解。後面有時間的時候會單獨一篇來討論。
 
本週開始,工作上會較以前忙一些,因爲開始做一些確定的事情,這個系列會寫的比較慢,並且我想把已經在之前討論過的一些問題重新再認識一番,研究發現問題和解決問題的思路,並且發散思維,思考這些模型和方法能否舉一反三用在其他技術領域。很值得思考。
 
待續...
發佈了30 篇原創文章 · 獲贊 1 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章