中文分詞概述
詞是最小的能夠獨立活動的有意義的語言成分,一般分詞是自然語言處理的第一項核心技術。英文中每個句子都將詞用空格或標點符號分隔開來,而在中文中很難對詞的邊界進行界定,難以將詞划分出來。在漢語中,雖然是以字為最小單位,但是一篇文章的語義表達卻仍然是以詞來划分的。因此處理中文文本時,需要進行分詞處理,將句子轉為詞的表示,這就是中文分詞。
中文分詞的三個難題:
分詞規則,消除歧義和未登錄詞識別。
構建完美的分詞規則便可以將所有的句子正確的划分,但是這根本無法實現,語言是長期發展自然而然形成的,而且語言規則龐大復雜,很難做出完美的分詞規則。
在中文句子中,很多詞是由歧義性的,在一句話也可能有多種分詞方法。比如:”結婚/的/和尚/未結婚/的“,“結婚/的/和/尚未/結婚/的”,人分辨這樣的句子都是問題,更何況是機器。
此外對於未登陸詞,很難對其進行正確的划分。
目前主流分詞方法:
基於規則,基於統計以及二者混合。
基於規則的分詞:
主要是人工建立詞庫也叫做詞典,通過詞典匹配的方式對句子進行划分。其實現簡單高效,但是對未登陸詞很難進行處理。主要有正向最大匹配法,逆向最大匹配法以及雙向最大匹配法。
正向最大匹配法(FMM)
FMM的步驟是:
(1)從左向右取待分漢語句的m個字作為匹配字段,m為詞典中最長詞的長度。
(2)查找詞典進行匹配。
(3)若匹配成功,則將該字段作為一個詞切分出去。
(4)若匹配不成功,則將該字段最后一個字去掉,剩下的字作為新匹配字段,進行再次匹配。
(5)重復上述過程,直到切分所有詞為止。
分詞的結果為:
逆向最大匹配法(RMM)
RMM的基本原理與FMM基本相同,不同的是分詞的方向與FMM相反。RMM是從待分詞句子的末端開始,也就是從右向左開始匹配掃描,每次取末端m個字作為匹配字段,匹配失敗,則去掉匹配字段前面的一個字,繼續匹配。
分詞的結果為:
雙向最大匹配法(Bi-MM)
Bi-MM是將正向最大匹配法得到的分詞結果和逆向最大匹配法得到的結果進行比較,然后按照最大匹配原則,選取詞數切分最少的作為結果。據SunM.S.和Benjamin K.T.(1995)的研究表明,中文中90.0%左右的句子,正向最大匹配法和逆向最大匹配法完全重合且正確,只有大概9.0%的句子兩種切分方法得到的結果不一樣,但其中必有一個是正確的(歧義檢測成功),只有不到1.0%的句子,使用正向最大匹配法和逆向最大匹配法的切分雖然重合但是錯的,或者兩種方法切分不同但結果都不對(歧義檢測失敗)。
雙向最大匹配的規則是:
(1)如果正反向分詞結果詞數不同,則取分詞數量少的那個。
(2)如果分詞結果詞數相同:
1)分詞結果相同,沒有歧義,返回任意一個。
2)分詞結果不同,返回其中單字數量較少的那個。
比如:上述例子中詞數相同,但結果不同,逆向最大匹配法的分詞結果單字個數是1,所以返回的是逆向最大匹配法的結果。
分詞的結果為:
基於規則的分詞,一般較為簡單高效,但是詞典的維護很大的人力維護,同時對於未登錄詞也沒有很好的解決辦法。雙向最大匹配結合了正反兩種方法的結果,結果較為准確,在實用中文信息處理中使用廣泛。
待更新。
詳細代碼可參考GitHub: 代碼連接
參考:
《Python自然語言處理實戰-核心技術與算法》塗銘,劉祥,劉樹春 著
《統計自然語言處理》 宗成慶 著
