NLP︱中文分词技术小结、几大分词引擎的介绍与比较
NLP︱中文分詞技術(shù)小結(jié)、幾大分詞引擎的介紹與比較
筆者想說:覺得英文與中文分詞有很大的區(qū)別,畢竟中文的表達方式跟英語有很大區(qū)別,而且語言組合形式豐富,如果把國外的內(nèi)容強行搬過來用,不一樣是最好的。所以這邊看到有幾家大牛都在中文分詞以及NLP上越走越遠。哈工大以及北大的張華平教授(NLPIR)的研究成果非常棒!
但是商業(yè)應(yīng)用的過程中存在的以下的問題:
1、是否先利用開源的分詞平臺進行分詞后,再自己寫一些算法進行未登錄詞、歧義詞的識別?
2、或者直接調(diào)用下文介紹的分詞引擎來進行分詞呢?繳費使用固然很棒,但是是否值得?
——————————————————————————————————————————
來看一下這篇論文一些中文分詞工具的性能比較《開源中文分詞器的比較研究_黃翼彪,2013》
8款中文分詞器的綜合性能排名:
Paoding(準確率、分詞速度、新詞識別等,最棒)
mmseg4j(切分速度、準確率較高)
IKAnalyzer
Imdict-chinese-analyzer
Ansj
盤古分詞
Httpcws
jieba
——————————————————————————————————————————
一、中文分詞技術(shù)
1、常見的兩類中文分詞技術(shù)
中文分詞技術(shù)常見的有兩大類:機械分詞技術(shù)、基于統(tǒng)計的序列標注技術(shù)。
機械分詞技術(shù)操作簡單、方便,比較省心,但是對于歧義詞以及未登錄詞的效果并不是很好;
統(tǒng)計模型的序列標注方法,對于識別未登錄詞擁有較好的識別能力,而且分詞精度也比較大,同時這個方法可以不分中文、英語,著重看在語言前后順序。
以下是思維導(dǎo)圖的形式展示兩大區(qū)別:
2、深度學(xué)習(xí)在分詞、找詞中的應(yīng)用
(1)word2vec詞向量
雖然word2vec只有三層神經(jīng)網(wǎng)絡(luò),但是已經(jīng)取得非常好的效果。通過word2vec,可以將一個詞表示為詞向量,將文字數(shù)字化,更好的讓計算機理解。使word2vec模型,我們可以方便的找到同義詞或聯(lián)系緊密的詞,或者意義相反的詞等。
(2)RNN(Recurrent Neural Networks,循環(huán)神經(jīng)網(wǎng)絡(luò))——seq2seq
在自然語言處理中,上下文關(guān)系非常重要,一個句子中前后詞并不獨立,不同的組合會有不同的意義,比如”優(yōu)秀”這個詞,如果前面是”不”字,則意義完全相反。RNN則考慮到網(wǎng)絡(luò)前一時刻的輸出對當前輸出的影響,將隱藏層內(nèi)部的節(jié)點也連接起來,即當前時刻一個節(jié)點的輸入除了上一層的輸出外,還包括上一時刻隱藏層的輸出。RNN在理論上可以儲存任意長度的轉(zhuǎn)態(tài)序列,但是在不同的場景中這個長度可能不同。比如在詞的預(yù)測例子中:
?1,“他是億萬富翁,他很?”;?
2,“他的房子每平米物業(yè)費40元,并且像這樣的房子他有十幾套,他很?”。
從這兩個句子中我們已經(jīng)能猜到?代表“有錢”或其他類似的詞匯,但是明顯,第一句話預(yù)測最后一個詞時的上線文序列很短,而第二段話較長。如果預(yù)測一個詞匯需要較長的上下文,隨著這個距離的增長,RNN將很難學(xué)到這些長距離的信息依賴,雖然這對我們?nèi)祟愊鄬θ菀?。在實踐中,已被證明使用最廣泛的模型是LSTM(Long Short-Term Memory,長短時記憶)很好的解決了這個問題。
?
LSTM最早由Hochreiter及 Schmidhuber在1997年的論文中提出。首先LSTM也是一種RNN,不同的是LSTM能夠?qū)W會遠距離的上下文依賴,能夠存儲較遠距離上下文對當前時間節(jié)點的影響。
?
所有的RNN都有一串重復(fù)的神經(jīng)網(wǎng)絡(luò)模塊。對于標準的RNN,這個模塊都比較簡單,比如使用單獨的tanh層。LSTM擁有類似的結(jié)構(gòu),但是不同的是,LSTM的每個模塊擁有更復(fù)雜的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):4層相互影響的神經(jīng)網(wǎng)絡(luò)。在LSTM每個單元中,因為門結(jié)構(gòu)的存在,對于每個單元的轉(zhuǎn)態(tài),使得LSTM擁有增加或減少信息的能力。
(來源文章:基于Deep Learning的中文分詞嘗試)
(3)深度學(xué)習(xí)庫
Keras(http://keras.io)是一個非常易用的深度學(xué)習(xí)框架,使用python語言編寫,是一個高度模塊化的神經(jīng)網(wǎng)絡(luò)庫,后端同時支持Theano和TensorFlow,而Theano和TensorFlow支持GPU,因此使用keras可以使用GPU加速模型訓(xùn)練。
Keras中包括了構(gòu)建模型常用的模塊,如Optimizers優(yōu)化方法模塊,Activations激活函數(shù)模塊,Initializations初始化模塊,Layers多種網(wǎng)絡(luò)層模塊等,可以非常方便快速的搭建一個網(wǎng)絡(luò)模型,使得開發(fā)人員可以快速上手,并將精力放在模型設(shè)計而不是具體實現(xiàn)上。常見的神經(jīng)網(wǎng)絡(luò)模型如CNN,RNN等,使用keras都可以很快搭建出來,開發(fā)人員只需要將數(shù)據(jù)準備成keras需要的格式丟進網(wǎng)絡(luò)訓(xùn)練即可。如果對keras中自帶的layer有更多的需求,keras還可以自己定制所需的layer。
——————————————————————————————————————————
二、常見的中文分詞引擎的介紹
1、11款中文分詞引擎大比拼
測試了11家中文分詞引擎(各家分詞系統(tǒng)鏈接地址),同時從分詞準確度、歧義詞切分、未登陸詞(新涌現(xiàn)的通用詞、專業(yè)術(shù)語、專有名詞)三個方面進行論證。
BosonNLP:http://bosonnlp.com/dev/center
IKAnalyzer:http://www.oschina.net/p/ikanalyzer
NLPIR:http://ictclas.nlpir.org/docs
SCWS中文分詞:http://www.xunsearch.com/scws/docs.php
結(jié)巴分詞:https://github.com/fxsjy/jieba
盤古分詞:http://pangusegment.codeplex.com/
庖丁解牛:https://code.google.com/p/paoding/
搜狗分詞:http://www.sogou.com/labs/webservice/
騰訊文智:http://www.qcloud.com/wiki/API%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3
新浪云:http://www.sinacloud.com/doc/sae/python/segment.html
語言云:http://www.ltp-cloud.com/document
最終的結(jié)果顯示:
從分詞精度來看,哈工大的語言云表現(xiàn)的穩(wěn)定一直在第二,BostonNLP分詞更好,一直在這個領(lǐng)域保持第一。
評測數(shù)據(jù)地址:http://bosonnlp.com/dev/resource(來源bostonNLP微信公眾號)
2、哈工大語言云
語言技術(shù)平臺(LTP)?提供包括中文分詞、詞性標注、命名實體識別、依存句法分析、語義角色標注等豐富、 高效、精準的自然語言處理技術(shù)。經(jīng)過?哈工大社會計算與信息檢索研究中心?11 年的持續(xù)研發(fā)和推廣,LTP 已經(jīng)成為國內(nèi)外最具影響力的中文處理基礎(chǔ)平臺。
切分歧義是分詞任務(wù)中的主要難題。 LTP的分詞模塊基于機器學(xué)習(xí)框架,可以很好地解決歧義問題。 同時,模型中融入了詞典策略,使得LTP的分詞模塊可以很便捷地加入新詞信息。
3、張華平NLPIR
對原始語料進行分詞、自動識別人名地名機構(gòu)名等未登錄詞、新詞標注以及詞性標注。并可在分析過程中,導(dǎo)入用戶定義的詞典。
NLPIR/ICTCLAS分詞系統(tǒng),采用層疊隱馬模型(算法細節(jié)請參照:張華平,高凱,黃河燕,趙燕平,《大數(shù)據(jù)搜索與挖掘》科學(xué)出版社。2014.5?ISBN:978-7-03-040318-6),分詞準確率接近98.23%,具備準確率高、速度快、可適應(yīng)性強等優(yōu)勢。
它能夠真正理解中文,利用機器學(xué)習(xí)解決歧義切分與詞性標注歧義問題。張博士先后傾力打造十余年,內(nèi)核升級10次,全球用戶突破30萬。(博客中科院分詞系統(tǒng)整理筆記)
《大數(shù)據(jù)搜索與挖掘》張華平:在線看書網(wǎng)址
4、bostonNLP
玻森采用的結(jié)構(gòu)化預(yù)測分詞模型是傳統(tǒng)線性條件隨機場(Linear-chain CRF)的一個變種。
分詞與詞性標注中,新詞識別與組合切分歧義是兩個核心挑戰(zhàn)。玻森在這方面做了不少的優(yōu)化,包括對特殊字符的處理,對比較有規(guī)律的構(gòu)詞方式的特征捕捉等。
例如,近些年比較流行采用半監(jiān)督的方式,通過使用在大規(guī)模無標注數(shù)據(jù)上的統(tǒng)計數(shù)據(jù)來改善有監(jiān)督學(xué)習(xí)中的標注結(jié)果,也在我們的分詞實現(xiàn)上有所應(yīng)用。比如通過使用Accessory Variety作為特征,能夠比較有效發(fā)現(xiàn)不同領(lǐng)域的新詞,提升泛化能力。
怎樣確定兩個詞是否是固定的搭配呢?我們通過計算兩個詞間的歸一化逐點互信息(NPMI)來確定兩個詞的搭配關(guān)系。逐點互信息(PMI),經(jīng)常用在自然語言處理中,用于衡量兩個事件的緊密程度。歸一化逐點互信息(NPMI)是逐點互信息的歸一化形式,將逐點互信息的值歸一化到-1到1之間。如果兩個詞在一定距離范圍內(nèi)共同出現(xiàn),則認為這兩個詞共現(xiàn)。
篩選出NPMI高的兩個詞作為固定搭配,然后將這組固定搭配作為一個組合特征添加到分詞程序中。如“回答”和“問題”是一組固定的搭配,如果在標注“回答”的時候,就會找后面一段距離范圍內(nèi)是否有“問題”,如果存在那么該特征被激活。
歸一化逐點互信息(NPMI)的計算公式
逐點互信息(PMI)的計算公式
可以看出,如果我們提取固定搭配不限制距離,會使后面偶然出現(xiàn)某個詞的概率增大,降低該統(tǒng)計的穩(wěn)定性。在具體實現(xiàn)中,我們限定了成為固定搭配的詞對在原文中的距離必須小于一個常數(shù)。具體來看,可以采用倒排索引,通過詞找到其所在的位置,進而判斷其位置是否在可接受的區(qū)間。這個簡單的實現(xiàn)有個比較大的問題,即在特定構(gòu)造的文本中,判斷兩個詞是否為固定搭配有可能需要遍歷位置數(shù)組,每次查詢就有O(n)的時間復(fù)雜度了,并且可以使用二分查找進一步降低復(fù)雜度為O(logn)。
其實這個詞對檢索問題有一個更高效的算法實現(xiàn)。我們采用滑動窗口的方法進行統(tǒng)計:在枚舉詞的同時維護一張詞表,保存在當前位置前后一段距離中出現(xiàn)的可能成詞的字符序列;當枚舉詞的位置向后移動時,窗口也隨之移動。
這樣在遍歷到“回答”的時候,就可以通過查表確定后面是否有“問題”了,同樣在遇到后面的“問題”也可以通過查表確定前面是否有“回答”。當枚舉下一個詞的時候,詞表也相應(yīng)地進行調(diào)整。采用哈希表的方式查詢詞表,這樣計算一個固定搭配型時間復(fù)雜度就可以是O(1)了。
通過引入上述的上下文的信息,分詞與詞性標注的準確率有近1%的提升,而對算法的時間復(fù)雜度沒有改變。我們也在不斷迭代升級以保證引擎能夠越來越準確,改善其通用性和易用性。
——bostanNLP公眾號推文
5、NLTK——斯坦福中文分詞器
斯坦福大學(xué)自然語言處理組是世界知名的NLP研究小組,他們提供了一系列開源的Java文本分析工具,包括分詞器(Word Segmenter),詞性標注工具(Part-Of-Speech Tagger),命名實體識別工具(Named Entity Recognizer),句法分析器(Parser)等,可喜的事,他們還為這些工具訓(xùn)練了相應(yīng)的中文模型,支持中文文本處理。
在使用NLTK的過程中,發(fā)現(xiàn)當前版本的NLTK已經(jīng)提供了相應(yīng)的斯坦福文本處理工具接口,包括詞性標注,命名實體識別和句法分析器的接口,不過可惜的是,沒有提供分詞器的接口。在google無果和閱讀了相應(yīng)的代碼后,我決定照貓畫虎為NLTK寫一個斯坦福中文分詞器接口,這樣可以方便的在Python中調(diào)用斯坦福文本處理工具,詳情可見該公眾號分享文。
(來源公眾號分享)
——————————————————————————————————————————
三、R中的JiebaR和wordseg
jiebaR是“結(jié)巴”中文分詞(Python)的R語言版本,支持最大概率法(Maximum Probability),隱式馬爾科夫模型(Hidden Markov Model),索引模型(QuerySegment),混合模型(MixSegment)共四種分詞模式,同時有詞性標注,關(guān)鍵詞提取,文本Simhash相似度比較等功能。項目使用了Rcpp和CppJieba進行開發(fā)。目前托管在GitHub上。
來自:http://cos.name/tag/jiebar/
可參考:?R語言︱文本挖掘——jiabaR包與分詞向量化的simhash算法(與word2vec簡單比較)
R語言︱文本挖掘之中文分詞包——Rwordseg包
————————————————————————————————————————————————————————————
四、參考文獻的羅列
1、張華平老師的書,還有其論文可以在百度學(xué)術(shù)找得到一些,還有一本書《大數(shù)據(jù)搜索與挖掘》
2、哈工大社會計算與信息檢索研究中心的發(fā)表論文集
總結(jié)
以上是生活随笔為你收集整理的NLP︱中文分词技术小结、几大分词引擎的介绍与比较的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux服务篇-DHCP服务
- 下一篇: Easyui之datagrid修改