转自一个很不错的博客,结合自己的理解,记录一下。作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明。谢谢!

结巴分词的原理,结合一个面试题:有一个词典,词典里面有每个词对应的权重,有一句话,用这个词典进行分词,要求分完之后的每个词都必须在这个词典中出现过,目标是让这句话的权重最大。

涉及算法:

基于前缀词典实现词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG),采用动态规划查找最大概率路径,找出基于词频的最大切分组合;

对于未登录词,采用了基于汉字成词能力的 HMM模型,采用Viterbi算法进行计算;

基于Viterbi算法的词性标注;

分别基于tfidf和textrank模型抽取关键词;

基于前缀词典及动态规划实现分词

jieba分词主要是基于统计词典,构造一个前缀词典;然后利用前缀词典对输入句子进行切分,得到所有的切分可能,根据切分位置,构造一个有向无环图;通过动态规划算法,计算得到最大概率路径,也就得到了最终的切分形式。

1.前缀词典构建:如统计词典中的词“北京大学”的前缀分别是“北”、“北京”、“北京大”;词“大学”的前缀是“大”。

2.有向无环图构建:然后基于前缀词典,对输入文本进行切分,对于“去”,没有前缀,那么就只有一种划分方式;对于“北”,则有“北”、“北京”、“北京大学”三种划分方式;对于“京”,也只有一种划分方式;对于“大”,则有“大”、“大学”两种划分方式,依次类推,可以得到每个字开始的前缀词的划分方式。

3.最大概率路径计算:

在得到所有可能的切分方式构成的有向无环图后,我们发现从起点到终点存在多条路径,多条路径也就意味着存在多种分词结果。因此,我们需要计算最大概率路径,也即按照这种方式切分后的分词结果的概率最大。在采用动态规划计算最大概率路径时,每到达一个节点,它前面的节点到终点的最大路径概率已经计算出来。

有向无环图DAG的每个节点,都是带权的,对于在前缀词典里面的词语,其权重就是它的词频;我们想要求得route = (w1,w2,w3,...,wn),使得 ∑weight(wi) 最大。

如果需要使用动态规划求解,需要满足两个条件,

重复子问题

最优子结构

我们来分析一下最大概率路径问题,是否满足动态规划的两个条件。

基于汉字成词能力的HMM模型识别未登录词

利用HMM模型进行分词,主要是将分词问题视为一个序列标注(sequence labeling)问题,其中,句子为观测序列,分词结果为状态序列。首先通过语料训练出HMM相关的模型,然后利用Viterbi算法进行求解,最终得到最优的状态序列,然后再根据状态序列,输出分词结果。

HMM的两个基本假设:

1.齐次马尔科夫性假设,即假设隐藏的马尔科夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其它时刻的状态及观测无关,也与时刻t无关;

2.观测独立性假设,即假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其它观测和状态无关。

HMM模型的三个基本问题:

Viterbi算法

Viterbi算法实际上是用动态规划求解HMM模型预测问题,即用动态规划求概率路径最大(最优路径)。这时候,一条路径对应着一个状态序列。

结巴分词 java 权重_结巴分词原理介绍相关推荐

  1. 结巴分词 java 权重_结巴分词 (转载)

    转自一个很不错的博客,结合自己的理解,记录一下. 作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! https:// ...

  2. jieba结巴分词--关键词抽取_结巴中文分词原理分析2

    作者:白宁超,工学硕士,现工作于四川省计算机研究院,著有<自然语言处理理论与实战>一书,作者公众号:机器学习和自然语言处理(公众号ID:datathinks) 结巴分词详解1中文分词介绍 ...

  3. 结巴分词python安装_“结巴”分词:做最好的Python分词组件

    python 结巴分词学习 https://www.toutiao.com/a6643201326710784520/ 2019-01-06 10:14:00 结巴分词(自然语言处理之中文分词器) j ...

  4. java分词 词权重_分析牛:查询分词权重,巧妙布局网页关键词

    今天和大家分享一个纯干货,关键词的布局,也许很多人会说,这个还不容易,title出现一次,keywords出现一次,description在出现一次,然后正文的H标签里在出现一次,最后在每段的开头,末 ...

  5. python 分词工具训练_中文分词入门和分词工具汇总攻略

    [注意]如果寻找分词和文本分析软件,为了完成内容分析和其他文本研究任务,直接使用集搜客分词和文本分析软件就可以了.本文是为了讲解集搜客分词和文本分析的实现原理,是给产品设计者和开发者看的. 最近在整理 ...

  6. jieba分词怎么操作_常用分词工具使用教程

    常用分词工具使用教程 以下分词工具均能在Python环境中直接调用(排名不分先后). jieba(结巴分词) 免费使用 HanLP(汉语言处理包) 免费使用 SnowNLP(中文的类库) 免费使用 F ...

  7. java分词 词权重_直通车高分词的养词方法和整个计划权重的提升

    今天和大家一起聊聊高价高分的养分方法,我们要将低分词养成高分的词,这个是容易理解的,但是为什么还要选用高分的词来开车?这样做的原理其实是为了整体计划的权重,而不是单一宝贝的权重. 一.怎么判断计划权重 ...

  8. java 庖丁解牛_“庖丁解牛” 分词器实现

    import java.io.IOException; import java.io.StringReader; import net.paoding.analysis.analyzer.Paodin ...

  9. 全排列的java算法_全排列算法原理和实现

    评论 # re: 全排列算法原理和实现  回复  更多评论 #include #include #define CHESSNUM 9 using namespace std; /*********** ...

最新文章

  1. linux POSIX 信号集,读书笔记:第10章 Posix信号量 (6)
  2. Python你必须知道的十个库
  3. 推荐升级版PDF在线转Word转换器
  4. 【网络知识】4. linux抓包工具tcpdump的使用
  5. 智能电源分配PDU应用
  6. Java11正式发布了,我们该怎么办?
  7. 安装alien,DEB与RPM互换
  8. python对象列表转换为字典_python – 将csv.DictReader对象转换为字典列表...
  9. 【大会】声音叫醒耳朵,语音连接网络
  10. 关于java的集合类,以及HashMap中Set的用法!
  11. 数据结构与算法-- 二叉树中和为某一值的路径
  12. 社交媒体广告看不出来?Instagram加标签让你一目了然
  13. spring原理学习
  14. 二维联合分布的密度函数计算
  15. 【干货】--手把手教你完成文本情感分类
  16. requests、xpath应用案例
  17. php orm中关联查询,【整理】Laravel中Eloquent ORM 关联关系的操作
  18. 从单机文件系统到分布式文件系统
  19. C# MVC 微信支付教程系列之公众号支付代码
  20. 微信小程序:修改单选radio大小样式

热门文章

  1. 2019-2020 ICPC香港 A. Axis of Symmetry (思维+结论)
  2. 笔记本python安装教程_《笔》字意思读音、组词解释及笔画数 - 新华字典 - 911查询...
  3. 坐标系概念 四元数 欧拉角
  4. python3 return用法_Python中return语句用法实例分析
  5. 互信息(一)信息与信息熵
  6. Android 重构学院新闻 App 记录
  7. 【JAVA 开发小问题】 | String操作合集
  8. 【springmvc】Rest ful风格
  9. 基于MYSQL实现郑码查询
  10. C#基础之Assembly