本文只是對(duì)NLP知識(shí)進(jìn)行梳理,鞏固及時(shí)查漏補(bǔ)缺。
??在對(duì)文本處理的時(shí)候,首要做的就是分詞。英文可以按空格分詞,但有時(shí)候需要把多個(gè)單詞作為一個(gè)分詞,比如一些名詞如“New York”,需要作為一個(gè)詞看待。而中文沒有空格,分詞就是一個(gè)需要專門去解決的問題了。無論是英文還是中文,分詞的原理都是類似的,本文就對(duì)文本挖掘時(shí)的分詞原理做一個(gè)總結(jié)。
三大主流分詞方法:
- 基于詞典的方法;
- 基于規(guī)則的方法;
- 基于統(tǒng)計(jì)的方法。
1. 分詞的基本原理
??現(xiàn)代分詞幾乎都是基于統(tǒng)計(jì)的分詞,而統(tǒng)計(jì)的樣本內(nèi)容來自于一些標(biāo)準(zhǔn)的語料庫。
??假如有一個(gè)句子:“小明來到荔灣區(qū)”,我們期望語料庫統(tǒng)計(jì)后分詞的結(jié)果是:"小明/來到/荔灣/區(qū)",而不是“小明/來到/荔/灣區(qū)”。那么如何做到這一點(diǎn)呢?
??從統(tǒng)計(jì)的角度,我們期望"小明/來到/荔灣/區(qū)"這個(gè)分詞后句子出現(xiàn)的概率要比“小明/來到/荔/灣區(qū)”大。數(shù)學(xué)表示就是:如果有一個(gè)句子S,它有m種分詞選項(xiàng),
其中下標(biāo)
代表第
種分詞的詞個(gè)數(shù)。如果我們從中選擇了最優(yōu)的第??種分詞方法,那么這種分詞方法對(duì)應(yīng)的統(tǒng)計(jì)分布概率應(yīng)該最大,即:
但是我們的概率分布
并不好求出來,因?yàn)樗婕暗?img class="math-inline" src="https://math.jianshu.com/math?formula=n_i" alt="n_i" mathimg="1">個(gè)分詞的聯(lián)合分布。在NLP中,為了簡化計(jì)算,我們通常使用馬爾科夫假設(shè),即每一個(gè)分詞出現(xiàn)的概率僅僅和前一個(gè)分詞有關(guān),即:
由馬爾科夫假設(shè),則聯(lián)合分布為:
而通過我們的標(biāo)準(zhǔn)語料庫,我們可以近似的計(jì)算出所有的分詞之間的二元條件概率,比如任意兩個(gè)詞
,
,它們的條件概率分布可以近似的表示為:
其中????????(??1,??2)表示??1,??2在語料庫中相鄰一起出現(xiàn)的次數(shù),而其中????????(??1),????????(??2)分別表示??1,??2在語料庫中出現(xiàn)的統(tǒng)計(jì)次數(shù)。
??利用語料庫建立的統(tǒng)計(jì)概率,對(duì)于一個(gè)新的句子,我們就可以通過計(jì)算各種分詞方法對(duì)應(yīng)的聯(lián)合分布概率,找到最大概率對(duì)應(yīng)的分詞方法,即為最優(yōu)分詞。
2. 基于規(guī)則或詞典的方法
定義:按照一定策略將待分析的漢字串與一個(gè)“大機(jī)器詞典”中的詞條進(jìn)行匹配,若在詞典中找到某個(gè)字符串,則匹配成功。
- 按照掃描方向的不同:正向匹配和逆向匹配;
- 按照長度的不同:最大匹配和最小匹配;
2.1 正向最大匹配思想MM
- 從左向右取待切分漢語句的m個(gè)字符作為匹配字段,m為大機(jī)器詞典中最長詞條個(gè)數(shù)。
- 查找大機(jī)器詞典并進(jìn)行匹配:
??1. 若匹配成功,則將這個(gè)匹配字段作為一個(gè)詞切分出來。
??2. 若匹配不成功,則將這個(gè)匹配字段的最后一個(gè)字去掉,剩下的字符串作為新的匹配字段,進(jìn)行再次匹配,重復(fù)以上過程,直到切分出所有詞為止。
例: 我們要對(duì)南京市長江大橋這個(gè)句子進(jìn)行分詞,根據(jù)正向最大匹配的原則:
- 先從句子中拿出前5個(gè)字符“南京市長江”,把這5個(gè)字符到詞典中匹配,發(fā)現(xiàn)沒有這個(gè)詞,那就縮短取字個(gè)數(shù),取前四個(gè)“南京市長”,發(fā)現(xiàn)詞庫有這個(gè)詞,就把該詞切下來;
- 對(duì)剩余三個(gè)字“江大橋”再次進(jìn)行正向最大匹配,會(huì)切成“江”、“大橋”;
- 整個(gè)句子切分完成為:南京市長、江、大橋;
2.2 逆向最大匹配算法RMM
??該算法是正向最大匹配的逆向思維,匹配不成功,將匹配字段的最前一個(gè)字去掉,實(shí)驗(yàn)表明,逆向最大匹配算法要優(yōu)于正向最大匹配算法。
例:取出南京市長江大橋的后四個(gè)字“長江大橋”,發(fā)現(xiàn)詞典中有匹配,切割下來;對(duì)剩余的“南京市”進(jìn)行分詞,整體結(jié)果為:南京市、長江大橋。
2.3 雙向最大匹配法BM
??雙向最大匹配法是將正向最大匹配法得到的分詞結(jié)果和逆向最大匹配法的到的結(jié)果進(jìn)行比較,從而決定正確的分詞方法。
例:雙向的最大匹配,即把所有可能的最大詞都分出來,上面的句子可以分為:南京市、南京市長、長江大橋、江、大橋。
2.4 設(shè)立切分標(biāo)志法
? 收集切分標(biāo)志,在自動(dòng)分詞前處理切分標(biāo)志,再用MM、RMM進(jìn)行細(xì)加工。
3. 基于統(tǒng)計(jì)的分詞
??隨著大規(guī)模語料庫的建立,統(tǒng)計(jì)機(jī)器學(xué)習(xí)方法的研究和發(fā)展,基于統(tǒng)計(jì)的中文分詞方法漸漸成為了主流方法。
主要思想:把每個(gè)詞看做是由詞的最小單位各個(gè)字組成的,如果相連的字在不同的文本中出現(xiàn)的次數(shù)越多,就證明這相連的字很可能就是一個(gè)詞。因此我們就可以利用字與字相鄰出現(xiàn)的頻率來反應(yīng)成詞的可靠度,統(tǒng)計(jì)語料中相鄰共現(xiàn)的各個(gè)字的組合的頻度,當(dāng)組合頻度高于某一個(gè)臨界值時(shí),我們便可認(rèn)為此字組可能會(huì)構(gòu)成一個(gè)詞語。
主要統(tǒng)計(jì)模型:
- N元文法模型(N-gram)
- 隱馬爾可夫模型(Hidden Markov Model ,HMM)
- 最大熵模型(ME),
- 條件隨機(jī)場模型(Conditional Random Fields,CRF)等。
N元模型
??只依賴于前一個(gè)詞太武斷了,我們能不能依賴于前兩個(gè)詞呢?
??這樣也是可以的,只不過這樣聯(lián)合分布的計(jì)算量就大大增加了。我們一般稱只依賴于前一個(gè)詞的模型為二元模型(Bi-Gram model),而依賴于前兩個(gè)詞的模型為三元模型。以此類推,我們可以建立四元模型,五元模型,...一直到通用的N元模型。越往后,概率分布的計(jì)算復(fù)雜度越高。當(dāng)然算法的原理是類似的。
? ?在實(shí)際應(yīng)用中,N一般都較小,一般都小于4,主要原因是N元模型概率分布的空間復(fù)雜度為O(),其中|V|為語料庫大小,而N為模型的元數(shù),當(dāng)N增大時(shí),復(fù)雜度呈指數(shù)級(jí)的增長。
??N元模型的分詞方法雖然很好,但是要在實(shí)際中應(yīng)用也有很多問題,
- 某些生僻詞,或者相鄰分詞聯(lián)合分布在語料庫中沒有,概率為0。這種情況我們一般會(huì)使用拉普拉斯平滑,即給它一個(gè)較小的概率值,
- 如果句子長,分詞有很多情況,計(jì)算量也非常大,這時(shí)我們可以用下一節(jié)維特比算法來優(yōu)化算法時(shí)間復(fù)雜度。
維特比算法與分詞
??為了簡化原理描述,我們的討論都是以二元模型為基礎(chǔ)。
??對(duì)于一個(gè)有很多分詞可能的長句子,我們當(dāng)然可以用暴力方法去計(jì)算出所有的分詞可能的概率,再找出最優(yōu)分詞方法。但是用維特比算法可以大大簡化求出最優(yōu)分詞的時(shí)間。
??大家一般知道維特比算法是用于隱式馬爾科夫模型HMM解碼算法的,但是它是一個(gè)通用的求序列最短路徑的方法,不光可以用于HMM,也可以用于其他的序列最短路徑算法,比如最優(yōu)分詞。
??維特比算法采用的是動(dòng)態(tài)規(guī)劃來解決這個(gè)最優(yōu)分詞問題的,動(dòng)態(tài)規(guī)劃要求局部路徑也是最優(yōu)路徑的一部分,很顯然我們的問題是成立的。首先我們看一個(gè)簡單的分詞例子:"人生如夢境"。它的可能分詞可以用下面的概率圖表示:

