Mmseg中文分词算法解析
Mmseg中文分詞算法解析
@author?linjiexing
開發中文搜索和中文詞庫語義自己主動識別的時候,我採用都是基于mmseg中文分詞算法開發的Jcseg開源project。使用場景涉及搜索索引創建時的中文分詞、新詞發現的中文分詞、語義詞向量空間構建過程的中文分詞和文章特征向量提取前的中文分詞等,整體使用下來,感覺jcseg是一個非常優秀的開源中文分詞工具,并且可配置和開源的情況下,能夠滿足非常多場景的中文分詞邏輯。本文先把jcseg使用到最主要的mmseg算法解析一下。
?
1.?中文分詞算法之爭
在分析mmseg算法前,先講述一段中文分詞的基本歷史,在吳軍著的《數學之美》中有詳述。我主要聊聊我的想法。算法開發的思維流程事實上和這段歷史基本上是吻合的。我們的直觀思維非常easy受限于我們的知識儲備和經驗,比方我們在設計出飛機之前,想到是仿生的方式去模擬鳥兒的扇動翅膀姿勢,直到后來空氣動力學發現飛翔的本質是扇動翅膀能夠產生空氣渦流而給以上升驅動力,由螺旋槳推升比空氣質量高的物體。飛機由此發明。
在中文分詞的道路上,也曾走過這樣一段類似的探索之路。
一開始。為了實現合理的中文分詞。我們能想到的是使用語言學家已經歸納的語法規則,依據傳統的“句讀”切割,給語句分詞??墒?。我們知道,非常多出名的詩句或文學語句都不是來自于正常的語法,甚至有些口語化的語句也不滿足語法規則,可是并不影響人的識別,并且可能還是流傳千古的創新之作。
所以。直覺的有限定義并不能滿足千變萬化的語言環境。
在IBM花費非常多時間和人力之后。發現走傳統思維是行不通的。轉而走向如今流行的統計學語言模型。我個人是這么理解統計學模型的。本質上語言學家的語法規則也是來自于大量語料的統計和歸納。并加以個人或專家團隊的約束,組織成有限的語法規則,可是這個語法規則被約束成有限的,從而不滿足人類的無線創作的可能性——用概率學的角度看,語法規則可能能夠覆蓋到一個標準差內的可能發生的事件(其實。并沒有到這個覆蓋率)。可是其他小概率事件并沒有覆蓋,甚至隨著時間的演變,語料庫的迅速添加,長尾效應和創新效應的存在,覆蓋率更快的減少。使用有限非完備的方式,是非常難應對無限擴展的方式。這個時候,就是基于統計學的機器學習占了實踐的上風。
發展到如今。有非常多基于統計理論的中文分詞算法,也有非常多成熟的產品。他們在實踐中盡管并不是達到百分百正確率,可是在非常多應用場景已經能夠滿足要求,適定性比基于語法的方式要優越非常多。
當然,但凡基于統計學的模型,其探索之路就意味著永無止境。
不同的算法模型也有不同的適定場景。各位能夠自己嘗試。我所使用到的場景使用mmseg算法就能夠有非常好的效果,所以沒有深入查閱其他算法的原理。臨時無法給出比較客觀的比較。
?
2.?Mmseg算法原理
如上所述,mmseg算法是基于統計模型的,所以算法的規則也是來自于對語料庫的分析和歸納,作者依據語料庫總結出分詞的規則,分為四個步驟。算法原文為?http://technology.chtsai.org/mmseg/?。
詳細規則例如以下:
①?規則1,最大匹配:假設詞語能夠找到一個簡單的詞匹配,則覺得該詞即為該詞語的分詞
類似。詞語“國際化”,通過詞典分詞。能夠有例如以下分詞結果
1. 國_際_化 2. 國際_化 3. 國際化 1. C1_C2_C3 2. C1C2_C3 3. C1_C2C3 4. C1C2C3可見“國際化”有全然相應的詞,則覺得這個詞語即是一個詞。
規則總結例如以下:
選取C1C2C3模式
?
②?規則2,最大平均詞匯長度。假設詞語分詞不滿足規則1,則使用規則2:
類似。詞語“南京市長江大橋”,分詞結果可能例如以下
1. 南京市_長江大橋 —— 平均詞長度為7/2=3.5 2. 南京_市長_江大橋 —— 平均詞長度為7/3=2.3歸納該規則為則選取第一種分詞方式,可見這個規則是兼容第一個規則的
1. C1C2_C3C4C5C6 2. C1C2_C3C4_C5C6③?規則3,最小詞長方差。假設規則②不成立,則進行規則三。這個規則和我們平時用語有關,一般我們在組織語句時,為了朗朗上口,往往使用的詞匯組成長度比較一致。
比方,“幸福_快樂”,“人之初_性本善”,“君子一言,駟馬難追”。?
類似,詞語“研究生命科學”
1. 研究生_命_科學 ——詞長方差0.82 2. 研究_生命_科學 ——詞長方差0上述平均詞長都是2,可是詞長方差不一致。依據規則③。選擇另外一種分詞方式,這樣的規則能夠歸納為
1. _C1C2_C3C4_C5C6_ 2. _C1C2C3_C4_C5C6_④?規則4。最大單字自由度。
所謂單字自由度,能夠簡單的理解為這個字作為單獨出現的語境次數。比方“的”常常作為定語修飾字,常常出如今各種語境??墒恰暗摹迸紶栆矔推渌衷~組成成語。比方“目的”等,這樣的組合會影響改字的自由度。
有關自由度和凝固度?;仡^在《新詞發現》中討論。這樣的推斷主要是使用在單字存在的場景。
在規則③不成立的情況下,進行規則④的推斷。
1. 化妝_和(10)_服裝 2. 化妝_和服_裝(3)總結該規則為(備注,上面自由度屬于個人瞎編)平均詞長和詞長方差是一致的,可是單字的自由度不同。選擇第一種分詞方式
| 1.?_C1C2_C3_C4C5_ 2.?_C1C2_C3C4_C5_ Compare?the?freedom(C3)?to?freedom(C5) |
?
3.?該算法的錯誤情況
????該算法的錯誤案例能夠詳見原論文的Example?of?errors小節。個別錯誤是能夠避免的,尤其是單字自由度,主要是語料庫的訓練問題。有些問題能夠通過新詞發現解決。查看該約束,能夠推斷是否滿足自己的應用場景。
?
4.?小結
? ? 能感覺這篇算法闡述還是非常精煉美麗的,在非常多場景適定性也非常強。興許將對基于mmseg算法開源的jcseg做個分析。
?
轉載于:https://www.cnblogs.com/lytwajue/p/6859946.html
總結
以上是生活随笔為你收集整理的Mmseg中文分词算法解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: STL源码分析-bitset
- 下一篇: 窗体的消息处理