中文分詞技術(Chinese Word Segmentation) 指將一個漢字序列切分紅一個個單獨的詞。分詞就是將連續的字序列按照必定的規則從新組合成詞序列的過程算法
目前中文分詞算法有如下5類:sql
在業務中,可使用多種算法進行比較選擇,其中比較選擇的原則有如下幾點:架構
其基本原理是按照必定的步長對文檔取詞,把結果和詞典進行匹配,匹配成功則分詞成功,不然不予切分。這種方法實現簡單,實用性強,最大的缺點就是識別的成功率極大程度受限於詞庫的完整度學習
取詞的規則和算法有許多,如:測試
其原理是以詞庫的最大長度爲初始長度,窗口爲1,從左到右對字符串進行掃描匹配,匹配不成功則減少窗口
其步驟是:人工智能
以「研究生命的起源」爲例,假定詞典中的詞包含有:{研究、研究生、生命、命、的、起源},切分步驟以下:spa
研究生 #第一個詞匹配成功 命的起 命的 命 #第二個詞匹配成功 的起源 的起 的 #第三個詞匹配成功 起源 #第四個詞匹配成功
MM在每次匹配過程當中都要進行一次二分搜索,算法複雜度過高
NM則是在取到詞典中匹配的第一個詞後,往詞後拼接下一個字,拼接後的新詞在從詞典中尋找,若是詞典中有這個詞,則該詞必定會在鄰近位置
其步驟是:設計
繼續以「研究生命的起源」進行分詞做爲例子,切分步驟以下:rest
研 研究 #第一個詞第一次匹配成功並標記 研究生 #第一個詞第二次匹配成功並標記 研究生命 #超過詞典中最大長度3,則取詞:研究生 命 #第二個詞第一次匹配成功,並標記 命的 #第二個詞第二次匹配失敗,則取詞:命 的 #第三個詞第一次匹配成功,並標記 的起 #第三個詞第二次匹配失敗,則取詞:的 起源 #第四個詞匹配成功
其原理與MM基本相同,只是掃描方向相反,是從右向左掃描,其步驟差很少,再也不贅述。
繼續以「研究生命的起源」進行分詞做爲例子,切分步驟以下:code
的起源 起源 #第一個詞匹配成功 生命的 命的 的 #第二個詞匹配成功 究生命 生命 #第三個詞匹配成功 研究 #第四個詞匹配成功
該方法其實是一個比較算法,使用MM和RMM切分後再對結果進行比較,按照上文說的比較原則選擇其中一個最爲結果。
例子「研究生命的起源」中
MM的結果爲: 研究生 命 的 起源
RMM的結果爲: 研究 生命 的 起源
詞數均爲4,單字較少的爲RMM,則
該方法實際上也是一個比較算法,先找出字符串中全部可能的詞,每一個詞有一個座標,相鄰兩個詞造成一條邊,根據座標既能夠獲得距離,找出從起點到終點中全部距離加起來最小的路徑,該路徑下所包含的詞就是切分結果
例子「研究生命的起源」中
全部能夠切分的詞爲:{研究、研究生、生命、命、的、起源}
可能的路徑有:「研究 生命 的 起源」、「研究生 命 的 起源」
若按照詞典排序後的索引值爲座標,(只是舉例,能夠根據場景設計座標方法)
排序後的詞典爲:{命、生命、的、研究、研究生、起源}
則座標分別爲:{三、一、二、5}和{四、0、二、5},記錄分別爲:六、9,
選擇距離爲6的匹配結果
實際上座標有不少種算法,能夠是二維座標,並把每一個詞生成一個特徵向量,經過計算向量值達到比較的目的
該方法是沒有詞典的,主要思想是經過計算相鄰的字同時出現的次數來決定是否構成詞,次數越多越越有可能構成詞。
假設識別的文本已經統計好了全部可能的切分詞,那麼串聯這些詞的方式就有多種,從維度上理解,即爲選擇第一個切分詞,則下一個切分詞也是詞的機率。
主要的統計模型有:
假設字符串S分紅m詞,則能夠簡單描述爲:S=W1W2W3...Wm
則出現S的機率爲:P(S) = P(W1)P(W2|W1)P(W3|W1W2)...P(Wm|W1W2...Wm-1) = \(\prod_{i=1}^{m}\)P(Wi|W1W2...Wi-1)
結合馬爾科夫假設(Markov assumption),Wi 的出現只與以前的 n-1 個詞有關:P(Wi|W1W2...Wi-1) = P(Wi|Wi-n+1Wi-n+2...Wi-1)
則P(S) =\(\prod_{i=1}^{m}\)P(Wi|Wi-n+1Wi-n+2...Wi-1)
根據公式:
在實踐中用的最多的就是bigram和trigram了,並且效果很不錯
高於三元的用的不多,由於訓練它須要更龐大的語料,並且數據稀疏嚴重,時間複雜度高,精度卻提升的很少
其基本思想是針對語義、句法的分析對文本進行分詞
具體方法有:
在2002年以前,自動分詞方法基本上是基於詞(或詞典)的,在此基礎上可進一步分紅基於規則和基於統計的兩大類。第一篇基於字標註(Character-based Tagging)的分詞論文發表在2002年第一屆SIGHAN研討會上,當時並未引發學界的重視。一年後,Xue在最大熵(Maximum Entropy,ME)模型上實現的基於字的分詞系統參加了Bakeoff-2003的評測,在As語料庫的封閉測試項目上得到第二名),然而其OOV 召回率Roov(0.729)卻位居榜首。Xue還在CityU語料庫的封閉測試中得到第三名,其Roov(0.670)仍然是該項比賽中最高的。儘管在Bakeoff2003中各類分詞技術的優劣尚難分仲伯,但既然未登陸詞對分詞精度的影響比分詞歧義至少大5倍以上,咱們天然看好這種能獲致最高OOV召回的分詞方法。這一預測果真在Bakeoff2005上獲得了證明。 基於字標註的分詞系統在Bakeoff-2005上嶄露頭角。其中Low的系統採用最大熵模型,在四項開放測試中奪得三項冠軍(AS,CityU,PKU)和一項亞軍(MSRA)。Tseng的系統採用條件隨機場模型,在四項封閉測試中取得兩項冠軍(CityU, MSRA)、一項亞軍(PKU)和一項季軍(AS)。到了Bakeoff-2006,基於字的分詞系統已遍地開花。其中,筆者用條件隨機場模型實現的基於字標註的分詞系統,在參加的六項分詞評測中,奪得四個第一(CityU開放,As開放,As封閉,CTB封閉)和兩個第三(CTB開放,CityU封閉)。 以往的分詞方法,不管是基於規則的仍是基於統計的,通常都依賴於一個事先編制的詞表(詞典)。自動分詞過程就是經過詞表和相關信息來作出詞語切分的決策。與此相反,基於字標註的分詞方法其實是構詞方法。即把分詞過程視爲字在字串中的標註問題。因爲每一個字在構造一個特定的詞語時都佔據着一個肯定的構詞位置(即詞位),假如規定每一個字最多隻有四個構詞位置:即B(詞首),M (詞中),E(詞尾)和S(單獨成詞),那麼下面句子(甲)的分詞結果就能夠直接表示成如(乙)所示的逐字標註形式: (甲)分詞結果:/上海/計劃/N/本/世紀/末/實現/人均/國內/生產/總值/五千美圓/。 (乙)字標註形式:上/B海/E計/B劃/E N/S 本/s世/B 紀/E 末/S 實/B 現/E 人/B 均/E 國/B 內/E生/B產/E總/B值/E 五/B千/M 美/M 元/E 。/S 首先須要說明,這裏說到的「字」不僅限於漢字。考慮到中文真實文本中不可避免地會包含必定數量的非漢字字符,本文所說的「字」,也包括外文字母、阿拉伯數字和標點符號等字符。全部這些字符都是構詞的基本單元。固然,漢字依然是這個單元集合中數量最多的一類字符。 把分詞過程視爲字的標註問題的一個重要優點在於,它可以平衡地看待詞表詞和未登陸詞的識別問題。在這種分詞技術中,文本中的詞表詞和未登陸詞都是用統一的字標註過程來實現的。在學習架構上,既能夠沒必要專門強調詞表詞信息,也不用專門設計特定的未登陸詞(如人名、地名、機構名)識別模塊。這使得分詞系統的設計大大簡化。在字標註過程當中,全部的字根據預約義的特徵進行詞位特性的學習,得到一個機率模型。而後,在待分字串上,根據字與字之間的結合緊密程度,獲得一個詞位的標註結果。最後,根據詞位定義直接得到最終的分詞結果。總而言之,在這樣一個分詞過程當中,分詞成爲字重組的簡單過程。然而這一簡單處理帶來的分詞結果倒是使人滿意的。