初识中文分词(一)MMSEG
第一次记录一些学习的内容,希望能给和我一样不熟悉中文分词的人一些思路。(写的不好,还请见谅)
=====================背景======================
中文分词的学习是想要给公司其他部门的人做一个简介,让不知道中文分词的人有个初步的认识,而我作为一个完全不懂的人要给其他不懂的人做这个讲解 ⊙﹏⊙b 估计是希望我以一个同样的不知道什么是中文分词算法的人来讲解这个,这样能更贴近听者的感受吧。
硬着头皮看看写写6天多终于有一个我自己还算满意的PPT出山了。
进入正题
=================看这边~我就是正题==================
其实在之前稍微了解了一点关于中文分词的思想,但是对于已经成型的中文分词器的主流思想还是不甚了解,从搜索引擎处找到了开源中国的中文分词库。一眼看上去是几十个分词器列了出来,但其实每个分词器点进去并不会有很长的介绍,基本都是给出来使用的分词算法、一些自有的特点、百分比数据等。稍微聚合一下就会发现,实际使用的分词算法两只手就能数的过来,而算法背后的模型又是可以聚合的\(^o^)/,大致看过两遍后心里就有数了。
我到现在看到的中文分词器,基本都是这三类的任意组合,一般来说,只使用其中一种思想的分词器效果基本无法达到比较理想的分词效果。而在这些组合中,又以前两种的组合居多,这可能也与第三种方法本身的研究进展和难度系数相对较高有关。
- 第一种思想——基于词典:基于这种思想按照常用的说法也叫机械分词,基本上不太考虑文本本身要表达的含义,只是一个个找到词典中与之匹配的词语进行划分,所以这种方法基本上只是作为分词的前期处理。
- 第二种思想——基于统计:基于这种思想的已经是经过了对分词这个实际的需求的数学建模、求解的一个过程,而无论是建模还是求解所用的算法,其实每一个问题都可以作为一个专门的课题写个论文,不信你可以拿这些关键字去论文网搜一搜。
- 第三种思想——基于规则:在我看来,这个有点类似于人工智能一类了,建立一个系统来学习模仿人类是如何去分析一句话并如果对这句话的划分,甚至于可以添加一些标记来表示一句话当中所包含的情感。
在大概6天的时间里,我只是粗粗的理解了下两种算法:MMSeg和Viterbi。下面就主要是对这两种算法的一个思路的简介,如果有理解错误的地方还请大神指点我一下,不胜感激╰( ̄▽ ̄)╮
强势插入: 鉴于Viterbi的那部分我觉得放在一起这篇就会过长,暂定放在下一篇细聊 \(^o^)/ 希望能继续关注!谢谢!
MMSeg
这个算法分词结果能满足很大一部分需求不是特别高的场合,最关键的是这个算法的思路简单粗暴,凭借这一点它就在主流的分词算法中占了一席之地。
思路:基于词典+基于统计
##首先提一下基于词典的三个基本方法
基于词典的归类下也就是上面列出来的MM(Maximum Matching)、RMM(Reverse Maximum Matching)、最少切分这三种,而这三种方法自由组合一下,也可以提高分词的准确度。
举个栗子:
词典:
有 |
有意 |
意见 |
见 |
分歧 |
待宰割的句子:
有意见分歧
MM
肢解:
就是去词典里面找匹配的词,不过要有顺序哦,从左到右的划分→_→
有意见分歧:词典里有有这个词
有意见分歧:有意比有的长度多了一个字,按照Maximum的思想,当然就是有意了
有意见分歧:有意已经完成了,开始见了,只有一个词是以见开头的,那就是它咯
有意见分歧:词典里面也只有一个以分开头的词—分歧
结果:
有意/见/分歧
果然是简单的不能再简单了,但是真的是我们想要的结果么?答案很明显
如果要是从句末开始呢?
RMM
肢解:
注:这里只是讲解这个思路,实际应用请参照各类开源分词词典
这次我们从右往左看←_←
有意见分歧:就这么一个以歧结尾的词哦,就用它了
有意见分歧:词典里有两个见字结尾的词,其一就是这个见
有意见分歧:其二就是这个意见,意见要比见多了一个字,就意见咯
有意见分歧:只剩一个有了,那就它自己占一个位子了
结果:
有/意见/分歧
其实思路是一样的,但结果还是有些差别的,浏览过很多个博客的分词文章,出现概率很高的一句话:统计结果表明,单纯使用正向最大匹配的错误率为 1/169,单纯使用逆向最大匹配的错误率为 1/245。
最少切分
这个看名字也大概能知道个八九不离十。可以这样想这样一个场景,划分:
中华人民共和国
在相当一部分情况下,我们当然希望看到中华人民共和国作为一整个词被划分,而不是中华/人民/共和国。
## 已经了解了基于词典的三个基本方法,继续MMSeg
MMSeg = MM + Seg = Maximum Matching + Segmentation
这个算法的名称很清晰的表明了它使用的基本思想:正向最大匹配规则。
下面进入另外一个栗子:
研究生命起源
当然还是需要给定一个词典:
研究 |
研究生 |
生命 |
起源 |
可能你很想知道我这些词典是从哪里来的,好吧,实话告诉你,是我编的\(^o^)/,但这完全不妨碍我讲解这个分词算法,并且它可以更好的给予形象支持。
根据上面的方法可以知道按照MM方法可以分出来:研究生/命/起源。大部分时候结果肯定是不尽如人意。那是否可以考虑下其他的方案呢?我们最想看到的当然是:研究/生命/起源,聪明的读者肯定可以想到,这个如果用RMM的话就可以轻松办到咯,没错!那我们为什么还要用什么MMSeg的过滤器来拆词呢?
(在这里搁浅了好久,一方面实在没时间继续写;另一方才是主要原因,我都举不出反例来,果然分析的词还是太少Orz;容贫尼继续吧,先放过这一马吧~等我后面有看到或者有好心人提醒我的时候,再补充上例子来解决这个问题:“为什么我还要用MMSeg呢?”)
在这里我得先假定我们需要MMSeg了。。然后分词的流程就像下面画的:
直接从PPT里面截个图。请忽略不好的画工。。。
最需要解释的大概就是chunk了,chunk是MMSeg里面不可避免的一个名词。其实就是三个字或词构成的一个小组就叫chunk了。上图表示“研究生命起源”从研字开头会有6个chunk,每个都是一个candidate。下面这些candidate就要经过层层筛选了~
- 看谁长 —>
- 看谁平均水平好 —>
- 看谁的稳定度最好(2和3有点像水桶木板的那个理论,就是水桶能盛多少水是取决于最小的板,要是差异比较大的话,那么水桶的容量并不一定好) —>
- 这个听上去挺专业的,其实就是词频(即词出现的概率或者次数),当然是露脸的多的比较容易选上,所以说要经常出去混个脸熟~
4号chunk技压群chunk,入选咯。实际情况中,可以要用的chunk更多,而且很可能在第三步的时候还剩下不少,而本例在第三步结束后就只剩下一个可选的candidate了,自然就不用进行第四步。此时,chunk中的第一个词就能够确定成为一个我们分出来的词了~啊~这么半天candidate也不是全部入选啊。之后做个减法
研究生命起源 - 研究 = 生命起源
然后从“生”这个字开始重复上面的步骤,就是MMSeg分词拉~
如果你仔细看过,就能发现,前3步的确很“机械”,但是最后一步的话,就需要一些数据支持才有据可查了。这一步其实更偏向于统计的方法了,也就是在第一张图里面我们看到的“2基于统计”这个思想。
想要把分词的效果提升上来,将其他方法的优势融入是最好的提升自己的办法。而且网上还是能找到很多的开源的资源供你使用,当然也有付费的,大家都是要吃饭的嘛。
=====================后话======================
我能理解的MMSeg就是这些咯~如果你觉得对你有帮助,烦请点点右下角的推荐哟~本姑娘在此表示感谢~O(∩_∩)O谢谢~
转载于:https://www.cnblogs.com/carrotH/p/3979792.html
初识中文分词(一)MMSEG相关推荐
- Jcseg是基于mmseg算法的一个轻量级Java中文分词器
Jcseg是基于mmseg算法的一个轻量级中文分词器,同时集成了关键字提取,关键短语提取,关键句子提取和文章自动摘要等功能,并且提供了一个基于Jetty的web服务器,方便各大语言直接http调用,同 ...
- java jcseg 官网_Jcseg轻量级Java中文分词器2.6.5最新版
Jcseg分词器官方版是一款简单且超级好用的轻量级Java分词工具,它可以帮助用户轻松提取关键词和关键词,并为Java的使用提供帮助,该软件还提供了一个基于Jetty的Web服务器,可以满足用户的各种 ...
- Lucene 中文分词器概述 与 Ik-Analyzer 使用教程
目录 中文分词器简述 Ik-Analyzer 概述与特性 Ik-Analyzer 下载与使用 创建索引 查询索引 Ik-Analyzer 官方示例源码 中文分词器简述 1.Apache Lucene ...
- 基于MMSeg算法的中文分词类库
最近在实现基于lucene.net的搜索方案,涉及中文分词,找了很多,最终选择了MMSeg4j,但MMSeg4j只有Java版,在博客园上找到了*王员外*(http://www.cnblogs.com ...
- Mmseg中文分词算法解析
Mmseg中文分词算法解析 @author linjiexing 开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project.使用场景涉及搜索 ...
- php mmseg,中文分词软件 LibMMSeg
xapian 是不支持中文的,但是可以通过LibMMSeg来弥补改缺憾. LibMMSeg 简介 LibMMSeg 是Coreseek.com为 Sphinx 全文搜索引擎设计的中文分词软件包,其在G ...
- php mmseg,coreseek+sphinx+mmseg中文分词安装
由于官网挂了,找资源 下载coreseek+sphinx+mmseg中文分词安装费了很多时间 开始是在github上一阵狂搜,找了几个都安装失败,后来在csdn上找到资源,一阵折腾之后安装成功 准备工 ...
- 11大Java开源中文分词器的使用方法和分词效果对比
2019独角兽企业重金招聘Python工程师标准>>> 本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了1 ...
- sphinx+coreseek创建中文分词索引
2019独角兽企业重金招聘Python工程师标准>>> 一:安装sphinx步骤如下: 下载sphinx最新的2.2.11版本 cd /opt/sphinx wget 下载地址 ta ...
最新文章
- oralce 增加表字段命令|oralce 增加表字段类型命令
- Spring transaction事务之roll back回滚: rollback-for
- 深入浅出 JQuery (一) 浅析JQuery
- Spring - Java/J2EE Application Framework 应用框架 第 3 章 Beans, BeanFactory和ApplicationContext
- C++ Primer 5th笔记(9)chapter9 顺序容器 forward_list
- 日志库EasyLogging++学习系列(3)—— 配置功能
- leetcode202. 快乐数
- java实现打印直角三角形
- excel不显示0_【周一实用技巧】绝密,保护公式不被修改。Excel单元格保护可以输入但不能修改公式,隐藏不显示公式内容...
- bcp导入到数据库_Bcp和链接到Azure的服务器
- grub4dos 引导linux,Grub4dos系统引导
- 超全SQL注入实用语句
- Sql取得两表关联数据
- 计算机arp 各命令,ARP命令参数详解
- C. Inna and Dima
- 墨天轮国产数据库沙龙 | 胡彦军:华为GaussDB迁移工具解密
- oracle运维常用语句,oracle运维个人常用检查语句整理
- 有一个棋盘,有64个方格,在第一个方格里面放1粒芝麻重量为0.00001,第二个里面放2粒,第三个里面放4,第四个8 ,以此类推,棋盘上放的所有芝麻的重量?
- 简单易学:本身就很小且简单
- 几何画板是如何证明勾股定理的