NLP--中文分詞總結
前言:分詞的意義非常大,在中文中,單字作為最基本的語義單位,雖然也有自己的意義,但表意能力較差,意義較分散,而詞的表意能力更強,能更加準確的描述一個事物,因此在自然語言處理中,通常情況下詞(包括單字成詞)是最基本的處理單位。
一、中文分詞的難點
1.歧義識別
1.1 交叉歧義
例如:“化妝和服裝”可以分成“化妝 和 服裝”或者“化妝 和服 裝”。這種稱為交叉歧義。
1.2 組合歧義
例如,在句子“這個門把手壞了”中,“把手”是個詞,但在句子“請把手拿開”中,“把手”就不是一個詞。這種成為組合歧義,需要根據整個句子來判斷。
2.未登入詞識別
也就是那些在字典中都沒有收錄過,但又確實能稱為詞的那些詞。比如人名、機構名、地名、產品名、商標名、簡稱、省略語等,都是很難處理的問題,
二、分詞方法
1.基於規則的分詞方法(機械分詞)
按照一定的策略將待分析的漢字串與一個“充分大的”機器詞典中的詞條進行匹配,若在詞典中找到某個字串,則匹配成功一個詞。
1.1 最小匹配法(Minimum Matching)
該演算法從待處理字串左邊開始,先取前兩個字元組成的欄位與詞典中的詞進行匹配,如果詞典中有該詞,則分出此詞,繼續從第三個字 符開始取兩個字元組成的欄位進行匹配,如果沒有匹配到,則取前3個字串組成的欄位進行匹配,依次類推,直到取的字串的長度等於預先設定的閾值,如果還 沒有匹配成功,則從待處理字串的第二個字元開始匹配,如此迴圈。
注:由於漢語單字成詞的特性,一般很少採用最小匹配法。
1.2 正向最大匹配法(Maximum Matching)
假設詞典中最大詞條所含的漢字個數為n個,取待處理字串的前n個字作為匹配欄位,查詢分詞詞典。若詞典中含有該詞,則匹配成功,分出該詞,然後從被比較字串的n+1處開始再取n個字組成的欄位重新在詞典中匹配;如果沒有匹配成功,則將這n個字組成的欄位的最後一位剔除,用剩下的n-1個字組成的欄位在詞典中進行匹配,如此進行下去,直到切分成功為止。
1.3.逆向最大匹配法(Reverse Directional Maximum Matching)
原理和過程與正向最大匹配相似,區別在於RMM從待處理字串
注:由於漢語語句的特點(中心語偏後),逆向匹配的精確度往往高於正向匹配。
注:正向最大匹配法和逆向最大匹配法採用的思想是貪心演算法。
1.4 雙向最大匹配法(Bi-Direction Maximum Matching,BMM)
將正向最大匹配法得到的結果和逆向最大匹配法得到的結果進行比較,如果相同,則切分成功;如果不同,則表示出現了歧義現象或未登入詞問題,可以找出它們之間不同的部分,使用n-gram算出不同部分的概率,選擇較大的一種。
1.5 標誌切分法
優先在待處理字串中識別和切分出一些帶有明顯特徵的詞,以這些詞作為斷點,可將原字串分為較小的串再使用其他方法進行分詞,從而減小匹配的錯誤率等。
1.6 逐詞匹配法
將詞典中的所有詞按由長到短的順序,逐個在待處理字串中搜索,直至切分出所有的詞為止。也就是說,不管文章有多短,詞典有多大,可能都要將詞典遍歷一遍,這種方法效率較低。
(基於TRIE索引樹(又稱單詞索引樹)的逐字匹配演算法,是建立在樹型詞典機制上,匹配的過程是從索引樹的根結點依次同步匹配待查詞中的每個字,可以看成是對樹某一分枝的遍歷。因此,採用該演算法的分詞速度較快,但樹的構造和維護比較複雜。一種改進的演算法是和最大匹配演算法相結合,吸取最大匹配演算法詞典結構簡單、 TRIE索引樹演算法查詢速度快的優點。因此詞典結構和最大匹配詞典構造機制相似,區別在於詞典正文前增加了多級索引。匹配過程類似TRIE索引樹進行逐字匹配,在效能上和TRIE索引樹相近。)
1.7 最小切分法
該演算法依據最小切分原則,從幾種分詞演算法切分結果中取切分詞數最少的那種。
注:漢語總是習慣用最少的字表達最豐富的含義。
1.8 全切分路徑選擇法
將所有的切分組合全部列出來,並從中選擇一條最佳的切分路徑。關於路徑的選擇方法,一般有N-最短路徑法等。
1.8.1 N-最短路徑法
給定待處理字串,根據詞典,找出詞典中所有可能的詞,構造出字串的一個有向無環圖。每個詞對應圖上的一條邊,並賦給其相應的邊長(權重),算出從開始到結束所有路徑中最短的前N條路徑。因為允許相同長度的路徑並列,故最終的結果集合會大於或等於N。
為圖上的邊賦權值可使用n-gram方法。
求最短路徑可使用Dijkstra演算法。
(個人認為是在上述有向無環圖中尋找N條權值和最大的路徑,而不是所有路徑中最短的前N條路徑)如有不對,望求指點。
1.9 聯想--回溯法(Association-Backtracking Method,簡稱AB法)
該方法要求建立三個知識庫——特徵詞詞庫、實詞詞庫和規則庫。首先將待切分的漢字字串序列按特徵詞詞庫分割為若干子串,子串可以是詞,也可以是 由幾個詞組合而成的詞群。然後,再利用實詞詞庫和規則庫將詞群再細分為詞。切詞時,要利用一定的語法知識,建立聯想機制和回溯機制。聯想機制由聯想網路和 聯想推理構成,聯想網路描述每個虛詞的構詞能力,聯想推理利用相應的聯想網路來判定所描述的虛詞究竟是單獨成詞還是作為其他詞中的構詞成分。回溯機制主要 用於處理歧義句子的切分。聯想—回溯法雖然增加了演算法的時間複雜度和空間複雜度,但這種方法的切詞正確率較高,是一種行之有效的方法。
2.基於統計的分詞方法(無詞典分詞)
上下文中,相鄰的字同時出現的次數越多,就越有可能構成一個詞,因此字與字相鄰出現的概率或頻率能較好的反映詞的可信度。
2.1 n-gram模型
模型基於這樣一種假設,第n個詞的出現只與前n-1個詞相關,而與其他任何詞都不相關,整個句子的概率就是各各詞出現的概率。
2.2 序列標註
把分詞過程視為字的標註問題的一個重要優勢在於,它能夠平衡地看待詞典中的詞和未登入詞的識別問題。
2.2.1 隱馬爾科夫模型(HiddenMarkov Model,HMM)
2.2.2 最大熵模型(Maximum Entropy Model,MEM)
2.2.3 最大熵馬爾科夫模型(Maximum Entropy Markov Model,MEMM)
2.2.4 條件隨機場(Conditional Random Fields,CRF)
3.基於理解的分詞方法
該方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法資訊和語義資訊來處理歧義 現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義資訊來對分詞歧義 進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和資訊。由於漢語語言知識的籠統、複雜性,難以將各種語言資訊組織成機器可 直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。
4.神經網路分詞法
三、分詞工具
1.jieba分詞
支援三種分詞模式:
(1)全模式:把句子中所有的可以成詞的詞語都掃描出來, 速度非常快,但是不能解決歧義
(2)精確模式:試圖將句子最精確地切開,適合文字分析
(3)搜尋引擎模式:在精確模式的基礎上,對長詞再次切分,提高召回率,適合用於搜尋引擎分詞
2.SnowNLP
3.THULAC
由清華大學自然語言處理與社會人文計算實驗室研製推出的一套中文詞法分析工具包,具有中文分詞和詞性標註功能。