Jieba分词学习

大名鼎鼎的Jieba分词貌似在工业界被使用的频率较高,所以研究一下它的实现吧。
据作者在github文档上的介绍,Jieba分词的主要用到的算法有:
1.基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG)
2.采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
3.对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法
现在来一条一条的剖析。

一、词图扫描,生成DAG
字典树(Trie树):自带了一个dict.txt的字典,包含几万条词、次数、词性数据;把这几万条的词语放在一个字典树中。
DAG: 对给定的一个句子,对这个句子生成有向无环图DAG, 利用字典树,进行查词典操作,生成所有可能的句子切分,生成DAG, 记录句子中某个词的开始位置以及结束位置, key-value存储,以每个开始位置为key, value为所有可能的词语的结束位置

二、动态规划
动态规划中,先查找待分词句子中已经切分好的词语,计算词频,若字典中没有该词,则以字典中最小的词频数为该词的词频。根据动态规划方法从右往左查找最大概率路径,得到最大概率的切分组合。从右往左是因为汉语的重心往往在句子的后面

三、HMM
没有字典也能够成功分词。
按照(B,M,S,E)四个状态来标记句子中的字。
计算四个状态的转移概率、位置到单个字的发射概率、初始概率。
给定待分词的句子,也就是观察序列,需要找到一个概率最大的最佳的状态序列,利用维特比算法求解。

你可能感兴趣的:(Jieba分词学习)