導讀html
本文首先簡單介紹了天然語言處理和科研過程當中重要的四部曲——調研、思考、編程和寫做,而後對中文分詞問題進行了說明,介紹了中文分詞存在的難點如消歧、顆粒度問題、分詞標準等。接着,本文總結了調研文獻中的分詞方法,包括基於詞典的最大匹配法以及其相應的改進方法、基於字標註的分詞方法等,同時也介紹了當前中文分詞的研究進展和方向,如統計與詞典相結合、基於深度學習的分詞方法等。然後,本文具體介紹瞭如何基於詞典的雙向最大匹配法以及基於字標註的平均感知機進行分詞的實驗,對實驗結果進行了分析並給出了幾種改進模型的思路。最後,本文給出了相應的參考文獻以及其餘資料。git
本文做者:llhthinkergithub
原文地址:http://www.cnblogs.com/llhthinker/p/6323604.html正則表達式
Github代碼地址: https://github.com/llhthinker/MachineLearningLab/tree/master/Chinese-Word-Segmentation算法
轉載請保留編程
1. 導論網絡
天然語言處理(NLP, Natural Language Processing)是用機器處理人類語言(有別於人工語言,如程序設計語言)的理論和技術。天然語言處理是人工智能的一個重要分支,屬於計算機應用技術(有別於計算機技術)。計算機應用技術做爲二級學科所屬於一級學科計算機科學技術。天然語言處理又能夠稱做天然語言理解或計算語言學。多線程
天然語言處理是一個貼近應用的研究方向。NLP大體可分爲基礎研究和應用技術研究。基礎研究包括詞法分析、句法分析、語義分析和篇章理解等;應用技術研究包括文本挖掘、自動問答、信息檢索、信息抽取、機器翻譯等。框架
研究活動的大體流程能夠遵循以下四個階段[1]:dom
第一階段閱讀大約佔整個過程的30%。收集並閱讀資料是研究過程的第一步。如今的資料浩如煙海,如何收集到有價值的資料極爲重要。研究的資料主要是論文,咱們應該閱讀重要的論文,而重要的論文每每具備如下一種或多種特徵:
如何閱讀一篇論文?閱讀論文時應注意如下幾點:
第二階段思考大約佔整個過程的20%。"學而不思則罔",在閱讀過程當中以及閱讀後應該積極思考。
第三階段編程大約佔整個過程的20%。第一步是收集數據,數據能夠是標準的評測數據,也能夠是本身採集的真實數據。第二步是編寫程序,實現算法。第三步是分析結果。
第四階段寫做大約佔整個過程的30%。寫做是科學研究的一個重要過程。論文是研究成果的體現,將本身的研究成果很好的展現給學術界,才能體現出研究的價值。
上述四個階段不是瀑布式而是螺旋式,是對研究的方向不斷深刻的過程。
中文信息處理是指天然語言處理的分支,是指用計算機對中文進行處理。和大部分西方語言不一樣,書面漢語的詞語之間沒有明顯的空格標記,句子是以字串的形式出現。所以對中文進行處理的第一步就是進行自動分詞,即將字串轉變成詞串。
自動分詞的重要前提是以什麼標準做爲詞的分界。詞是最小的可以獨立運用的語言單位。詞的定義很是抽象且不可計算。給定某文本,按照不一樣的標準的分詞結果每每不一樣。詞的標準成爲分詞問題一個很大的難點,沒有一種標準是被公認的。可是,換個思路思考,若在同一標準下,分詞便具備了可比較性。所以,只要保證了每一個語料庫內部的分詞標準是一致的,基於該語料庫的分詞技術即可一較高下[3]。
分詞的難點在於消除歧義,分詞歧義主要包括以下幾個方面:
研究/ 生命/ 的/ 起源
研究生/ 命/ 的/ 起源
他 / 從 / 馬 / 上 / 下來
他 / 從 / 立刻 / 下來
蔡英文 / 和 / 特朗普 / 通話
蔡英文 / 和 / 特朗 / 普通話
除了上述歧義,有些歧義沒法在句子內部解決,須要結合篇章上下文。例如,"乒乓球拍賣完了",能夠切分爲"乒乓/球拍/賣/完/了",也能夠切分紅"乒乓球/拍賣/完/了"。這類分詞歧義使得分詞問題更加複雜。
詞的顆粒度選擇問題是分詞的一個難題。研究者們每每把"結合緊密、使用穩定"視爲分詞單位的界定準則,然而人們對於這種準則理解的主觀性差異較大,受到我的的知識結構和所處環境的很大影響[3]。選擇什麼樣的詞的顆粒度與要實現具體系統緊密相關。例如在機器翻譯中,一般顆粒度大翻譯效果好。好比"聯想公司"做爲一個總體時,很容易找到它對應的英文翻譯Lenovo,若是分詞時將其分開,可能翻譯失敗。然而,在網頁搜索中,小的顆粒度比大的顆粒度好。好比"清華大學"若是做爲一個詞,當用戶搜索"清華"時,極可能就找不到清華大學。[10]
2. 中文分詞文獻調研
梁南元在1983年發表的論文《書面漢語的自動分詞與另外一個自動分詞系統CDWS》提到,蘇聯學者1960年左右研究漢俄機器翻譯時提出的 6-5-4-3-2-1 分詞方法。其基本思想是先創建一個最長詞條字數爲6的詞典, 而後取句子前6個字查詞典,如查不到, 則去掉最後一個字繼續查, 一直到找着一個詞爲止。梁南元稱該方法爲最大匹配法——MM方法(The Maximum Matching Method)。由MM方法天然引伸,有逆向的最大匹配法。它的分詞思想同MM方法,不過是從句子(或文章)末尾開始處理的,每次匹配不成詞時去掉最前面的字。雙向最大匹配法即爲MM分詞方法與逆向MM分詞方法的結合。梁南元等人首次將MM方法應用於中文分詞任務,實現了我國第一個自動漢語自動分詞系統CDWS。[2]
複雜最大匹配算法, 由Chen 和Liu在《Word identification for Mandarin Chinese sentences》提出[4]。該文提出了三詞語塊(three word chunks)的概念。三詞語塊生成規則是: 在對句子中的某個詞進行切分時,若是有歧義拿不定主意,就再向後展望兩個漢語詞,而且找出全部可能的三詞語塊。在全部可能的三詞語塊中根據以下四條規則選出最終分詞結果。
規則1: 最大匹配 (Maximum matching)
其核心的假設是:最可能的分詞方案是使得三詞語塊(three-word chunk)最長。
規則2: 最大平均詞長(Largest average word length)
在句子的末尾,極可能獲得的"三詞語塊"只有一個或兩個詞(其餘位置補空),這時規則1就沒法解決其歧義消解問題,所以引入規則2:最大平均詞長,也就是從這些語塊中找出平均詞長最大的語塊,並選取其第一詞語做爲正確的詞語切分形式。這個規則的前提假設是:在句子中遇到多字詞語的狀況比單字詞語更有可能。
規則3:最小詞長方差(Smallest variance of word lengths)
還有一些歧義是規則1和規則2沒法解決的。所以引入規則3:最小詞長方差,也就是找出詞長方差最小的語塊,並選取其第一個詞語做爲正確的詞語切分形式。在機率論和統計學中,一個隨機變量的方差描述的是它的離散程度。所以該規則的前提假設是:句子中的詞語長度常常是均勻分佈的。
規則4:最大單字詞語語素自由度之和(Largest sum of degree of morphemic freedom of one-character words)
有可能兩個"三詞語塊"擁有一樣的長度、平均詞長及方差,所以上述三個規則都沒法解決其歧義消解問題。規則4主要關注其中的單字詞語。直觀來看,有些漢字不多做爲詞語出現,而另外一些漢字則經常做爲詞語出現,從統計角度來看,在語料庫中出現頻率高的漢字就極可能是一個單字詞語,反之可能性就小。計算單詞詞語語素自由度之和的公式是對"三詞語塊"中的單字詞語頻率取對數並求和。規則4則選取其中和最大的三詞語塊做爲最佳的詞語切分形式。
最大匹配算法以及其改進方案是基於詞典和規則的。其優勢是實現簡單,算法運行速度快,缺點是嚴重依賴詞典,沒法很好的處理分詞歧義和未登陸詞。所以,如何設計專門的未登陸詞識別模塊是該方法須要考慮的問題。
2002年,Xue等人在《Combining Classifiers for Chinese Word Segmentation》一文中首次提出對每一個字進行標註,經過監督機器學習算法訓練出分類器從而進行分詞[5]。一年後,Xue在最大熵(ME, Maximum Entropy)模型上實現的基於字標註的分詞系統參加了Bakeoff-2003的評測得到很好的成績引發關注。然後,Xue在《Chinese word segmentation as character tagging》一文中較爲詳細的闡述了基於字標註的分詞法[6]。
基於字標註的分詞法基本思想是根據字所在詞的位置,對每一個字打上LL、RR、MM和LR四種標籤中的一個。四種標籤的具體含義以下:
相似於詞性標註中的POS(part-of-speech) tags,咱們稱上述字標籤爲POC(position-of-character) tags。這樣,咱們將分詞問題轉變成對漢字進行序列標註的問題。例如:
POC tags反映了的一個事實是,分詞歧義問題是因爲一個漢字能夠處於一個詞的不一樣位置,而漢字的位置取決於字的上下文。
字標註本質上是訓練出一個字的分類器。模型框架如圖1所示。
圖1 字標註訓練模型框架
設計字特徵的關鍵是包含足夠的上下文關係。黃昌寧等人在《中文分詞十年回顧》中提到,在[3]中全部語料庫99%以上的詞都是5字或5字如下的詞。所以,使用寬度爲5個字的上下文窗口足以覆蓋真實文本中絕大多數的構詞情形。進一步,該文提到了一個肯定有效詞位標註集的定量標準——平均加權詞長。其定義爲:
是i≥k時的平均加權詞長,是語料中詞長爲k的詞次數,K是語料中出現過的最大詞長,N是語料庫的總詞次數。若是k=1,那麼表明整個語料的平均詞長。
經統計,Bakeoff-2003和Bakeoff-2005全部語料庫的平均加權詞長在1.51~1.71之間。所以,5字長的上下文窗口剛好大體表達了先後各一個詞的上下文。
Xue在[6]文給出了以下的特徵模板。
學習算法是指監督機器學習算法,經常使用的有最大熵算法、條件隨機場(CRF, Conditional Random Fields)、支持向量機(SVM, Support Vector Machine)、平均感知機(AP, Averaged Perceptron)等。
基於字標註的分詞方法是基於統計的。其主要的優點在於可以平衡地看待詞表詞和未登陸詞的識別問題。其缺點是學習算法的複雜度每每較高,計算代價較大,好在如今的計算機的計算能力相較於之前有很大提高;同時,該方法依賴訓練語料庫,領域自適應較差。基於字標註的分詞方法是目前的主流分詞方法。
張梅山等人在《統計與字典相結合的領域自適應中文分詞》提出經過在統計中文分詞模型中融入詞典相關特徵的方法,使得統計中文分詞模型和詞典有機結合起來。一方面能夠進一步提升中文分詞的準確率,另外一方面大大改善了中文分詞的領域自適應性。[7]
圖2 領域自適應性分詞系統框架圖
近幾年,深度學習方法爲分詞技術帶來了新的思路,直接以最基本的向量化原子特徵做爲輸入,通過多層非線性變換,輸出層就能夠很好的預測當前字的標記或下一個動做。在深度學習的框架下,仍然能夠採用基於子序列標註的方式,或基於轉移的方式,以及半馬爾科夫條件隨機場。[11]深度學習主要有兩點優點:
《Neural Architectures for Named Entity Recognition》一文中提出了一種深度學習框架,如圖3,利用該框架能夠進行中文分詞。具體地,首先對語料的字進行嵌入,獲得字嵌入後,將字嵌入特徵輸入給雙向LSTM,輸出層輸出深度學習所學習到的特徵,並輸入給CRF層,獲得最終模型。[9]
圖3 一個深度學習框架
3. 中文分詞方法實踐
咱們首先利用正則表達式提取URL、英文一類特殊詞,對文本數據進行預處理。然後分別實現雙向最大匹配法和基於字標註的平均感知機分詞兩個分詞模塊並一塊兒集成到分詞系統。在使用平均感知機進行分詞訓練時嘗試增長訓練數據集,如使用Bakeoff-2005的PKU訓練數據集和雙向最大匹配法的分詞結果進行增量訓練。
雙向最大匹配法即對句子分別用正向最大匹配和逆向最大匹配進行分詞,而後根據必定的規則選擇某一分詞結果。咱們在實現是所制定的規則爲:
咱們選擇5個字爲上下文窗口大小,即:
該上下文窗口包含以下7個特徵:
因爲感知機的基本形式是二分類的,而字標註爲四分類(多分類)。爲了基於感知機實現多分類,將每一個字的某一特徵權重設計爲長度爲4的向量,向量的每一個份量對於某一分類的權值,如圖4所示。
圖4 字的特徵設計
對於預測算法而言,若是是簡單的序列標註問題,那麼取得分最高的標籤便可,可是在中文分詞問題中,當前字的標籤與前一個字的標籤密切相關,例如若前一個字標籤爲S(單字成詞),則當前字的標籤只可能爲S或B(詞首),爲了利用上述信息,咱們引入狀態轉移和Viterbi算法。預測算法的僞代碼如圖5所示。
圖5 預測算法僞代碼
在使用隨機梯度降低法的訓練過程當中,咱們採起平均化參數方法防止某一訓練數據對結果影響較大。訓練算法的僞代碼如圖6所示。
圖6 訓練算法僞代碼
在增量訓練中,首先使用初始訓練語料訓練一個初始模型,而後結合初始模型以及增量語料進行增量訓練獲得一個增量模型。增量訓練能夠提升分詞系統的領域適應性,進一步提升切分中文分詞準確率, 同時避免了對初始語料的需求以及使用所有語料訓練模型所須要的時間。[8]模型增量訓練流程圖如圖7所示:
圖7 模型增量訓練流程圖
表1給出了不一樣模型下測試數據1(130KB)的評測結果。該測試數據爲新聞文本。從表1中能夠看出,雙向最大匹配的分詞結果還算不錯,而且算法效率高。平均感知機模型在使用Bakeoff2005的PKU訓練集進行增量訓練後效果提高顯著,同時須要花費額外的訓練時間。最後咱們但願結合統計與詞典的優勢,嘗試使用最大雙向匹配分詞結果集進行增量訓練,分詞結果有少許提高但並不明顯。
表2給出了不一樣模型下測試數據2(31KB)的評測結果。該測試數據爲微博文本。從表2中能夠看出,測試數據2的分詞結果比測試數據1的分詞結果差。而且,值得注意的是,基於平均感知機使用原始訓練集訓練出的模型分詞效果不太理想,而在增量訓練後效果提高很是顯著。這是微博文本相較於新聞文本更加不規範,新詞(如網絡詞)更多等緣由形成的。能夠推測,若使用分詞標準一致的微博訓練集進行增量訓練,將進一步提升測試數據2的分詞結果。
表1 不一樣模型下測試數據1的評測結果
模型 |
訓練時間 |
測試時間 |
Precision |
Recall |
F-Measure |
雙向最大匹配 |
—— |
0.03s |
0.943 |
0.945 |
0.944 |
平均感知機 |
58.7s |
0.02s |
0.932 |
0.896 |
0.914 |
平均感知機+增量訓練(Bakeoff2005 PKU訓練集,6434KB) |
58.7s +568.1s |
0.02s |
0.944 |
0.941 |
0.943 |
平均感知機+增量訓練(Bakeoff2005 PKU訓練集6434KB+最大雙向匹配分詞結果集) |
58.7s +568.1s +37.4s |
0.02s |
0.952 |
0.941 |
0.947 |
表2 不一樣模型下測試數據2的評測結果
模型 |
訓練時間 |
測試時間 |
Precision |
Recall |
F-Measure |
雙向最大匹配 |
—— |
0.01s |
0.887 |
0.901 |
0.894 |
平均感知機 |
58.7s |
0.01s |
0.797 |
0.726 |
0.759 |
平均感知機+增量訓練(Bakeoff2005 PKU訓練集,6434KB) |
58.7s +568.1s |
0.01s |
0.886 |
0.900 |
0.893 |
平均感知機+增量訓練(Bakeoff2005 PKU訓練集6434KB+最大雙向匹配分詞結果集) |
58.7s +568.1s +20.9s |
0.01s |
0.892 |
0.900 |
0.896 |
基於字標註的平均感知機分詞模型的分詞結果已經達到不錯的精度,可是在模型性能和模型分詞精度上仍有提高的空間。
爲了提升模型性能,有以下幾種思路[8]:
爲了提升模型的分詞精度,有以下幾種思路:
[1] 劉挺, 怎樣作研究, 新浪博客http://blog.sina.com.cn/s/articlelist_1287570921_1_1.html,2007
[2] 梁南元, 書面漢語的自動分詞與另外一個自動分詞系統CDWS, 中國漢字信息處理系統學術會議, 桂林, 1983
[3] 黃昌寧,趙海. 中文分詞十年回顧. 中文信息學報. 2007
[4] Chen, K. J. and Liu S.H. Word identification for Mandarin Chinese sentences. Proceedings of the 14th International Conference on Computational Linguistics. 1992.
[5] Nianwen Xue and Susan P. Converse. Combining Classifiers for Chinese Word Segmentation, First SIGHAN Workshop attached with the 19th COLING, Taipei, 2002
[6] Nianwen Xue. Chinese word segmentation as character tagging. Computational Linguistics and Chinese Language Processing. 2003
[7] 張梅山. 鄧知龍. 統計與字典相結合的領域自適應中文分詞. 中文信息學報. 2012
[8] 鄧知龍,基於感知器算法的高效中文分詞與詞性標註系統設計與實現,哈爾濱工業大學,2013
[9] Guillaume Lample, Miguel Ballesteros, Sandeep Subramanian, Kazuya Kawakami, and Chris Dyer. Neural architectures for named entity recognition. arXiv preprint arXiv:1603.01360. 2016
[10] 吳軍. 數學之美(第二版).人民郵電出版社. 2014
[11] 李正華等,中文信息處理髮展報告(2016). 中國中文信息學會. 2016
5. 其餘資料
另附常見分詞系統評測結果以下(圖片來源見水印):