分词即对词语进行划分。
分词的基本方法包括:最大匹配法,最大概率分词法,最短路径分词法(最小切分法)。其中最大匹配法、最短路径法属于机械式分词法,最大概率分词法属于基于统计的分词方法。
分词的难点:分词歧义,未登录词识别(冷启动)
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. 分词的难点
分词的难点是歧义和未登录词(类似于冷启动),未登录词指没有被收录在词库中但必须被切分出来的词,包括各类专有名词,数字,缩写词,新增词汇等。