NLP之最短路径分词(五)

动态规划 + viterbi最短路径 + 1阶马尔可夫链

最短路径分词是将可能性最大的句子切分出来。首先对句子进行全切分,找出所有可能的字词,利用动态规划生成词图,并利用1阶马尔可夫链计算出所有的路径权值,找出图中最短的路径,属于机械式规则+统计的分词方法。

在句子头尾分别加上B 和 E,找出B和E的最短路径即可。图中的数字表示次数,只是为了方便标注,可以理解为上面的最长路径即是要求的最短路径,当然次数是随意标注的,并不是从字典查找得来的。

具体实现见 https://github.com/hankcs/HanLP

PS: 
1阶马尔可夫链 
P(AB) = P(A)•P(B|A)
以下计算方式来自张华平教授的开源ICTCLAS
weight= -Math.log(平滑参数 * A词的总频率 / (所有词的频率) + (1 - 平滑参数) * ((1 - 平滑因子) * A词后面出现B词的频率 / A词的总频率 + 平滑因子));

时间: 2024-07-30 23:30:46

NLP之最短路径分词(五)的相关文章

NLP: 中文分词---正向匹配 (Forward Matching)

在采用FMM (正向最大匹配) 进行中文分词的时候, 可能会存在比较多的交集歧义, 这个时候为了解决交集歧义的问题, 可以采用 FM (Forwar Matching, 正向匹配) 进行中文分词, 正向匹配会在最大匹配的路径上查找所有可能成词的term(这里所有可能成词的term的意思是在构建索引的时候所有切分出来的词, 因为不是路径上的所有节点都会是切分成的词). http://blog.csdn.net/watkinsong/article/details/37696389 这个文章中给出了

NLP之中文分词cppjieba

jieba简介 jieba库是一个简单实用的中文自然语言处理分词库. jieba分词属于概率语言模型分词.概率语言模型分词的任务是:在全切分所得的所有结果中求某个切分方案S,使得P(S)最大. jieba支持三种分词模式: 全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义:精确模式,试图将句子最精确地切开,适合文本分析:搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词. jieba分词原理 基于前缀词典实现高效的词图扫描,生成句子中

NLP之CRF分词训练(六)

分三步1.先分词2.做BEMS标注,同时做词性标注3.训练模型 1.对语料进行分词 拿到测试部的语料或者其他渠道的语料,先对语料进行分词,我刚刚开始是用NS分词的,等CRF模型训练好后,可以直接用CRF进行分词,分完词后要人工核对分词结果,将分词分得不正确的地方修改好 2.标注词性,标注BEMS BEMS所说是中科院的提出一种标注,也有说BEIS的,hanlp用的是BEMSB:开始E:结束M/I:中间 S:单独BEMS标注已经写了一个方法generateCRF在SegAndSave.class中

最短路径(五)—最短路径算法对比分析

Floyd算法: 时间复杂度高,可以解决负权边,并且均摊在每一点对上,在所有算法中还是属于较优的.较小的编码复杂度也是优势,如果要求是所有点之间的最短路径,或者如果数据范围较小,Floyd算法比较适合. Dijkstra算法: 无法解决负权边的图,但有良好的可扩展性,时间复杂度低,堆优化后的Dijkstra的时间复杂度可以达到O(MlogN). Bellman-Ford算法: 可以解决负权边的图,可以判断是否有负权回路.

44、NLP的其他分词功能测试

1. 命名实体识别功能测试 @Test public void testNer(){ if (NER.create("ltp_data/ner.model")<0) { System.err.println("load failed"); return; } List<String> words = new ArrayList<String>(); List<String> tags = new ArrayList<S

11大Java开源中文分词器的使用方法和分词效果对比

本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那要用的人结合自己的应用场景自己来判断. 11大Java开源中文分词器,不同的分词器有不同的用法,定义的接口也不一样,我们先定义一个统一的接口: /** * 获取文本的所有分词结果, 对比不同分词器结果 * @author 杨尚川 */ public interface WordSegmenter {

CRF分词的纯Java实现

与基于隐马尔可夫模型的最短路径分词.N-最短路径分词相比,基于随机条件场(CRF)的分词对未登录词有更好的支持.本文(HanLP)使用纯Java实现CRF模型的读取与维特比后向解码,内部特征函数采用 双数组Trie树(DoubleArrayTrie)储存,得到了一个高性能的中文分词器. CRF简介 CRF是序列标注场景中常用的模型,比HMM能利用更多的特征,比MEMM更能抵抗标记偏置的问题. CRF训练 这类耗时的任务,还是交给了用C++实现的CRF++.关于CRF++输出的CRF模型,请参考<

(转)图算法单源最短路径Dijkstra算法(邻接表/邻接矩阵+优先队列STL)

一.前言 最短路径算法,顾名思义就是求解某点到某点的最短的距离.消耗.费用等等,有各种各样的描述,在地图上看,可以说是图上一个地点到达另外一个地点的最短的距离.比方说,我们把地图上的每一个城市想象成一个点,从一个城市到另一个城市的花费是不一样的.现在我们要从上海去往北京,需要考虑的是找到一条路线,使得从上海到北京的花费最小.有人可能首先会想到,飞机直达啊,这当然是时间消耗最小的方法,但是考虑到费用的高昂,这条线路甚至还不如上海到北京的高铁可取.更有甚者,假设国家开通了从上海到西藏,再从西藏到兰州

nlp词性标注

nlp词性标注 与分词函数不同,jieba库和pyltp库词性标注函数上形式相差极大. jieba的词性标注函数与分词函数相近,jieba.posseg.cut(sentence,HMM=True)函数有两个参数,sentence是一段文本. pyltp的词性标注函数pyltp.Postagger.postag(words)有一个参数,words是分词模块的返回值,或者是Python原生的list类型. nltk中的词性标注函数与pyltp的相似,也是输入list类型.nltk.pos_tag(