中文分詞是中文自然語言處理的一個非常重要的組成部分畦浓,在學(xué)界和工業(yè)界都有比較長時間的研究歷史,也有一些比較成熟的解決方案
1:分詞理論
這一部分在一面這個鏈接里有很不錯的總結(jié)检疫,特搬運過來讶请,我主要說說操作的部分。
鏈接:https://www.zhihu.com/question/19578687/answer/190569700
中文分詞是中文文本處理的一個基礎(chǔ)步驟屎媳,也是中文人機自然語言交互的基礎(chǔ)模塊夺溢。不同于英文的是,中文句子中沒有詞的界限烛谊,因此在進行中文自然語言處理時风响,通常需要先進行分詞,分詞效果將直接影響詞性丹禀、句法樹等模塊的效果状勤。當然分詞只是一個工具,場景不同双泪,要求也不同持搜。
在人機自然語言交互中,成熟的中文分詞算法能夠達到更好的自然語言處理效果焙矛,幫助計算機理解復(fù)雜的中文語言葫盼。竹間智能在構(gòu)建中文自然語言對話系統(tǒng)時,結(jié)合語言學(xué)不斷優(yōu)化村斟,訓(xùn)練出了一套具有較好分詞效果的算法模型剪返,為機器更好地理解中文自然語言奠定了基礎(chǔ)。
在此邓梅,對于中文分詞方案脱盲、當前分詞器存在的問題,以及中文分詞需要考慮的因素及相關(guān)資源日缨,竹間智能 自然語言與深度學(xué)習(xí)小組?做了些整理和總結(jié)钱反,希望能為大家提供一些參考。
中文分詞根據(jù)實現(xiàn)原理和特點匣距,主要分為以下2個類別:
1面哥、基于詞典分詞算法
也稱字符串匹配分詞算法。該算法是按照一定的策略將待匹配的字符串和一個已建立好的“充分大的”詞典中的詞進行匹配毅待,若找到某個詞條尚卫,則說明匹配成功,識別了該詞尸红。常見的基于詞典的分詞算法分為以下幾種:正向最大匹配法吱涉、逆向最大匹配法和雙向匹配分詞法等刹泄。
基于詞典的分詞算法是應(yīng)用最廣泛、分詞速度最快的怎爵。很長一段時間內(nèi)研究者都在對基于字符串匹配方法進行優(yōu)化特石,比如最大長度設(shè)定、字符串存儲和查找方式以及對于詞表的組織結(jié)構(gòu)鳖链,比如采用TRIE索引樹姆蘸、哈希索引等。
2芙委、基于統(tǒng)計的機器學(xué)習(xí)算法
這類目前常用的是算法是HMM逞敷、CRF、SVM灌侣、深度學(xué)習(xí)等算法推捐,比如stanford、Hanlp分詞工具是基于CRF算法顶瞳。以CRF為例玖姑,基本思路是對漢字進行標注訓(xùn)練,不僅考慮了詞語出現(xiàn)的頻率慨菱,還考慮上下文焰络,具備較好的學(xué)習(xí)能力,因此其對歧義詞和未登錄詞的識別都具有良好的效果符喝。
Nianwen Xue在其論文《Combining Classifiers for Chinese Word Segmentation》中首次提出對每個字符進行標注闪彼,通過機器學(xué)習(xí)算法訓(xùn)練分類器進行分詞,在論文《Chinese word segmentation as character tagging》中較為詳細地闡述了基于字標注的分詞法协饲。
常見的分詞器都是使用機器學(xué)習(xí)算法和詞典相結(jié)合畏腕,一方面能夠提高分詞準確率,另一方面能夠改善領(lǐng)域適應(yīng)性茉稠。
隨著深度學(xué)習(xí)的興起描馅,也出現(xiàn)了基于神經(jīng)網(wǎng)絡(luò)的分詞器,例如有人員嘗試使用雙向LSTM+CRF實現(xiàn)分詞器而线,其本質(zhì)上是序列標注铭污,所以有通用性,命名實體識別等都可以使用該模型膀篮,據(jù)報道其分詞器字符準確率可高達97.5%嘹狞。算法框架的思路與論文《Neural Architectures for Named Entity Recognition》類似,利用該框架可以實現(xiàn)中文分詞誓竿,如下圖所示:
首先對語料進行字符嵌入磅网,將得到的特征輸入給雙向LSTM,然后加一個CRF就得到標注結(jié)果筷屡。
分詞器當前存在問題:
目前中文分詞難點主要有三個:
1涧偷、分詞標準:比如人名簸喂,在哈工大的標準中姓和名是分開的,但在Hanlp中是合在一起的嫂丙。這需要根據(jù)不同的需求制定不同的分詞標準娘赴。
2规哲、歧義:對同一個待切分字符串存在多個分詞結(jié)果跟啤。
歧義又分為組合型歧義、交集型歧義和真歧義三種類型唉锌。
1) 組合型歧義:分詞是有不同的粒度的隅肥,指某個詞條中的一部分也可以切分為一個獨立的詞條。比如“中華人民共和國”袄简,粗粒度的分詞就是“中華人民共和國”腥放,細粒度的分詞可能是“中華/人民/共和國”
2) 交集型歧義:在“鄭州天和服裝廠”中,“天和”是廠名绿语,是一個專有詞秃症,“和服”也是一個詞,它們共用了“和”字吕粹。
3) 真歧義:本身的語法和語義都沒有問題, 即便采用人工切分也會產(chǎn)生同樣的歧義种柑,只有通過上下文的語義環(huán)境才能給出正確的切分結(jié)果。例如:對于句子“美國會通過對臺售武法案”匹耕,既可以切分成“美國/會/通過對臺售武法案”聚请,又可以切分成“美/國會/通過對臺售武法案”。
一般在搜索引擎中稳其,構(gòu)建索引時和查詢時會使用不同的分詞算法驶赏。常用的方案是,在索引的時候使用細粒度的分詞以保證召回既鞠,在查詢的時候使用粗粒度的分詞以保證精度煤傍。
3、新詞:也稱未被詞典收錄的詞嘱蛋,該問題的解決依賴于人們對分詞技術(shù)和漢語語言結(jié)構(gòu)的進一步認識蚯姆。
2:實踐操作
1;數(shù)據(jù)的準備
數(shù)據(jù)的準備因為我在實習(xí),所以數(shù)據(jù)就不需要自己花費很多時間準備了浑槽,在我沒有實習(xí)之前蒋失,我的數(shù)據(jù)一方面是公開的數(shù)據(jù)集,另外一些是自己寫爬蟲去爬取數(shù)據(jù)桐玻,第二種方法用的多一些篙挽,如果使用公開數(shù)據(jù)的話,搜狗的新聞數(shù)據(jù)還不錯镊靴。
另外一點我們要注意铣卡,我們在進行中文寫入和存儲的時候链韭,默認的編碼要用utf-8,之前在分詞處理的時候一直報錯煮落,原因是我用來ASCLL的編碼導(dǎo)致的敞峭。
2:數(shù)據(jù)分詞
常用的分詞軟件非常多,這里我推薦我使用的感覺比較好的一款蝉仇,jieba分詞旋讹,直接pip安裝即可,具體的用法大家可以到https://github.com/fxsjy/jieba去看看轿衔,已經(jīng)非常詳細
代碼如下:
原來的文檔如下圖所示;
分完詞后效果:
盡管有一些問題沉迹,但是還是基本可以用的,對于一些特定的詞我們可以加入自定義詞庫來進行解決害驹。
在上面我們解析的文本中有很多無效的詞鞭呕,比如“的”,“請”宛官,還有一些標點符號葫松,這些我們不想在文本分析的時候引入,因此需要去掉底洗,這些詞就是停用詞腋么。
網(wǎng)上有很多開源的停用詞表,我現(xiàn)在用的是一個1208詞的枷恕,后續(xù)上傳一下党晋,調(diào)用方式如下:
在文本處理完整后,我們就可以進行向量化操作了徐块,這一部分我們將在下一篇文章詳細講述未玻。