开源分词系统之结巴分词解析

结巴中文分词解析

“做最好的 Python 中文分词组件”

[TOC]

1 介绍

1.1 Github地址

Github地址:https://github.com/fxsjy/jieba

image.png

截至2020年,11月,已有24.7K个星,下载6K次。其影响力和活跃度可见一斑。

1.2 功能

分词

添加自定义词典

关键词提取

词性标注

返回词语在原文的起止位置

等等。

2 分词原理分析

image.png

图片来源于:https://blog.csdn.net/qq_17336559/article/details/81147074。图画的非常清晰,所以借来引用,如有侵权,请告知,会立刻删除。

image.png

分词处理流程

2.1 构造前缀词典

****统计词典:****

jieba-master/jieba/dict.txt为已经统计词频的统计词典。统计词典的第一列为被统计词(γ射线); 第二列为词频(“γ射线” 出现了3次),即词的统计出现次数;第三列为词性。程序初始化的时候会加载统计词典(代码位置:jieba-master/jieba/init.py Tokenizer::initialize)。

行号 词频 词性
144481 328841 r
216546 3720 c
217848 14878 v
269791 33152 p
270349 自然 20269 d
270400 自然语言 46 l
287794 9691 vg
291367 4563 ng
291459 语言 7647 n
处理

表 统计词典中的片段截取

构造前缀词典:

前缀词典构造如下,它是将在统计词典中出现的每一个词的每一个前缀提取出来,统计词频,如果某个前缀词在统计词典中没有出现,词频统计为1。

比如统计字典中有如下单词(根据字典的实际排序调整):

句子
下标 0 1 2 3 4 5 6 7

构造出的前缀字典如下:

关键词 前缀词 存储
0 [我] [0]
1 [爱] [1]
2 [自,自然,,自然语言] [2,3,5]
3 [然] [3]
4 [语,语言] [4,5]
5 [言] [5]
6 [处,处理] [6,7]
7 [理] [7]

构成的有向无环图DAG******(******Directed A******cyclic G******raph******)

image.png

2.2 寻找最大路径

从上述的DAG,我们需要找到一条从开始到结束的最大路径。系统实现中采用动态规划从句子末端往前,逐步去寻找每一步的最优解。 每一步的处理伪代码如下 :

results = []
for x in 前缀词列表:
# 查找当前词/字在FREQ中的对应值(频数)
req = self.FREQ.get(sentence[idx:x + 1])
  log_freq = log(freq or 1)
  # 计算频率对数(log_freq - logtotal = log(freq/total)) 为当前节点的值
  # + route[x+1][0] 为当前节点到句子末尾的总长度
  cur_route = log_freq - logtotal + route[x+1][0]
  results.append((cur_route, x))
# 选择一个cur_route 最大的元素
route[idx] = max(results)

**

名称 前缀词列表 计算过程(选择一个最大值) 结果(最大值单词的索引)
Route7 [理] freq(理)/totoal + 0 7 (理)
Route6 [处,处理] freq(处)/totoal + route7freq(处理)/totoal + route7
Route5 [言] freq(言)/totoal + route6
Route4 [语,语言] freq(语)/totoal + route5freq(语言)/totoal + route5
Route3 [然] freq(语)/totoal + Route4
Route2 [自,自然,,自然语言] freq(自)/totoal + Route3freq(自然语言)/totoal + Route3
Route1 [爱] freq(爱)/totoal + Route2
Route0 [我] freq(我)/totoal + Route1

动态规划的规则:从一个最基本的问题出发,逐步记录每个阶段的解。

引用作者原文的解释:”算法:*****采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合**”

· 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合

2.3 标记未登陆词

引用作者原文的解释:"算法:对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法"

HMM(Hidden Markov model)隐马马尔可夫模型

隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成不可观测的状态随机序列,再由各个状态生成一个观测而产生观测随机序列的过程。

随机生成的状态序列,称为状态序列(state sequence),设Q是所有状态的集合, n是可能的状态数
Q={ q1,q2,d3,qn }
每个状态生成一个观测,由此产生的观测的随机序列,称为观测序列(observation sequence).,V是所有可能的观测的集合,m是可能的观测数
V={v1, v2, ...,vm}
I是长度为T的实际的状态序列,O是对应的观测序列
I=(i1,i2,...,iT), O=(o1,o2,...,oT)

A是状态转移矩阵:
A=[aij]N*N 其中 aij=p(it+1 = qj|it=qi), i=1,2,...N;j=1,2...N是时刻t处于qi状态,在时刻t+1转移到qj状态的概率
B是观测矩阵:
B=[bj(k)]N*M 其中bj(k)=P(ot=vk|it=qj), k=1,2...,M; j=1,2,...,N,在时刻t处于状态qj的条件下生成观测状态VK的概率

3关键代码分析

viterbi算法

[图片上传中...(image.png-32c78a-1606143129296-0)]

{'B': -0.26268660809250016, 'E': -3.14e+100, 'M': -3.14e+100, 'S': -1.4652633398537678}

trans_p(转移矩阵):

{'B': {'E': -0.5108, 'M': -0.9162},

'E': {'B': -0.5897, 'S': -0.8085},

'M': {'E': -0.3334, 'M': -1.2603},

'S': {'B': -0.7211, 'S': -0.6658}}

'B' 'E' 'M' 'S'
'B' -0.5108 -0.9162
'E' -0.5897 -0.8085
'M' 0.3334 -1.2603
'S' -0.7211 -0.6658

Emit_p发射矩阵:

image.png

参考:

https://github.com/fxsjy/jieba/

https://zhuanlan.zhihu.com/p/189410443

jieba分词流程之DAG,Route
https://blog.csdn.net/qq_17336559/article/details/81147074

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,951评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,606评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,601评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,478评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,565评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,587评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,590评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,337评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,785评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,096评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,273评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,935评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,578评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,199评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,440评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,163评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,133评论 2 352