中文切詞方法學(xué)習(xí)

前段時(shí)間有小伙伴問(wèn)了我好幾次中文切詞是怎么切的,我想著應(yīng)該是我沒表達(dá)清楚所以小伙伴才會(huì)重復(fù)問(wèn)多次,是我表達(dá)能力不夠,臨時(shí)說(shuō)也說(shuō)不上來(lái)。所以就寫一篇了簡(jiǎn)單的中文切詞方法的短文,一方面是鍛煉下自己的表達(dá)能力,另一方面下次小伙伴再問(wèn)就直接扔給他Y(^o^)Y

原出處doudou0o博客

中文分詞介紹

在文本處理中,如果需要理解分析句子背后的含義(語(yǔ)義),或者需要加入人的一些詞語(yǔ)的先驗(yàn)知識(shí),又或者數(shù)據(jù)量不夠大細(xì)粒度的單元(字)容易導(dǎo)致過(guò)擬合(字的字典表一般都比較小),或者有些特殊的只適合詞的模型的一些場(chǎng)景下都需要 切詞 來(lái)將句子切分成詞的有序串。特別的,“詞”是表達(dá)/承載語(yǔ)義的最小單位,在需要表達(dá)句子乃至文章意義的時(shí)候切詞是必要的。
但并不是所有文本處理都需要/適合切詞,在數(shù)據(jù)集比較足夠大的情況,或者一些深度網(wǎng)絡(luò)模型,或者機(jī)器翻譯的場(chǎng)景中,都是字粒度表現(xiàn)的更好。
所以是否真的需要切詞,是在不同的場(chǎng)景下不同的數(shù)據(jù)下需要分別對(duì)待的。在不是必須要分詞的情況下,優(yōu)先嘗試使用字粒度的模型能夠更快更便捷的不錯(cuò)的結(jié)果再考慮是否引入詞/語(yǔ)音的概念。

在英文中每個(gè)詞本身就有分割的標(biāo)記,但是在中文當(dāng)中詞與詞之間沒有明顯的區(qū)分標(biāo)記,而且經(jīng)常會(huì)有字的前后語(yǔ)境不一樣切分方式就差別很大的情況。因此如何切詞(切詞算法)就顯得額外重要。下面以我自己的理解和簡(jiǎn)單的語(yǔ)言淺顯地分享下我個(gè)人理解的各種分詞策略。

中文切詞分類

在中文切詞中大多數(shù)文章都會(huì)分為三類:
1. 基于詞典的分詞方法(也有文章稱"基于字符串匹配方法")
2. 基于統(tǒng)計(jì)的分詞方法
3. 基于序列標(biāo)注的分詞方法

第一類基于詞典的分詞方法

掃描方向不同:正向/逆向最大匹配法、雙向匹配分詞法。
長(zhǎng)度傾向不同:最少切分算法。
它們最重要的思想就是按照一定策略將待分析的字串與一個(gè)大詞典中的詞條進(jìn)行匹配,若字串在詞典中存在則匹配成功,然后進(jìn)行下一個(gè)字串的猜想。

第二類基于統(tǒng)計(jì)的分詞方法

N元模型(N-gram)、Aprior算法(頻繁項(xiàng)集算法)
他們最重要的思想就是在大量文本中,某些相鄰(有順序)的字(/詞)同時(shí)出現(xiàn)的次數(shù)越多,就越可能構(gòu)成一個(gè)詞(/詞串)。因此這些算法是統(tǒng)計(jì)或者分析字與字順序相鄰出現(xiàn)的概率來(lái)得到最大概率的切詞結(jié)果。

第三類基于序列標(biāo)注的分詞方法

條件隨機(jī)場(chǎng)(CRF)、隱馬爾科夫模型(HMM)、最大熵算法等
當(dāng)然也包括神經(jīng)網(wǎng)絡(luò)分詞模型。
他們都屬于一種字構(gòu)詞方法,最重要的思想是把分詞過(guò)程視為字在字串中的標(biāo)注問(wèn)題(例如將字標(biāo)注為“首字中間字尾字”或者其他標(biāo)注方式)。當(dāng)這些標(biāo)注完成的時(shí)候切詞也就自然完成了。這種策略能夠平衡地看待詞表詞和未登錄詞(未收錄到詞典的詞)的識(shí)別問(wèn)題,大大簡(jiǎn)化了使用門檻,并得到一個(gè)相當(dāng)不錯(cuò)的切詞結(jié)果。
強(qiáng)行插入一波廣告隱馬爾科夫模型的淺顯介紹鏈接

第四類其他分詞方法

分詞方法不限于上述幾種方式和算法。還有很多有效可靠的算法,我沒有很好地將他們分類。包括N-最短路徑算法,自動(dòng)感知機(jī)算法,基于字的生成式模型,等等。另外還有通過(guò)計(jì)算機(jī)模擬人類對(duì)句子的理解,同時(shí)具備句法的分析,語(yǔ)義的理解,并共同作用于分詞的結(jié)果而且能順帶給出歧義的最優(yōu)解。
還有一個(gè)最準(zhǔn)最強(qiáng)分詞器(性能差了點(diǎn))----人腦。小伙伴們有沒有發(fā)現(xiàn)人腦能簡(jiǎn)單地進(jìn)行分詞,機(jī)器卻這么復(fù)雜和困難才勉強(qiáng)能使用,人腦還是hin強(qiáng)大啊。

以上就是基本分詞算法的分類以及其主要的思想。
下面分享一些基本的算法理論介紹,覺得無(wú)趣的小伙伴先去洗洗睡吧。

正向/逆向最大匹配算法

先說(shuō)說(shuō)最大匹配算法,最大匹配算法就是按照某種策略使得切得的詞包含的字串長(zhǎng)度最大。正向最大匹配算法是從左往右進(jìn)行匹配,反向則是從右往左進(jìn)行匹配。舉個(gè)栗子:

詞典: 研究,研究生,生活,水平,活水,的確,確實(shí),在理。
句子: 研究生活水平;他說(shuō)的確實(shí)在理。

那么正向匹配算法,匹配過(guò)程:(咱們字典最大長(zhǎng)度為3)
從左往右先選擇最大的長(zhǎng)度作為待查字串,然后查詢字典,沒命中的情況下,將最后一個(gè)字去除,再查詢字典,如此往復(fù),直到待查字串為空。
第一句: 研究生活水平

待查字串 是否命中字典 輸出
研究生 研究生
活水平
活水 研究生 活水
null 研究生 活水 平

下一句: 他說(shuō)的確實(shí)在理。

待查字串 是否命中字典 輸出
他說(shuō)的
他說(shuō)
null
說(shuō)的確
...略 他 說(shuō)
的確在
的確 他 說(shuō) 的確
實(shí)在理
實(shí)在 他 說(shuō) 的確 實(shí)在
null 他 說(shuō) 的確 實(shí)在 理

那么逆向最大匹配算法,也就是說(shuō)是個(gè)從右往左的一個(gè)反向過(guò)程,實(shí)際上與上述過(guò)程一樣。只寫一句栗子。

待查字串 是否命中字典 輸出
實(shí)在理
在理 在理
的確實(shí)
確實(shí) 確實(shí) 在理
他說(shuō)的
說(shuō)的
...略 他 說(shuō) 的 確實(shí) 在理

小伙伴也看到了,逆向匹配好像要優(yōu)于正向匹配。也確實(shí)實(shí)驗(yàn)表明(哪里有過(guò)統(tǒng)計(jì)),逆向最大匹配算法要優(yōu)于正向最大匹配算法的。但也不絕對(duì),還是有不少句子正向的結(jié)果要比反向結(jié)果要好很多的。

雙向最大匹配算法

雙向最大匹配算法是將正向最大匹配法與逆向最大匹配法組合。將句子分別使用正向最大匹配和逆向最大匹配法進(jìn)行掃描切分。如果兩種分詞方法得到的匹配結(jié)果相同,則認(rèn)為分詞正確,否則,按照最小集或者其他策略進(jìn)行選擇和融合處理。
據(jù)說(shuō),中文中90.0%左右的句子,正向最大匹配法和逆向最大匹配法完全重合且正確,只有大概9.0%的句子兩種切分方法得到 的結(jié)果不一樣,但其中必有一個(gè)是正確的(歧義檢測(cè)成功),只有不到1.0%的句子,正向最大匹配法和逆向最大匹配法的切分雖重合卻是錯(cuò)的,或者正向最大匹配法和逆向最大匹配法切分不同但兩個(gè)都不對(duì)(歧義檢測(cè)失敗)。這正是雙向最大匹配法在實(shí)用中文信息處理系統(tǒng)中得以廣泛使用的原因所在。

最少切分策略

最少切分策略,思路也比較簡(jiǎn)單,將幾種切分算法得到的結(jié)果,選擇詞數(shù)最少的,如果詞數(shù)一樣再用其他方式進(jìn)行挑選。這個(gè)只是個(gè)挑選策略,事實(shí)證明句子詞數(shù)最少的切分方式往往都是正確的。

N元模型(N-gram)切詞

基于N元模型的切詞策略是將訓(xùn)練好的N-gram模型進(jìn)行路徑計(jì)算得到最優(yōu)切分策略路徑。巨大多數(shù)句子由于歧義的存在,肯定會(huì)有多種切分路徑,之前的最大匹配算法就是就是用一種貪婪的規(guī)則方式選擇最優(yōu)的路徑,N-gram模型則是用統(tǒng)計(jì)得到的先驗(yàn)概率來(lái)得到概率最大的路徑。
依然還是舉上述的例子:

句子: 他說(shuō)的確實(shí)在理
假設(shè)我們使用的2-gram,每個(gè)字出現(xiàn)的概率只與其前面的一個(gè)字有關(guān)

那么我們能舉例出所有的詞路徑:


找出其最優(yōu)的路徑,就能得到最優(yōu)的切分方式。
在其他算法中如最短路徑算法,是設(shè)定每個(gè)路徑上的每條邊作為一個(gè)觸達(dá)距離,然后再使用Dijkstra或者其他最短路徑法來(lái)得到最短的觸達(dá)距離作為最優(yōu)解。
N-gram模型的算法中,每個(gè)路徑上的邊都是一個(gè)N-gram的概率于是得到如下概率路徑有向圖。

那么分詞任務(wù)就轉(zhuǎn)變?yōu)?strong>如何求解最優(yōu)策略路徑
假設(shè)隨機(jī)變量S為一個(gè)漢字序列,W是S上所有可能的切分路徑(如上圖所有從頭至尾的不同路徑)。對(duì)于分詞,實(shí)際上就是求解使條件概率P(W∣S)最大的切分路徑W^*,P(W∣S)即為每條路徑的衡量標(biāo)準(zhǔn)。
W^* = argmax_W P(W|S)

做貝葉斯公式轉(zhuǎn)換:
W^* = argmax_W \frac{P(W)P(S|W)}{P(S)}

由于P(S)為歸一化因子,而且一般情況下(詞序列無(wú)論怎么變子序列都是不會(huì)變化)P(S∣W)為1,因此只需要求解 P(W)。
假設(shè)我們使用 2-gram 語(yǔ)言模型進(jìn)行建模(一個(gè)字詞的出現(xiàn)只依賴它前面的那個(gè)字或詞)。
P(W) = P(w_1w_2w_3...w_N) = P(w_1|s) \cdot P(w_2|w_1) \cdot P(w_3|w_2)... P(w_{N}|w_{N-1}) \cdot P(e|w_N)

有了上述模型,就可以得到每條切分路徑的P(W|S)也就是開頭說(shuō)的每條切分路徑的衡量標(biāo)準(zhǔn)。
在這只后再使用暴力窮舉也好,動(dòng)態(tài)規(guī)劃也好,最短路徑算法也好,最終找出最優(yōu)解W^*序列即為最優(yōu)的切詞策略。

隱馬爾科夫模型(HMM)切詞

再次強(qiáng)行插入一波廣告隱馬爾科夫模型的淺顯介紹鏈接
字構(gòu)詞的分詞方法思想,是將分詞問(wèn)題轉(zhuǎn)化為字的分類問(wèn)題(序列標(biāo)注問(wèn)題)。就是說(shuō)序列標(biāo)注有以下幾種: 詞首,詞中,詞尾,單子詞等。舉個(gè)下面的列子就能明白了。

說(shuō) 實(shí)
詞首 詞中 詞尾 單字詞 單字詞 詞首 詞尾 詞首 詞尾

當(dāng)每個(gè)字的標(biāo)注都得出的時(shí)候,切詞也就順理成章得完成了。

隱馬爾科夫模型中上述切詞問(wèn)題,對(duì)應(yīng)以下幾種要素,為觀察符號(hào),標(biāo)注為隱含狀態(tài),目標(biāo)是找出概率最大的標(biāo)注序列,實(shí)際上就是隱馬爾科夫模型三大問(wèn)題中的解碼問(wèn)題。

給定一個(gè)模型λ , 和一個(gè)觀察序列O,找出產(chǎn)生這一序列概率最大的狀態(tài)序列Q
這個(gè)問(wèn)題可以使用Viterbi算法就可以輕松解決。

CRF切詞

條件隨機(jī)場(chǎng)(CRF)同樣也是一種標(biāo)注思想,但與HMM不同的地方在于,HMM還算是生成式的話,CRF就屬于判別式了,因?yàn)镃RF主要的思想是將字進(jìn)行分類任務(wù)得到它的最優(yōu)的標(biāo)注。
CRF假設(shè)標(biāo)注序列Y在給定觀察序列X的條件下,Y構(gòu)成的圖為一個(gè)MRF(馬爾科夫隨機(jī)場(chǎng))。

參考資料

https://www.cnblogs.com/en-heng/p/6214023.html
https://zhuanlan.zhihu.com/p/33261835

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容