常用概念:
自然語言處理(NLP)
數據挖掘
推薦算法
用戶畫像
知識圖譜
信息檢索
文本分類
常用技術:
詞級別:分詞(Seg),詞性標注(POS),命名實體識別(NER),未登錄詞識別,詞向量(word2vec),詞義消歧
句子級別:情感分析,關系提取,意圖識別,依存句法分析(paser),角色標注,淺層語義分析,指代消解
篇章級別:信息抽取,本體提取,事件抽取,主題提取,文檔聚類,輿情分析,篇章理解,自動文摘
常用算法:
機器學習(感知機,邏輯回歸,隱馬爾科夫(HMM),條件隨機場(CRF),支持向量機(SVM),語言模型,主題模型(LDA),TF-IDF,互信息(PMI),貝葉斯模型,概率圖模型
深度學習(cnn,rnn,dnn,lstm等)
中科院nlpir和海量分詞(http://www.hylanda.com/)是收費的。
hanlp:推薦基于CRF的模型的實現~~要看語料,很多常用詞會被分錯,所以需要詞庫支撐。目前最友好的開源工具包應該是HanLP,基于詞典,對各種實體詞匯做了HMM,也提供了CRF模型。工程實現也不錯,性能不是瓶頸。代碼有相對完備的注釋,文檔也比較全,各種算法原理實現也有對應blog,自己研究和做二次開發都比較方便。
最近寫了一款分詞器,調研了不少文章的開源實現。最終定的方案是 Language Model + CRF
的混合實現。CRF的字標注法是中文分詞比賽上成績最好的方案,尤其勝在新詞識別上,而Language
Model在詞典全,詞頻統計正確的情況下分詞效果也很好,同CRF相比,勝在分詞效果穩定,易于調整,一旦發現分詞錯誤,可以通過添加新詞修正分詞效果。因此我的分詞器是先通過
CRF 識別新詞,然后再用Language Model分詞。當然,具體實現上,還涉及到怎樣融合新詞,分句,識別英文詞,數字表達式,時間日期等。
中文分詞算法大概分為兩大類
a.第一類是基于字符串匹配,即掃描字符串,如果發現字符串的子串和詞相同,就算匹配。這類分詞通常會加入一些啟發式規則,比如“正向/反向最大匹配”, “長詞優先” 等策略這類算法優點是速度塊,都是O(n)時間復雜度,實現簡單,效果尚可。也有缺點,就是對歧義和未登錄詞處理不好。歧義的例子很簡單"長春市/長春/藥店" "長春/市長/春藥/店".未登錄詞即詞典中沒有出現的詞,當然也就處理不好。 ikanalyzer,paoding 等就是基于字符串匹配的分詞。
b.第二類是基于統計以及機器學習的分詞方式這類分詞基于人工標注的詞性和統計特征,對中文進行建模,即根據觀測到的數據(標注好的語料)對模型參數進行估計,即訓練。 在分詞階段再通過模型計算各種分詞出現的概率,將概率最大的分詞結果作為最終結果。常見的序列標注模型有HMM和CRF。
這類分詞算法能很好處理歧義和未登錄詞問題,效果比前一類效果好,但是需要大量的人工標注數據,以及較慢的分詞速度。
ICTCLAS是基于HMM的分詞庫。
我們在重構知乎搜索的時候,權衡標注工作量和性能,以及代碼實現的復雜程度,我們考慮采用基于字符串匹配的分詞方法
中文分詞是個基礎問題,研究成果已有不少,我揀幾個我自己覺得好的吧。
1。張磊 提到的mmseg是我自己最喜歡的分詞方法,簡單、高效、實用、效果還不錯。http%3A//technology.chtsai.org/mmseg/。我給它起了個名字,叫做“3段回溯式方法”,即每次從一個完整的句子里,按照從左向右的順序,識別出多種不同的3個詞的組合;然后根據下面的4條消歧規則,確定最佳的備選詞組合;選擇備選詞組合中的第1個詞,作為1次迭代的分詞結果;剩余的2個詞繼續進行下一輪的分詞運算。采用這種辦法的好處是,為傳統的前向最大匹配算法加入了上下文信息,解決了其每次選詞只考慮詞本身,而忽視上下文相關詞的問題。4條消歧規則包括,
1)備選詞組合的長度之和最大。
2)備選詞組合的平均詞長最大;
3)備選詞組合的詞長變化最小;
4)備選詞組合中,單字詞的出現頻率統計值最高。
2.CRF方法是目前公認的效果最好的分詞算法。但,具體效果是否好,也依賴于你使用的訓練模型nlp.stanford.edu/software/segmenter.shtml"
3. 我認識一個做搜索解決方案的朋友,他們公司提供了CRF和mmseg的開源實現 "www.coreseek.cn/opensource/"
4. 其實還可以使用專業公司的解決方案,比如海量和中科院分詞的收費版本,也花不了多少錢。集中精力找到你自己產品獨特的價值所在。
之前做自然語言解析的時候用了mmseg,很不錯的說聲。。
1. 好詞典很重要不論什么樣的分詞方法, 優秀的詞典必不可少,? 越拿老掉牙的詞典對越新的文本進行分詞,? 就越會分成一團糟.
怎樣構建一個優秀的詞典,? 快速發現新新詞匯?? 可以看 @M67 前兩天寫的文章, 講的非常透徹明白 :
互聯網時代的社會語言學:基于SNS的文本數據挖掘 (
http://www.matrix67.com/blog/archives/5044/trackback ) 2.
算法跟著需求走建議根據不同的需求選用不同的算法,? 例如,? 類似知乎頭部搜索的? AutoComplete 部分, 講究的是速度快,
興趣相關( 優先找和你賬戶相關, 和可能感興趣的內容 ),? 分詞算法反而在其次了.? 而像全文搜索這樣大段大段的長文字.
我覺得則更注重的是精準,? 應該選一個像CRF這樣的算法.
中文分詞是中文文本處理的一個基礎步驟,也是中文人機自然語言交互的基礎模塊。不同于英文的是,中文句子中沒有詞的界限,因此在進行中文自然語言處理時,通常需要先進行分詞,分詞效果將直接影響詞性、句法樹等模塊的效果。當然分詞只是一個工具,場景不同,要求也不同。在人機自然語言交互中,成熟的中文分詞算法能夠達到更好的自然語言處理效果,幫助計算機理解復雜的中文語言。竹間智能在構建中文自然語言對話系統時,結合語言學不斷優化,訓練出了一套具有較好分詞效果的算法模型,為機器更好地理解中文自然語言奠定了基礎。在此,對于中文分詞方案、當前分詞器存在的問題,以及中文分詞需要考慮的因素及相關資源,竹間智能 自然語言與深度學習小組 做了些整理和總結,希望能為大家提供一些參考。中文分詞根據實現原理和特點,主要分為以下2個類別:
1、基于詞典分詞算法也稱字符串匹配分詞算法。該算法是按照一定的策略將待匹配的字符串和一個已建立好的“充分大的”詞典中的詞進行匹配,若找到某個詞條,則說明匹配成功,識別了該詞。常見的基于詞典的分詞算法分為以下幾種:正向最大匹配法、逆向最大匹配法和雙向匹配分詞法等。基于詞典的分詞算法是應用最廣泛、分詞速度最快的。很長一段時間內研究者都在對基于字符串匹配方法進行優化,比如最大長度設定、字符串存儲和查找方式以及對于詞表的組織結構,比如采用TRIE索引樹、哈希索引等。
2、基于統計的機器學習算法這類目前常用的是算法是HMM、CRF、SVM、深度學習等算法,比如stanford、Hanlp分詞工具是基于CRF算法,hanlp是基于HMM+CRF,結巴是基于Viterbi+HMM。以CRF為例,基本思路是對漢字進行標注訓練,不僅考慮了詞語出現的頻率,還考慮上下文,具備較好的學習能力,因此其對歧義詞和未登錄詞的識別都具有良好的效果。
Nianwen Xue在其論文《Combining Classifiers for Chinese Word Segmentation》中首次提出對每個字符進行標注,通過機器學習算法訓練分類器進行分詞,在論文《Chinese word segmentation as character tagging》中較為詳細地闡述了基于字標注的分詞法。
常見的分詞器都是使用機器學習算法和詞典相結合,一方面能夠提高分詞準確率,另一方面能夠改善領域適應性。
隨著深度學習的興起,也出現了基于神經網絡的分詞器,例如有人員嘗試使用雙向LSTM+CRF實現分詞器,其本質上是序列標注,所以有通用性,命名實體識別等都可以使用該模型,據報道其分詞器字符準確率可高達97.5%。算法框架的思路與論文《Neural Architectures for
Named Entity Recognition》類似,利用該框架可以實現中文分詞,如下圖所示:首先對語料進行字符嵌入,將得到的特征輸入給雙向LSTM,然后加一個CRF就得到標注結果。
分詞器當前存在問題:目前中文分詞難點主要有三個:
1、分詞標準:比如人名,在哈工大的標準中姓和名是分開的,但在Hanlp中是合在一起的。這需要根據不同的需求制定不同的分詞標準。
2、歧義:對同一個待切分字符串存在多個分詞結果。歧義又分為組合型歧義、交集型歧義和真歧義三種類型。
1) 組合型歧義:分詞是有不同的粒度的,指某個詞條中的一部分也可以切分為一個獨立的詞條。比如“中華人民共和國”,粗粒度的分詞就是“中華人民共和國”,細粒度的分詞可能是“中華/人民/共和國”
2) 交集型歧義:在“鄭州天和服裝廠”中,“天和”是廠名,是一個專有詞,“和服”也是一個詞,它們共用了“和”字。
3) 真歧義:本身的語法和語義都沒有問題, 即便采用人工切分也會產生同樣的歧義,只有通過上下文的語義環境才能給出正確的切分結果。例如:對于句子“美國會通過對臺售武法案”,既可以切分成“美國/會/通過對臺售武法案”,又可以切分成“美/國會/通過對臺售武法案”。一般在搜索引擎中,構建索引時和查詢時會使用不同的分詞算法。常用的方案是,在索引的時候使用細粒度的分詞以保證召回,在查詢的時候使用粗粒度的分詞以保證精度。
3、新詞:也稱未被詞典收錄的詞,該問題的解決依賴于人們對分詞技術和漢語語言結構的進一步認識。
另外,我們收集了如下部分分詞工具,供參考:
中科院計算所NLPIR http://ictclas.nlpir.org/nlpir/
ansj分詞器 https://github.com/NLPchina/ansj_seg
哈工大的LTP https://github.com/HIT-SCIR/ltp
清華大學THULAC https://github.com/thunlp/THULAC
斯坦福分詞器 https://nlp.stanford.edu/software/segmenter.shtml
Hanlp分詞器 https://github.com/hankcs/
HanLP結巴分詞 https://github.com/yanyiwu/cppjieba
KCWS分詞器(字嵌入+Bi-LSTM+CRF) https://github.com/koth/kcws
ZPar https://github.com/frcchang/zpar/releases
IKAnalyzer https://github.com/wks/ik-analyzer
以及部分分詞器的簡單說明:哈工大的分詞器:主頁上給過調用接口,每秒請求的次數有限制。
清華大學THULAC:目前已經有Java、Python和C++版本,并且代碼開源。
斯坦福分詞器:作為眾多斯坦福自然語言處理中的一個包,目前最新版本3.7.0, Java實現的CRF算法。可以直接使用訓練好的模型,也提供訓練模型接口。
Hanlp分詞:求解的是最短路徑。優點:開源、有人維護、可以解答。原始模型用的訓練語料是人民日報的語料,當然如果你有足夠的語料也可以自己訓練。
結巴分詞工具:基于前綴詞典實現高效的詞圖掃描,生成句子中漢字所有可能成詞情況所構成的有向無環圖 (DAG);采用了動態規劃查找最大概率路徑, 找出基于詞頻的最大切分組合;對于未登錄詞,采用了基于漢字成詞能力的 HMM 模型,使用了 Viterbi 算法。
字嵌入+Bi-LSTM+CRF分詞器:本質上是序列標注,這個分詞器用人民日報的80萬語料,據說按照字符正確率評估標準能達到97.5%的準確率,各位感興趣可以去看看。
ZPar分詞器:新加坡科技設計大學開發的中文分詞器,包括分詞、詞性標注和Parser,支持多語言,據說效果是公開的分詞器中最好的,C++語言編寫。
關于速度:由于分詞是基礎組件,其性能也是關鍵的考量因素。通常,分詞速度跟系統的軟硬件環境有相關外,還與詞典的結構設計和算法復雜度相關。比如我們之前跑過字嵌入+Bi-LSTM+CRF分詞器,其速度相對較慢。
另外,開源項目 https://github.com/ysc/cws_evaluation 曾對多款分詞器速度和效果進行過對比,可供大家參考。最后附上公開的分詞數據集測試數據集1、SIGHAN Bakeoff 2005 MSR,560KB? http://sighan.cs.uchicago.edu/bakeoff2005/2、SIGHAN Bakeoff 2005 PKU, 510KB? http://sighan.cs.uchicago.edu/bakeoff2005/3、人民日報 2014, 65MB? https://pan.baidu.com/s/1hq3KKXe本回答來自 竹間智能 自然語言與深度學習小組 。
最后附上公開的分詞數據集測試數據集
1、SIGHAN Bakeoff 2005 MSR,560KB? http://sighan.cs.uchicago.edu/bakeoff2005/
2、SIGHAN Bakeoff 2005 PKU, 510KB? http://sighan.cs.uchicago.edu/bakeoff2005/
3、人民日報 2014, 65MB? https://pan.baidu.com/s/1hq3KKXe
其實solr自帶的跨語言自然一元分詞就很好了,怎么測效果也不比國內搞的分詞差,也許大多數情況下不需要國產的中文分詞。下面列舉原因,歡迎拍磚。1. 不可能有一種中文分詞算法能完全準確地分詞,完全按中文分詞進行的搜索不能保證搜索的全覆蓋,而按字分詞的結果是可以保證的2. 中文分詞帶來額外的開銷,比如查字典,智能算法等,而一元按字分詞開銷最小。有人說按字分詞造成索引變大,造成開銷大,其實英文單詞比中文字還多,這方面不是問題3. 按中文分詞搜索,首先對要搜索的內容要先分詞,這就有可能造成了第一步最主要的誤差,中文分詞引擎分出的詞很可能不能代表用戶的意思,而luncene基于slop的匹配誤差更小4. 隨著中文分詞算法的改進,有可能在索引中形成詞信息孤島,要么隨它占用資源,要么付出成本去維護;而基于一元字分詞的算法就沒有這個問題遺憾的是讓外國人搞出了這個通用算法在中文分詞方面居然比我們自己做的還好。
在solr里面同時配了多種常見分詞組件測試過才這么說的。關于搜“和服”,是老生常談的分詞話題了,前面說了,“1.
不可能有一種中文分詞算法能完全準確地分詞”,必須承認要這一點,但可以把分詞做得很復雜力圖準確些,solr自帶的跨語言分詞同樣也可以做得很復雜,只不過我們是走進了一個查自帶字典的死胡同,開銷很大,實際上字典應該自動維護在索引中而不是不需要另外一本字典,每種分支都有得分值,取得分高的排前面大多數情況下是合理的,如果要求還要提高,就得靠分析語義,現在這些常見分詞組件根本就沒有語義分析功能。
建議大家多做測試再說,歡迎對我提的每一條具體反駁。
也建議大家現在在百度里搜下“和服”,看有沒有這樣一條結果:季莫申科拒監禁期間穿囚服和服勞役_網易新聞中心
@熊偉 我們先把話題縮小到“搜索”這個小范疇內,不然放到NLP領域,不做分詞就什么都不是了。
1. 不可能有一種中文分詞算法能完全準確地分詞,完全按中文分詞進行的搜索不能保證搜索的全覆蓋,而按字分詞的結果是可以保證的。
分詞的準確率方面,目前基本常用的分詞技術都有99%左右的準確率(準確率是指不分錯,不包括未登錄詞)。按字切分當然不會錯,但是在搜索時同樣召回了大量“不相關”的結果,給做Rank帶來了巨大的難度。同時還丟失了眾多“詞”一級的屬性。
2. 中文分詞帶來額外的開銷,比如查字典,智能算法等,而一元按字分詞開銷最小。有人說按字分詞造成索引變大,造成開銷大,其實英文單詞比中文字還多,這方面不是問題
中分分詞目前的主流算法,都是低開銷型的。中科院那個都能達到500KB/s的分詞速度,各家企業應用的分詞也完全不是性能瓶頸。切詞性能說是不存在的。
3. 按中文分詞搜索,首先對要搜索的內容要先分詞,這就有可能造成了第一步最主要的誤差,中文分詞引擎分出的詞很可能不能代表用戶的意思,而luncene基于slop的匹配誤差更小
用戶表述的多樣性,可以通過多粒度切詞來達到同樣的效果,魔獸世界可以切出魔獸,也可以切出魔獸世界,這個不存在切詞的劣勢一說。
4.? 隨著中文分詞算法的改進,有可能在索引中形成詞信息孤島,要么隨它占用資源,要么付出成本去維護;而基于一元字分詞的算法就沒有這個問題
這個沒什么好說的。
補充:
按字切分的一元分詞,就是石器時代的東西。詞一級的信息被完全丟失,最基本的idf信息都失效了,term重要性分析基本不可能進行,更不要說加入詞性,做同義詞變換,做句法樹等等應用。這里就不繼續展開了。
現代搜索技術發展了這么多年,按字切分這種甚至不如二元切分的技術,實在是不敢茍同。這不是一個技術人員應該有的視野,如果繼續堅持這種原始野性的世界觀,只有被淘汰沒有什么其他的。
@楊宣 其實一元分詞這種說法就不規范,按理解就是一個字一分。而多元的多個字連起來分,無論在任何情況下,一元分詞能保證全覆蓋。針對某些句子,用多元分很可能有多種分法,不結合語義不能自動確定哪個是對的,比如"登上海南公司的航班"不保證不切出"上海"、"上海南"來,這就造成多元分詞的不穩定,不同軟件,針對不同句子,有不同的結果,而且不能保證信息的全覆蓋,有可能搜不到的情況(在mmseg4j復雜模式下,切出一個長詞"海南航空公司",搜局部就可能搜不到),甚至直接切出垃圾(如前面的"上海",又占資源,有影響結果)
其次,不能說多元分詞比一元分詞準確,準確和詞的上下文的推導算法有關,多元的可以按前后詞推導,一元的照樣可以按前后字推導。只不過solr自帶的跨語言自然一元分詞是按照基于slop的匹配,沒有推導,slop是指匹配結果字直接的間距,最小的結果排最前。如果搜“中華人民共和國”七個字,每個字都匹配上了,而且他們的slop都等于0(最高優先級),這個沒用字典哦。這種算法并不算多好,但至少現在在solr的一般站內搜索應用中并不比國產的差。
1. "海南航空公司"的case,廣泛應用的多粒度切詞已經可以解決你說的問題,即會切出長串,也會切出基本詞。和你說的效果上沒有差別。
2. 你說的間距,就是在信息檢索時用到的offset。任何切詞方法在rank時都會用到這個技術。
我給你舉個例子,搜索“新浪”,你出“浪新”,是不是offset也是0........
3. 你說的“不差”,代表的也是石器時代的“不差”,這種東西沒法深化,沒法改進,跟時代脫節。term召回率固然重要,前提是召回的term都是從相關性上準確的,為了召回率提升0.01%換來召回結果準確率下降10%,這個是傻,不是先進。更何況上面說到的多粒度切詞這類簡單的做法,完全可以達到同樣的召回率提升。
4. 換句話說,如果你舉出任意一個中文搜索引擎用的是你說的方法,并且取得了對應較好的效果來,也算是個旁證。
5. 不客氣的說,對于term召回率的問題,用最小粒度切分的方法來解決,是懶。如果在我的team里面,有任何一個人提出這樣的解決方案,肯定被我劈頭蓋臉打回去。
空 公司 班機”, 幾乎和單字一樣多。
你說的多粒度切詞有的用,有的不用,中科院的和mmseg4j好像就不用,用粒度越多,垃圾越多。
我們是準備在站內那里用solr, 測試結果國產的分詞不一定好,不過我們要求覆蓋要全,找不到就屬于大問題了。
專做搜索引擎公司的內部機制肯定比我們討論的這些開源的復雜,但我還是覺得分詞還是最細分,但結果交給rank、filter等算法去就好,這也是原本Lucene設計的機制,全世界大多數語言在google上肯定也是這種機制,關于東亞語言的分詞方面好像就是國內叫得比較歡,甚至韓國、日本在solr中好像沒有專門自己搞的的分詞插件,相比依賴國內某個老師、某個個人的東西,我更傾向于某些西方的技術,如果想搞個好的,不如在lucene上搞一個基于動態自動維護字典的的filter.
@熊偉 “相比依賴國內某個老師、某個個人的東西,我更傾向于某些西方的技術”
分詞這個東西 沒有什么中方西方之分
現在中文很熱 搞中文分詞和中文機器翻譯的西方學者非常多
如果你感興趣的話
可以看看斯坦福最近開設的免費課程,http://nlp-class.org 第二章就是講語言的切分(雖然大多數是英文的,比如stemming)
沒想到這個回答竟然有了15條評論這么多
@楊宣 話糙理不糙
很多點上說的很有道理,雖然這樣的語氣可能讓其他人不太好接受 還是要感謝一下@楊宣
@雄偉
我基本理解你的意思了,在你的環境和可以使用到的備選技術上,一元按字切分可能是滿足你的需求的。
但這個不代表是可以推廣的,在不同的語料基礎上,你這個方案的劣勢是明顯的,不算是“較好的中文分詞方案”。
關于搜索這個應用場景下,分詞已經不是什么前沿技術,但分詞的效果遠不只開源搜索框架下那幾個默認的函數,畢竟這些開源搜索框架并不是專門為中文場景使用的,都是很簡單的基礎示范。同時,基于詞庫的切詞算法對于詞庫的也有要求。楊宣說過的我就不重復了。
@楊少雄
最好實際測一下再說,搜出結果里面含風馬牛不相及的內容很正常,只要不排在合理內容的前面,搜偏一點的內容很容易就能得到(各大搜索引擎都是這樣)。而且搜偏的反而用一元最好。就搜“上海今天天氣如何”,如果不結合語義搜的話,按照一元基于slop和優先序的算法可能效果比分詞的還好。
就算按國產組件分詞,也不代表不一元切了,就算用國產組件分詞去創建索引,里面的javascript:;單字量照樣和所用到的漢字容量差不多。“有限公司”rank可能是很高,但不代表“有”、”限”、”公”、”司”四個字的rank不高(詞也是由字組成的),一元的效果并不差。
上面說的全是最近我實際中測得效果,也歡迎大家拿實例說話。
雖然我說一元的不差,但不代表分詞不好,只是國內做的不好(同義詞,語義分析,權重等都需要再詞的基礎上進行),還有我認為他們方向不對。
最近寫了一款分詞器,調研了不少文章的開源實現。最終定的方案是 Language Model + CRF
的混合實現。CRF的字標注法是中文分詞比賽上成績最好的方案,尤其勝在新詞識別上,而Language
Model在詞典全,詞頻統計正確的情況下分詞效果也很好,同CRF相比,勝在分詞效果穩定,易于調整,一旦發現分詞錯誤,可以通過添加新詞修正分詞效果。因此我的分詞器是先通過
CRF 識別新詞,然后再用Language Model分詞。當然,具體實現上,還涉及到怎樣融合新詞,分句,識別英文詞,數字表達式,時間日期等。
為什么不是nba04! 04才是經典!
我想用nltk做文獻分類,沒找到源代碼,答主有嗎
同,結巴分的不好,后來試了下ltp,不過不支持自定義好像,看到評論里有推薦thulac,打算試試
1、fxsjy/jieba結巴的標語是:做最好的 Python 中文分詞組件,或許從現在來看它沒做到最好,但是已經做到了使用的人最多。結巴分詞網上的學習資料和使用案例比較多,上手相對比較輕松,速度也比較快。結巴的優點: 支持三種分詞模式? 支持繁體分詞? 支持自定義詞典? MIT 授權協議
2、THULAC:一個高效的中文詞法分析工具包前兩天我在做有關于共享單車的用戶反饋分類,使用jieba分詞一直太過零散,分類分不好。后來江兄給我推薦了THULAC:
由清華大學自然語言處理與社會人文計算實驗室研制推出的一套中文詞法分析工具包
。THULAC的接口文檔很詳細,簡單易上手。THULAC分詞的優點:能力強。利用規模最大的人工分詞和詞性標注中文語料庫(約含5800萬字)訓練而成,模型標注能力強大。準確率高。該工具包在標準數據集Chinese
Treebank(CTB5)上分詞的F1值可達97.3%,詞性標注的F1值可達到92.9%速度較快。同時進行分詞和詞性標注速度為300KB/s,每秒可處理約15萬字。只進行分詞速度達到1.3MB/s,速度比jieba慢。
有很多好用的中文處理包:
Jieba:可以用來做分詞,詞性標注,TextRank
HanLP:分詞,命名實體識別,依存句法分析,還有FudanNLP,NLPIR
個人覺得都比NLTK好用~
《Python自然語言處理》
http://www.nltk.org/book/
UGC文本數據的分析,OpenNLP,搜索排序,語義理解、實體識別、新詞發現、協同過濾,有深度學習背景、問答系統、對話系統,ner,屬性/偏好/行為分析,運營商領域DPI數據深度解析,了解開源算法:anaconda,summa,libsvm,
用Python做自然語言處理必知的八個工具
Python以其清晰簡潔的語法、易用和可擴展性以及豐富龐大的庫深受廣大開發者喜愛。其內置的非常強大的機器學習代碼庫和數學庫,使Python理所當然成為自然語言處理的開發利器。那么使用Python進行自然語言處理,要是不知道這8個工具就真的Out了。
NLTK
NLTK是使用Python處理語言數據的領先平臺。它為像WordNet這樣的詞匯資源提供了簡便易用的界面。它還具有為文本分類(classification)、文本標記(tokenization)、詞干提取(stemming)、詞性標記(tagging)、語義分析(parsing)和語義推理(semantic reasoning)準備的文本處理庫。
Pattern
Pattern具有用于詞性標注(part-of-speech taggers)、n-gram搜索、情感分析和WordNet的一系列工具。它還支持矢量空間建模、聚類分析以及支持向量機。
TextBlob
TextBlob是處理文本數據的一個Python庫。它為深入挖掘常規自然語言處理提供簡單易用的API,例如詞性標注(part-of-speech tagging)、名詞短語提取(noun phrase extraction)、情感分析、文本分類、機器翻譯等等。
Gensim
Gensim是一個用于主題建模、文檔索引以及使用大規模語料數據的相似性檢索。相比于RAM,它能處理更多的輸入數據。作者稱它是“根據純文本進行非監督性建模最健壯、最有效的、最讓人放心的軟件”。
PyNLPl
PyNLPl:Python Natural Language Processing Library(發音為:pineapple)是一個用于自然語言處理的Python庫。它由一系列的相互獨立或相互松散獨立的模塊構成,用于處理常規或不太常規的NLP任務。PyNLPl可用于n-gram計算、頻率列表和分布、語言建模。除此之外,還有更加復雜的數據模型,例如優先級隊列;還有搜索引擎,例如波束搜索。
spaCy
spaCy是一個商業化開源軟件,是使用Python和Cython進行工業級自然語言處理的軟件。它是目前最快的、水平最高的自然語言處理工具。
Polyglot
Polyglot是一個支持海量多語言的自然語言處理工具。它支持多達165種語言的文本標記,196種語言的語言檢測,40種語言的命名實體識別,16種語言的詞性標注,136種語言的情感分析,137種語言的字根嵌入,135種語言的形態分析以及69種語言的音譯。
MontyLingua
MontyLingua是一個免費的、常識豐富的、端對端的英語自然語言理解軟件。用戶只需要將原始英文文本輸入MontyLingua,就能輸出文本的語義解釋。該軟件完美適用于信息提取、需求處理以及問答。從給定的英語文本,它能提取主語/動詞/形容詞對象元組、名詞短語和動詞短語,并提取人的名字、地點、事件、日期和時間,以及其他語義信息。
對于文本數據的處理,可以分為去噪、排重、聚類、分類、觀點提取、觀點權重排序等環節。這里面需要大量使用到NLP(自然語言處理)的相關技術,目前這類技術開放的互聯網公司也不少,比如騰訊文智、玻森實驗室、微軟NLP.....
去噪,顧名思義就是去除與監控主體不相關的文本信息,這里需要用到大量的機器學習語料以來做判斷。比如我有款產品叫“心跳”,爬蟲從上述渠道中獲取了大量關于“心跳”的文本信息,但是只需要保留住產品名叫“心跳”的那些文檔就好,而其他“我看到宋鐘基心跳不止”一類的文檔,就屬于噪音。排重,沒什么好說的,就是將相同文檔歸一。這是清洗基礎數據的第二步,排重掉大量相同文檔,數據量會大幅度降低。聚類,將相似文檔進行歸類,目的也是為了減少數據量。分類,更好的定位出篩出的數據是與我產品相關的。在產品這塊可能作用不是太明顯。我就不展開細說了。最后提取出每個類別下的代表觀點,識別出正負面,并對觀點進行排序,這樣就能獲取到總結好的對于產品的真實反饋全貌,哪些優點,哪些缺點。就如漏斗模型一樣,數據進行一層層清洗和篩選,最終給到人工的是很全又少量的信息,大大節省了人力處理成本。上述是比較高端的用戶反饋收集和處理方式,其實簡單易行的,比如產品評測、用戶調研的方式也是當下使用的比較多的,特別是后者。對于產品評測本人也有悉心的研究和豐富的工作經驗,有空可以細說。
幾分鐘即可接入的中文語義分析平臺
各種應用服務每天產生著大量的用戶交互數據,媒體輿情、社交、客服溝通,非結構化的用戶數據越來越多,這是深刻理解用戶需求偏好、品牌產品意見,洞察市場和消費行為趨勢的寶藏。善用這部分非結構化數據,有助于指導經營決策、用戶運營以及產品設計的趨勢方向把握。
語義大數據分析有一定的進入門檻,大多數企業和開發者將有限資源投入在自己的核心領域,希望語義大數據作為一個增值服務亮點功能,又受資源所限制。大多數團隊并沒有為大數據語義分析儲備專業人才資源,也沒有行業詞庫、知識的積累,更沒有資源和精力持續做數據訓練迭代。
術業有專攻,介紹幾個通過API幾分鐘即可接入的語義分析工具,做到一定程度的開箱即用,又滿足一定的二次開發支持需求。具體那款適合,大家可以去實際體驗下,幾個平臺都提供免費體驗方式。
此類工具適用用對象
產品和服務具有大量用戶產生的內容
有很多非結構化數據
海量信息篩選,價值信息挖掘
用戶偏好分析
用戶情緒情感分析
同時,團隊缺乏完全從0到1建設的能力
缺乏專業領域人才
缺乏穩定的團隊組合
缺乏行業和領域的詞庫、知識積累
缺乏經過驗證和迭代的經驗基礎
用第三方工具,可以去快速驗證市場需求,搶在時間的前面,探查客戶反饋,以判斷自己是否以及在哪個方面需要自主投入專業資源進一步做深入。
玻森中文語義開放平臺
一站式解決中文語義分析需求:情感分析、信息分類、實體識別、典型意見、文本聚類、關鍵詞提取。
單文本和多文本分析
自主研發千萬級中文語料庫
可定制數據分析模型和解決方案
具有每日千萬次API調用的商業用戶服務能力
開放中文語義API,快速注冊,30秒可用
官網:首頁 - BosonNLP
商業服務收費模式
騰訊文智中文語義平臺
一站式滿足用戶NLP、轉碼、抽取、全網數據抓取等中文語義分析需求的開放平臺。
提供智能分詞、實體識別、情感分析、轉碼抽取、文本聚類等語義API。
騰訊產品的成功應用經驗和100億級的API調用服務。
支持深入合作定制產品特色的語義分析解決方案。
官網:騰訊文智中文語義平臺-首頁
商業服務收費模式
哈工大訊飛語言云
哈工大和科大訊飛聯合研發的云端中文自然語言處理服務平臺,提供分詞、詞性標注、命名實體識別、依存句法分析、語義角色標注等自然語言處理服務。
應用場景如用戶喜好分析、情緒情感分析、人際網絡分析、關鍵字知識圖譜
用戶喜好分析:借助分詞、詞性標注和依存句法分析可以深挖用戶上傳內容以及評論反饋信息,以“詞云”的形式展示用戶最關注的產品特性和評價。
情緒自動識別:通過對用戶的評論、留言、交流信息中的文本進行語言處理,自動識別用戶的情緒。
API提供了包括PLAIN/XML/JSON/CONLL等多種格式的結果表示,返回結果容易擴展,便于進行二次開發。
為保障系統穩定,語言云API的使用頻率默認限制為每個IP 200次/秒。
支持包括中小企業在內開發者的商業應用需要
提供研究性免費服務,商業服務洽談溝通
關聯閱讀:
接入簡單又實用的10款移動數據分析工具
這里的分享僅針對有API快速接入的語義分析平臺,有些語義分析服務通過工具包、開源軟件實現,這里沒有舉例。
我們也在尋找語義分析的合作伙伴,希望與領域內的專業平臺和專家交流學習,也希望認識些朋友進一步交流,尤其是針對社群社交數據分析的技術支持,如:群繪社群數據平臺。
從開源入手:StanfordNLP和HIT-LTP
《統計自然語言處理基礎》這本書不錯
《數學之美》是第一本要學習的書
推薦本書《Python自然語言處理》
推薦一個博客52NLP和CS224D教程
上一邊Collins的nlp課,看一遍他的講義就夠了
學習NLP是一個艱苦的過程,好多東西需要學,尤其是剛入門時。
哈工大的SCIR實驗室絕對是國內數一數二的頂尖NLP實驗室。
百度:百度副總裁,<b>AI技術平臺體系總負責人王海峰博士</b>畢業于哈工大,目前是SCIR實驗室的兼職教授,王海峰博士是ACL50多年歷史上唯一出任過主席的華人。據不完全統計,該實驗室在百度的畢業生約為20位,其中包李彥宏的開門弟子(博士后),百度高級研究院趙世奇博士等。</p><p>
騰訊:SCIR實驗室是<b>騰訊AL Lab最早的聯合實驗室</b>,
騰訊AI平臺部NLP技術中心副總監周連強</b>就是SCIR實驗室07級的碩士生,劉挺教授還是<b>騰訊AI Lab特聘學術顧問(騰訊 AI Lab - 騰訊人工智能實驗室官網)。據不完全統計,該實驗室在騰訊的畢業生約為25位。
阿里:自然語言處理部總監郎君</b>為SCIR實驗室的06級博士生。據不完全統計,該實驗室在阿里的畢業生約為10位。</p><p>
微軟:微軟和國內的很多高校有聯合實驗室
但NLP方向的聯合實驗室只有清華和哈工大兩家,在微軟亞洲研究院的門戶網站上,<b>共列出研究人員11名,其中有5人是在哈工大獲得博士學位。</b></p><p>(注:微軟哈工大聯合實驗室是哈工大機器智能實驗室,此實驗室并非之前說的SCIR實驗室,該實驗室有著名的李生教授坐鎮,由于鄙人不了解該實驗室,恕不詳細介紹,知友可自行了解。)</p><p>
科大訊飛:科大訊飛是亞太地區最大的語音上市公司,在智能語音技術的多個領域均處于業界領先地位。科大訊飛與哈工大有語言認知計算聯合實驗室(<a
href=\"https://link.zhihu.com/?target=http%3A//ir.hit.edu.cn/1348.html\"
class=\" wrap external\"
target=\"_blank\" rel=\"nofollow
noreferrer\">哈爾濱工業大學社會計算與信息檢索研究中心 - 理解語言,認知社會
&amp;quot; 科大訊飛與哈工大聯合創建語言認知計算聯合實驗室
學術界
清華大學自然語言處理與人文計算實驗室(歡迎來到清華大學自然語言處理與社會人文計算實驗室):清華計算機系前院長孫茂松教授是他們的leader
北京大學計算語言學教育部重點實驗室(北京大學計算語言學教育部重點實驗室):是北大計算機學科比較有實力的一個研究方向之一
中科院計算所自然語言處理研究組(歡迎來到中科院計算所自然語言處理組網站):尤其專長在機器翻譯領域,組長為劉群研究員,大家常使用的中文分詞工具ICTCLAS就是他們參與開發的
哈爾濱工業大學:實力也很強,實驗室查了一下感覺好亂,主要有:智能技術與自然語言處理研究室(ITNLP)、哈工大語言語音教育部-微軟重點實驗室(哈工大語言語音教育部)、(哈爾濱工業大學社會計算與信息檢索研究中心)哈爾濱工業大學社會計算與信息檢索研究中心;現任中文信息學會理事長李生教授就是哈工大的、下面提到的現任ACL主席王海峰先生也是哈工大畢業的;而且值得一提的是,哈工大雖然遠在最東北地區,但是和工業界,像微軟、百度、科大訊飛等都有著緊密的聯系。
工業界
像知名搜索引擎公司在這些方面應該都有不俗的積累
搜狗公司
百度公司:現任副總裁王海峰先生是自然語言處理領域世界上影響力最大、也最具活力的國際學術組織ACL(Association for Computational Linguistics)50多年歷史上唯一的華人主席。
微軟亞洲研究院
科大訊飛:國內專業做中文語音、文字產品研發的企業,是目前國內最大的智能語音技術提供商。
另外,圖模型,深度學習……等等內容,都是一些方向。
自然語言處理、圖像識別、語音識別等等也是一些應用方向,更有大量的領域知識需要結合。