上文已經(jīng)介紹了基于詞典的中文分詞,現(xiàn)在讓我們來(lái)看一下基于統(tǒng)計(jì)的中文分詞。
統(tǒng)計(jì)分詞:
????????統(tǒng)計(jì)分詞的主要思想是把每個(gè)詞看做是由字組成的,如果相連的字在不同文本中出現(xiàn)的次數(shù)越多,就證明這段相連的字很有可能就是一個(gè)詞。
統(tǒng)計(jì)分詞一般做如下兩步操作:
1.建立統(tǒng)計(jì)語(yǔ)言模型(n-gram)
2.對(duì)句子進(jìn)行單詞劃分,然后對(duì)劃分結(jié)果做概率計(jì)算,獲取概率最大的分詞方式。這里就用到了統(tǒng)計(jì)學(xué)習(xí)算法,如隱馬爾科夫模型(HMM),條件隨機(jī)場(chǎng)(CRF)等
語(yǔ)言模型:
????????語(yǔ)言模型在信息檢索,機(jī)器翻譯,語(yǔ)音識(shí)別中承擔(dān)著重要的任務(wù)。這種模型結(jié)構(gòu)簡(jiǎn)單,直接,但同時(shí)也因?yàn)閿?shù)據(jù)缺乏而必須采取平滑算法。這里主要介紹n元語(yǔ)言模型(n-gram)。
????????假設(shè)S表示長(zhǎng)度為i,由(W1,W2,....,Wi)字序列組成的句子,則代表S的概率為:
P(S) = P(W1,W2,...,Wi) = P(W1)*P(W2|W1)*P(W3|W2,W1)....P(Wi|W1,W2,...,Wi-1)
即每個(gè)字的出現(xiàn)都與他之前出現(xiàn)過(guò)的字有關(guān),最后整個(gè)句子S的概率為這些字概率的乘積。但是這個(gè)計(jì)算量很大,所以在這里我們可以利用馬爾科夫假設(shè),即當(dāng)前詞只與最多前n-1個(gè)有限的詞相關(guān):
當(dāng)n=1時(shí),即出現(xiàn)在第i位上的詞Wi獨(dú)立于歷史時(shí),一元文法被記作uni-gram,一元語(yǔ)言模型可以記作:
當(dāng)n=2時(shí),即出現(xiàn)在第i位上的詞wi僅與它前面的一個(gè)歷史詞wi-1有關(guān),二元文法模型被稱(chēng)為一階馬爾可夫鏈(Markov chain),記作bi-gram,二元語(yǔ)言模型可以記作:
當(dāng)n=3時(shí),即出現(xiàn)在第i位置上的詞wi僅與它前面的兩個(gè)歷史詞wi-2和wi-1有關(guān),三元文法模型被稱(chēng)為二階馬爾可夫鏈,記作tri-gram,三元語(yǔ)言模型可以記作:
在實(shí)際應(yīng)用中,一般使用頻率計(jì)數(shù)的比例來(lái)計(jì)算n元條件概率。
基于HMM的分詞:
????????隱含馬爾可夫模型(HMM)是將分詞作為字在句子中的序列標(biāo)注任務(wù)來(lái)實(shí)現(xiàn)的(關(guān)于HMM稍后會(huì)在另一篇文章中詳細(xì)介紹)。其基本思路是:每個(gè)字在構(gòu)造一個(gè)特定詞語(yǔ)時(shí)都占據(jù)著一個(gè)特定的位置即詞位,一般采用四結(jié)構(gòu)詞位:B(詞首),M(詞中),E(詞尾)和S(單獨(dú)成詞)。比如:
'中文/分詞/是/文本處理/不可或缺/的/一步/!',
標(biāo)注后的形式:
'中/B 文/E 分/B 詞/E 是/S 文/B 本/M 處/M 理/E 不/B 可/M 或/M 缺/E 的/S 一/B 步/E !/S'。
其中,詞位序列代表著HMM中不可見(jiàn)的隱藏狀態(tài)序列,而訓(xùn)練集中的文本則為可見(jiàn)的觀測(cè)序列。這樣就變成了已知觀測(cè)序列,求未知的隱藏序列的HMM問(wèn)題。
本篇文章中,我們使用有標(biāo)記的監(jiān)督學(xué)習(xí)去訓(xùn)練HMM的參數(shù),無(wú)監(jiān)督學(xué)習(xí)的Baum-Welch方法(EM)會(huì)后續(xù)更新到本文中。
實(shí)現(xiàn)主要分為三步:
1.使用已經(jīng)分好詞的訓(xùn)練集去訓(xùn)練HMM模型,計(jì)算頻數(shù)得到HMM的三要素(初始狀態(tài)概率,狀態(tài)轉(zhuǎn)移概率和發(fā)射概率)。
2.使用Viterbi算法以及訓(xùn)練好的三個(gè)概率矩陣,將待分詞的句子轉(zhuǎn)換為'BMES'類(lèi)型的狀態(tài)序列。
3.根據(jù)已經(jīng)求出的狀態(tài)序列,劃分句子進(jìn)行分詞。
最后測(cè)試結(jié)果:
本文實(shí)現(xiàn)的HMM分詞模型比較簡(jiǎn)單,分詞效果依賴(lài)于訓(xùn)練集文本語(yǔ)料庫(kù)的規(guī)模,所以要想得到更好的性能,需要花費(fèi)人力維護(hù)語(yǔ)料庫(kù)。
待更新。
詳細(xì)代碼可參考GitHub:?代碼連接
參考書(shū)籍:
《Python自然語(yǔ)言處理實(shí)戰(zhàn)-核心技術(shù)與算法》涂銘,劉祥,劉樹(shù)春? 著
《統(tǒng)計(jì)自然語(yǔ)言處理》 宗成慶? 著