1. 程式人生 > >【NLP學習筆記】中文分詞

【NLP學習筆記】中文分詞

分詞通俗的講就是如何將一個句子劃分成詞語,大多數情況下不同的劃分方式會導致不同的語義。

分詞方法分類

自動分詞主要分為三個流派:規則分詞、統計分詞和混合分詞(規則+統計)

1、規則分詞

通過維護一個詞典,在切分語句時,將語句的每個字串與表中的詞進行逐一匹配,找到則切分,否則不與切分。屬於一種機械分詞方法,匹配的方式又分為正向最大匹配法、逆向最大匹配法以及雙向最大匹配法三種。

2、統計分詞

通過建立統計語言模型,對句子進行單詞劃分,然後對劃分結果進行概率計算,獲得概率最大的分詞方式,主要用到的演算法:隱馬爾可夫模型、條件隨機場。

  • 語言模型就是用概率論中的條件概率公式表示一句話出現的概率,
    比如:我們把“我愛你中國”這句話表示成‘w1w2w3w4w5’
    那麼p(w1w2w3w4w5) = p(w1)p(w2|w1)p(w3|w1w2)p(w4|w1w2w3)p(w5|w4w3w2w1)

通過統計句子在語料庫中的頻數,用下面的公式來計算n元條件概率,count的意思是後面這句話在語料庫中出現的頻數,估計n元條件概率時,會出現分子分母為零的情況,此時需要使用平滑演算法進行處理。
p ( w i

w i ( n 1 )
, . . . . w i 1 ) = c o u n t ( w i ( n 1 ) , . . . . w i 1 , w i ) c o u n t ( w i ( n 1 ) , . . . . w i 1 ) p(w_i|w_{i-(n-1)},....w_{i-1})=\frac{count(w_{i-(n-1)},....w_{i-1},w_{i})}{count(w_{i-(n-1)},....w_{i-1})}

混合分詞

首先基於字首詞典進行分詞,可以得到若干條分詞結果,然後再用統計方法計算每條結果出現的概率,然後選擇最大概率作為最終的分詞結果。

開源分詞工具 jieba

import jieba
sentence = '中文分詞是文字處理不可或缺的一步'
#使用jieba.cut()和jieba.cut_for_search()進行分詞,有三種模式,返回值是一個generator,可以用list()將其轉換為列表。
#全模式,輸出所有可能成詞的詞語。
res1 = jieba.cut(sentence, cut_all=True)
#精確模式,輸出最精確的切分,適合做文字分析
res2 = jieba.cut(sentence, cut_all=False)
#搜尋引擎模式,在精確模式的基礎上,對長詞再次切分,適合搜尋引擎分詞。
res3 = jieba.cut_for_search(sentence)
print(list(res1))
print(list(res2))
print(list(res3))

輸出結果

全模式:['中文', '分詞', '是', '文字', '文字處理', '本處', '處理', '不可', '不可或缺', '或缺', '的', '一步']
精確模式:['中文', '分詞', '是', '文字處理', '不可或缺', '的', '一步']
搜尋引擎模式:['中文', '分詞', '是', '文字', '本處', '處理', '文字處理', '不可', '或缺', '不可或缺', '的', '一步']