分詞即對詞語進行劃分。
分詞的基本方法包括:最大匹配法,最大概率分詞法,最短路徑分詞法(最小切分法)。其中最大匹配法、最短路徑法屬於機械式分詞法,最大概率分詞法屬於基於統計的分詞方法。
分詞的難點:分詞歧義,未登錄詞識別(冷啓動)
1. 最大匹配法
最大匹配法實際上是一種貪心算法,它同時還利用現實中人們使用的詞語長度都是在一個比較固定的範圍內。利用這個長度的限制來逐步貪心。
1.1 正向最大匹配算法
從左到右截取詞組並判斷是否爲一個詞語。
s: 待分的句子
temp:
max_len: 最大詞語長度
dic: 詞典庫(包含了極多的詞語)
result: 分詞結果
1. 對待分的句子從左到右找一個長度爲max_len的字段, 記爲temp
2. 判斷temp是否存在與dic中
2.1 如果temp是一個單詞, 則s縮短, 回到1
2.2 如果temp不在dic中, 則減少temp一個長度, 回到2
3. 最終的劃分結果使用"/"連接
eg:
s = "計算語言學課程是三個課時"
max_len = 5
temp = "計算語言學"
顯然temp在dic中, s = "課程是三個課時"
result = "計算語言學/"
temp = "課程是三個"
顯然temp不在dic中
temp = "課程是三"
顯然temp不在dic中
...
temp = "課程", s = "是三個課時"
result = "計算語言學/課程/"
...
result = "計算語言學/課程/是/三個/課時"
1.2 逆向匹配算法
即從右到左截取一定長度詞組並判斷是否是詞語。
比如正向匹配算法中eg的第一步就該如下:
eg:
s = "計算語言學課程是三個課時"
max_len = 5
temp = "是三個課時"
顯然temp不在dic中, s = "三個課時"
result = "/課時"
2. 最大概率分詞法
顯然,最大匹配算法是逐步從句子中分離單詞,然而最大概率是一種直接對整個句子直接劃分,其基本原理是對當前句子的每一種劃分計算概率,取概率最大的作爲劃分結果。
核心算法:貝葉斯公式
s = "有意見分歧"
假設有兩種劃分形式:
c1 = "有/意見/分歧"
c2 = "有意/見/分歧"
我們只需計算將s劃分成c1, c2的概率:
P(c1|s) = P(s|c1) * P(c1) / P(s) = P(c1) = P("有") * P("意見") * P("分歧")
P(c2|s) = P("有意") * P("見") * P("分歧")
詞庫中給出的詞語及出現概率:
有 0.018
有意 0.0005
意見 0.001
見 0.0002
分歧 0.0001
計算出概率, 比較大小即可
3. 最少切分法
對當前待切分句子按照切分後詞組最少的方法進行切分。優點是好於單向的匹配算法,缺點是無法解決大部分歧義。
優點: 好於單向的最大匹配方法
最大匹配: 獨立自主/和平/等/互利的原則
最短路徑: 獨立自主/和/平等互利/的/原則
缺點: 無法解決歧義
他/說/的/確實/在理
他/說/的確/實在/理
他/說/的確/實/在理
4. 分詞的難點
分詞的難點是歧義和未登錄詞(類似於冷啓動),未登錄詞指沒有被收錄在詞庫中但必須被切分出來的詞,包括各類專有名詞,數字,縮寫詞,新增詞彙等。