最近看了下MMSEG分词算法,觉得这个算法简单高效,而且还非常准确 作者声称这个规则达到了99.69%的准确率并且93.21%的歧义能被这个规则消除。
核心思想是抽取3个可能的词(存在多个组合),然后根据4个消歧义规则确定到底选择那个组合
1. 组合长度最大
2. 组合中平均词语长度最大
3. 词语长度的变化率最小
4. 计算组合中所有单字词词频的自然对数,然后将得到的值相加,取总和最大的词组
歧义规则介绍
下面分别举例说明
1.组合长度最大
比如长春市长店
,这个会有如下几种组合
长春市_长春_药店_
长春市_长__
长春_市长__
长春_市_长春_
长_春_市长_
第一种组合长度最长,所以就以第一种方式分词, 实际效果看起来也合理
2.组合中平均词语长度最大
比如国际化
,这个会有如下几种组合
国际化_
国际_化_
国_际_化_
显然规则1无法过滤,长度都是3 经过规则2,之后发现第一个组合平均长度为3/1=3
,第二个是3/2=1.5
,第三个3/3=1
第一个平均长度最大,所以胜出
这个规则和规则1看上去没啥区别,但因为有的时候句子不够被分成3个词的组合,有可能只够分2个词 上面就是个例子,国际化
被分别分成了1个词的组合/2个词的组合/3个词的组合,优选词个数最少的组合
3.词语长度的变化率最小
比如北京大学生
,这个会有如下几种集合
北京大学_生_
北京_大学生_
北京_大学_生_
北京_大_学生_
北_京_大学生_
显然规则1无法过滤,长度都是5
在经过规则2之后剩下
北京大学_生_
北京_大学生_
因为上面2个组合的平均长度为5/2=2.5,其他为5/3=1.66
经过规则3之后剩下
北京_大学生_
这是我们想要的,因为第一条是变化是sqrt(((4-2.5)^2+(1-2.5)^2))/2)=1.5
,
后面是sqrt(((3-2.5)^2+(2-2.5)^2))/2)=0.5
,第二条变化小,所以后面胜出
4.单字词词频自然对数累加计算
比如设施和服务
,这个会有如下几种组合
设施_和服_务_
设施_和_服务_
设_施_和服_
经过规则1过滤得到
设施_和服_务_
设施_和_服务_
规则2和规则3都无法确定谁胜出,只能走最后一个规则 第一条中的务
和第二条中的和
,从直观看,显然是和
的词频在日常场景下要高,这依赖一个词频字典和
的词频决定了最后的分词是设施_和_服务_
为什么要取自然对数之和而不是简单的求和? 比如某个组合有两个单字,词频为3
和7
,另一个为5
和5
3+7=5+5
,但ln3+ln7<ln5+ln5
小结
从4个规则来看,算法处处强调长度和均衡
1.3个词的组合要尽可能长
2.每个词也要尽可能长
3.每个词要尽可能长度接近
4.单个词的词频也要较为接近
这还是比较符合日常的语言习惯的,只是不太明白为什么选3个词作为一个组合,为啥不是4?5?
反例
想到的反例把手抬起来
正确的分词是把_手_抬起_来
,但经过本算法的规则过滤为把手_抬起_来
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
开源地址 ...MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex 加了四个规则过虑。官方说:词语的正确识别率达到了 98.41%。mmseg4j 已经实现了这两种分词算法。
ik+mmseg分词器,适用于solr6.1版本,内附说明 亲测可用!!!
elasticsearch的中文分词器,mmseg分词器支持中文分词,也支持英文分词,维语分词,可以联系发布者,了解如何支持维语分词
Rust 中的中文分词算法 MMSEG
Jcseg基于mmseg算法轻量级中文分词器.rar
基于mmseg算法的轻量级中文分词器
在com.chenlb.mmseg4j.analysis包里扩展lucene analyzer。 MMSegAnalyzer默认使用max-word方式分词(还有:ComplexAnalyzer, SimplexAnalyzer, MaxWordAnalyzer)。
MMSEGO这是MMSEG的GO实现,它是中文分词算法。 待办事项清单文档/注释基准测试用法#输入字典格式键\ tFreq每个键占用一个MMSEGO。这是MMSEG的GO实现,它是中文分词算法。 待办事项列表文档/注释基准测试用法#输入...
mmseg4j用Chih-Hao Tsai 的MMSeg算法实现的中文分词器,并实现lucene的analyzer和solr的TokenizerFactory以方便在Lucene和Solr中使用。 MMSeg 算法有两种分词方法:Simple和Complex,都是基于正向最大匹配。Complex...
mmseg4j-solr-2.3.0.jar 支持 solr5.x 版本以上 分词器本身并未做升级还是mmseg4j-core-1.10.0 和 mmseg4j-analysis-1.9.1.jar为了方便也一并上传
分布式搜索elasticsearch1.1.0版本 中文分词集成,现在不支持bin/plugin -install medcl/elasticsearch-analysis-ik/1.1.0 版本的安装,直接解压安装ik和mmseg插件,看博文
本人从搜狗词库下载后转化为Lucene中文分词所需的词库,里面搜集的都是官方推荐的内容本人亲测可用。使用Solr5.2.1测试
欢迎下载mmseg4j分词器jar包
本文档是技术分享的PPT,详解深入讲解了三种中文分词算法,包知ik、mmseg、hanlp。文档中还分析了ik的岐义消除规则相关代码,以及hanlp最短路径算法原理及代码实现。
兼容solr4.10.3的mmseg4j-1.9.1分词器
mmseg4j分词,比较精确,可以跟lucene里面用
mmseg4j分词器,版本1.9,内涵词库,位于加压后的data.zip中
中文分词器jcseg支持人名识别mmseg四种过滤算法分词准确率达到了97%以上。支持自定义词库。在lexicon文件夹下可以随便添加删除更改词库和词库内容并且对词库进行了分类.zip,太多无法一一验证是否可用,程序如果跑不...
Friso 是使用 c 语言开发的一款开源的高性能中文分词器,使用流行的mmseg算法实现。完全基于模块化设计和实现,可以很方便的植入其他程序中, 例如:MySQL,PHP,并且提供了php5, php7, ocaml, lua的插件实现