一個良好的分詞系統應由詞典和統計兩套系統組成。后者為前者構造可持續更新的詞典,識別新詞,同時對消岐部分進行匹配。在分詞過程中,好的詞典很重要,其次算法要跟著需求走,不同需求選擇不同算法,比如有些要求速度快,與興趣相關,此時算法是次要的,而有些需求注重的是精度。
中文分詞難點:未登錄詞和切分歧義。
中文分詞算法大概分為兩類:基于字符串匹配,集掃描字符串,若發現字符串的子串和詞相同,就算匹配。例如mmseg正向最大匹配策略等。這類算法速度快,時間復雜度是0(n),實現簡單,但是對歧義和未登錄詞處理效果不太明顯。基于統計及機器學習的分詞方式。這類分詞基于人工標注的詞性和統計特征,對中文進行建模。對標注好的預料進行訓練。在分詞階段,通過模型計算各種分詞出現的概率,概率最大的分詞即為最終結果。常見模型如CRF、HMM。這類算法能很好的解決歧義和未登錄問題,效果比前一類好,但是需要大量人工標注數據,分詞速度較慢。基于神經網絡的分詞方式。這是未來的趨勢,目前比較看好的模型是RNN循環神經網絡,可以解決標注量的問題,但是可能存在分詞速度慢的問題,后續將確認下。
現有方法:基于詞典的匹配:前向最大匹配,后向最大匹配;基于字的標注:最大熵模型,條件隨機場模型,感知器模型;其他方法:與詞性標注集合,與句法分析結合。
常見分詞工具(以下來自知乎,具體介紹將會在后學章節展開):
1、mmseg。是我自己最喜歡的分詞方法,簡單、高效、實用、效果還不錯。http://technology.chtsai.org/mmseg/
我給它起了個名字,叫做“3段回溯式方法”,即每次從一個完整的句子里,按照從左向右的順序,識別出多種不同的3個詞的組合;然后根據下面的4條消歧規則,確定最佳的備選詞組合;選擇備選詞組合中的第1個詞,作為1次迭代的分詞結果;剩余的2個詞繼續進行下一輪的分詞運算。采用這種辦法的好處是,為傳統的前向最大匹配算法加入了上下文信息,解決了其每次選詞只考慮詞本身,而忽視上下文相關詞的問題。4條消歧規則包括,
1)備選詞組合的長度之和最大。
2)備選詞組合的平均詞長最大;
3)備選詞組合的詞長變化最?。?/p>
4)備選詞組合中,單字詞的出現頻率統計值最高。
2、CRF方法是目前公認的效果最好的分詞算法。但,具體效果是否好,也依賴于你使用的訓練模型。http://nlp.stanford.edu/software/segmenter.shtml
3、我認識一個做搜索解決方案的朋友,他們公司提供了CRF和mmseg的開源實現http://www.coreseek.cn/opensource/
4、其實還可以使用專業公司的解決方案,比如海量和中科院分詞的收費版本,也花不了多少錢。集中精力找到你自己產品獨特的價值所在。
5、最大熵模型
剛開始系統的研究自然語言處理的內容,一定存在一些不足,望大家可以隨時糾錯交流。