NLP进阶-详解Jieba分词工具
一、Jieba分词工具
1. 三种模式
• 精确模式:将句子最精确的分开,适合文本分析
• 全模式:句子中所有可以成词的词语都扫描出来,速度快,不能解决歧义
• 搜索引擎模式:在精确模式基础上,对长词再次切分,提高召回
2.实现的算法
• 基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况的有向无环图(DAG)
• 采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合
• 对于未登录词,采用了基于汉字成词能力的HMM模型,使用了Viterbi算法
3.实现流程
二、HMM隐马尔科夫模型
1. 马尔科夫模型(Markov Model)
本质:一个序列中每个状态只依赖之前有限个状态
– N阶马尔科夫:依赖之前n个状态
– 1阶马尔科夫:仅仅依赖前一个状态(即上篇文章介绍的二元模型)
p(w1,w2,w3,……wn) = p(w1)p(w2|w1)p(w3|w2)……p(wn|wn-1)
应用场景:
• 概率预测
• 天气预测
三个参数:
– 状态:由数字表示,假设共有M个
– 初始概率: πk=P(S1=k) = k作为序列开始的次数/观测序列总数
– 状态转移概率:ak,l=P(St+1=l|St=k) = l紧跟k出现的次数/k出现的总次数
2. 隐马尔科夫模型(Hiden Markov Model)
本质:对两个序列建模
应用场景:
• 机器翻译:源语言序列 <-> 目标语言序列
• 语音识别:语音信号序列 <-> 文字序列
• 词性标注:文字序列 <-> 词性序列
五个参数:
– 状态:由数字表示,假设共有M个
– 观测:由数字表示,假设共有N个
– 初始概率: πk=P(S1=k) = k作为序列开始的次数/观测序列总数
– 状态转移概率:ak,l=P(St+1=l|St=k) = l紧跟k出现的次数/k出现的总次数
– 发射概率: bk(u)=P(Ot=u|St=k) = k对应u出现的次数/k对应观测序列中所有情况的次数
那么总的概率如下:
待解决问题:
问题1. 给定训练语料库D,求模型中的参数πk、ak,l、bk(u)
问题2. 给定θ,计算一个观测序列的概率Pθ(O)
问题3. 给定θ和观测序列O,找到最优的隐藏状态序列S
问题1解决:
1)若数据完全,即S、O都已知(例如词性、分词都明确),则可以直接统计
2)若数据不完全,即O已知,S未知或部分未知(例如未登录词),则应该采用EM算法(前向后向算法)计算出未登录词的相关信息(如词性和转换概率):
前者判断词性,后者即为状态转移概率ak,l,为了得到这两个信息,引出了前向概率和后向概率的两个概念:
这两个概率也需要使用动态规划来求解:
可以得到:
问题2解决: 利用上题中的参数,可以直接求得
问题3解决: viterbi算法
此处若采用穷举法,时间复杂度太高,
因此可考虑动态规划--维特比算法:
至此,三大问题完美解决,撒花~
以上.
听说,爱点赞的人运气都不会太差哦
如果有任何意见和建议,也欢迎在下方留言~
由于部分图片的显示问题
还是建议大家关注这个公众号查看原文
关注这个公众号,定期会有大数据学习的干货推送给你哦~
点击这里查看往期精彩内容: