在上邊我們知道其實(shí)當(dāng)今的自然語言處理的主流趨勢(shì)是統(tǒng)計(jì)自然語言處理,而統(tǒng)計(jì)自然語言處理的基本目的就是結(jié)合語料庫中的一些數(shù)據(jù)對(duì)于某些未知的數(shù)據(jù)進(jìn)行處理,從而根據(jù)這些數(shù)據(jù)分布得到一些推論,大家想一想,我們?cè)谡Z料庫里發(fā)現(xiàn)”你”和”吃飯了么”這兩個(gè)詞總是存在著一些附著關(guān)系,是不是我們就有預(yù)測(cè)在一些未知的文章中也會(huì)有這樣附著關(guān)系?
在這一篇文章中,我們將會(huì)介紹下n元語法模型和解決因?yàn)閿?shù)據(jù)缺乏的情況下引入的幾種常用的平滑度算法,
1:n元語法模型
n元語法模型的基本的公式可以看作為下面的概率公式P:
這個(gè)公式所表示的含義其實(shí)是在產(chǎn)生第i個(gè)詞的概率是由前邊已經(jīng)產(chǎn)生的從w1到wi-1的這個(gè)詞概率來決定的,在這樣的一個(gè)過程中,我們使用了先前詞,也就是通過用先前詞來去預(yù)測(cè)下一個(gè)將要出現(xiàn)的詞,然后我們根據(jù)大量的文本觀測(cè),我們會(huì)知道這個(gè)詞會(huì)不會(huì)越來越趨向于在這些詞的后面.比如上邊舉例的”你””吃飯了么”,現(xiàn)在假設(shè)我們的文本中有1000句話,現(xiàn)在你吃飯了么出現(xiàn)了20次,這樣的話我們就會(huì)得到相應(yīng)的出現(xiàn)這個(gè)詞的概率P(吃飯了么)=(20/1000)=(1/50).
當(dāng)然,在實(shí)際的任務(wù)中沒有那么多實(shí)際的文本歷史供我們參考,很多時(shí)候出現(xiàn)的詞或者句子我們之前都沒有見過,這樣的話我們以前的經(jīng)驗(yàn)就沒有辦法預(yù)測(cè)了,比如:我們遇到了一個(gè)句子:”你吃飯不吃飯?”,這樣的話就跟”你吃飯了么”在前半部分是一樣,但是后邊卻有一個(gè)不一樣的結(jié)尾.那要怎么解決這個(gè)問題呢?是不是把以前的文本出現(xiàn)過的歷史組合進(jìn)行總結(jié),然后進(jìn)行學(xué)習(xí),對(duì)于預(yù)期將要出現(xiàn)的詞,會(huì)不會(huì)出現(xiàn)一個(gè)合理的預(yù)測(cè)呢?
這樣的組合文本歷史的可能出現(xiàn)的方法就是我們常說的馬爾科夫假設(shè),這個(gè)假設(shè)其實(shí)說的就是上邊所對(duì)應(yīng)的問題,這個(gè)假設(shè)說的其實(shí)就是認(rèn)為接下來要出現(xiàn)的詞是由前邊出現(xiàn)的詞來影響的.如果按照上邊的公式來說,因?yàn)榍斑吺怯蒳-1個(gè)詞語,那么如果我們構(gòu)造一個(gè)模型的話,所有的歷史其實(shí)就是前邊的i-1個(gè)詞,這樣的話我們構(gòu)造的模型就成為(n-1)階馬爾科夫模型,或者說n元語法模型(因?yàn)槲覀円A(yù)測(cè)第n個(gè)詞).
這里要說一下這個(gè)n的取值問題,一般情況下我們是不能把這個(gè)n取值過大的,要是過大的話,肯定會(huì)有很多的等價(jià)類,太多的自由參數(shù)未必是一件好事(其實(shí)把數(shù)據(jù)劃分成多個(gè)等價(jià)類有利有弊,一方面如果我們把數(shù)據(jù)分割成多個(gè)類的話其實(shí)可以讓我們有更多的辨別性,但是要是使用了太多的等價(jià)類,那么對(duì)于每個(gè)類別來說,他的訓(xùn)練數(shù)據(jù)很小,甚至有些部分沒有訓(xùn)練數(shù)據(jù),這樣的話再去做目標(biāo)特征的統(tǒng)計(jì)估計(jì)這時(shí)候就很不準(zhǔn)確了,所以這時(shí)候如何去權(quán)衡,找到一個(gè)合適的類別數(shù),是我們的一個(gè)探索目標(biāo).)那么這時(shí)候我們?cè)偃タ纯磏的取值問題,一般情況下大多數(shù)常用的n的取值是n=2,3,4的情況,這個(gè)時(shí)候分別稱為bigram(二元語法),trigram(三元語法),fourgram(四元語法).
現(xiàn)在假設(shè)一個(gè)說話者的使用詞有20000個(gè),那么參數(shù)的數(shù)量如下圖所示:
從這個(gè)圖上我們看到,到四元語法模型就已經(jīng)擁有非常巨大的參數(shù)了,所以構(gòu)造更多的語法模型顯然是不現(xiàn)實(shí)的.
2:構(gòu)建n元語法模型
1;通常構(gòu)建模型的第一步是處理語料
首先我們需要對(duì)語料進(jìn)行處理,因?yàn)楦鶕?jù)n元語法要求,一個(gè)詞的概率只跟前邊的詞的概率有關(guān),因?yàn)橐顾械母怕手蜑?,因此我們要在句首和句尾加上一個(gè)句首標(biāo)記和句尾標(biāo)記,這樣的話我們就可以計(jì)算,下邊舉一個(gè)例子:
p(I Love You)
在這樣處理完句子之后,如果我們得到了一個(gè)確定的語料庫,如果現(xiàn)在一個(gè)詞出現(xiàn)了10次,比如:”good”后面有8次跟著”morning”,1次”boy”,一次”girl”,那么估計(jì)下一個(gè)詞,我們會(huì)出現(xiàn)哪一種概率呢?
其實(shí)我們可以考慮使用相對(duì)概率來估計(jì):
P(morning)=0.8
P(girl)=0.1
P(boy)=0.1
P(other)=0(other不屬于上述三個(gè)詞匯)
這樣歸類之后,去給這些數(shù)據(jù)計(jì)算他們的概率了,再去歸一化,這樣就可以計(jì)算出來:
在這里我們?nèi)ビ肅(w1.......wn)來表示n元語法在給定文本中出現(xiàn)的次數(shù),這樣的話我們就有下邊的計(jì)算公式:
像這樣的估計(jì)的處理方式,我們叫做p(wn|w1.........wn-1)的最大似然估計(jì)(MLF)
之所以稱為最大似然估計(jì),是因?yàn)樗x擇的參數(shù)相對(duì)于訓(xùn)練數(shù)據(jù)給出了最高的概率(滿足了正常隨機(jī)約束),但是其實(shí)我在上網(wǎng)搜這個(gè)問題的時(shí)候,很多人說MLF是不太適合自然語言處理的,因?yàn)楸旧砦覀兊恼Z料庫規(guī)模會(huì)很大,我們的數(shù)據(jù)會(huì)很稀疏,并且像上邊那樣的常用詞概率這么高的情況是非常理想的狀態(tài),大部分詞都是不常用的,那么這樣就會(huì)出現(xiàn)一個(gè)問題,如果一個(gè)n元組正好在判別時(shí)沒有了訓(xùn)練語料出現(xiàn)時(shí),這時(shí)候的概率就會(huì)很差,就跟上邊的詞,good后邊還可以跟很多的詞,但是最大似然估計(jì)并不會(huì)認(rèn)為會(huì)有其他的詞跟在這個(gè)good后邊.
那么應(yīng)該怎么去解決這個(gè)問題,這個(gè)時(shí)候我們就會(huì)想應(yīng)該要有一種更好的估計(jì)方法,要是能夠判別出在訓(xùn)練數(shù)據(jù)中沒有出現(xiàn)的事件,并且能夠給出一定的概率,這時(shí)候一些研究者給出了更好方法:
如果可以通過稍微減少已經(jīng)觀察到的事件概率的大小,并且可以把少量的概率分配到?jīng)]有看到過的事件上,這時(shí)候每件事件都會(huì)發(fā)生并且可能有效的工作,這個(gè)就是我們常說的折扣法,折扣的過程就叫做平滑(這難道是因?yàn)闆]有0值分布會(huì)比有0值分布更平滑?)
那么我們應(yīng)該如何進(jìn)行平滑,平滑的常用方式有幾種,在下一篇文章中我們將講述下幾種常用的數(shù)據(jù)平滑方法.
初學(xué)NLP,不足之處請(qǐng)各位多多批評(píng)指正,在此謝過!