Mmseg中文分词算法解析

@author linjiexing

开发中文搜索和中文词库语义自己主动识别的时候,我採用都是基于mmseg中文分词算法开发的Jcseg开源project。使用场景涉及搜索索引创建时的中文分词、新词发现的中文分词、语义词向量空间构建过程的中文分词和文章特征向量提取前的中文分词等,整体使用下来,感觉jcseg是一个非常优秀的开源中文分词工具,并且可配置和开源的情况下,能够满足非常多场景的中文分词逻辑。本文先把jcseg使用到最主要的mmseg算法解析一下。

1. 中文分词算法之争

在分析mmseg算法前,先讲述一段中文分词的基本历史,在吴军著的《数学之美》中有详述。我主要聊聊我的想法。算法开发的思维流程事实上和这段历史基本上是吻合的。我们的直观思维非常easy受限于我们的知识储备和经验,比方我们在设计出飞机之前,想到是仿生的方式去模拟鸟儿的扇动翅膀姿势,直到后来空气动力学发现飞翔的本质是扇动翅膀能够产生空气涡流而给以上升驱动力,由螺旋桨推升比空气质量高的物体。飞机由此发明。

在中文分词的道路上,也曾走过这样一段类似的探索之路。

一開始。为了实现合理的中文分词。我们能想到的是使用语言学家已经归纳的语法规则,依据传统的“句读”切割,给语句分词。可是。我们知道,非常多出名的诗句或文学语句都不是来自于正常的语法,甚至有些口语化的语句也不满足语法规则,可是并不影响人的识别,并且可能还是流传千古的创新之作。

所以。直觉的有限定义并不能满足千变万化的语言环境。

在IBM花费非常多时间和人力之后。发现走传统思维是行不通的。转而走向如今流行的统计学语言模型。我个人是这么理解统计学模型的。本质上语言学家的语法规则也是来自于大量语料的统计和归纳。并加以个人或专家团队的约束,组织成有限的语法规则,可是这个语法规则被约束成有限的,从而不满足人类的无线创作的可能性——用概率学的角度看,语法规则可能能够覆盖到一个标准差内的可能发生的事件(其实。并没有到这个覆盖率)。可是其他小概率事件并没有覆盖,甚至随着时间的演变,语料库的迅速添加,长尾效应和创新效应的存在,覆盖率更快的减少。使用有限非完备的方式,是非常难应对无限扩展的方式。这个时候,就是基于统计学的机器学习占了实践的上风。

发展到如今。有非常多基于统计理论的中文分词算法,也有非常多成熟的产品。他们在实践中尽管并不是达到百分百正确率,可是在非常多应用场景已经能够满足要求,适定性比基于语法的方式要优越非常多。

当然,但凡基于统计学的模型,其探索之路就意味着永无止境。

不同的算法模型也有不同的适定场景。各位能够自己尝试。我所使用到的场景使用mmseg算法就能够有非常好的效果,所以没有深入查阅其他算法的原理。临时无法给出比較客观的比較。

2. Mmseg算法原理

如上所述,mmseg算法是基于统计模型的,所以算法的规则也是来自于对语料库的分析和归纳,作者依据语料库总结出分词的规则,分为四个步骤。算法原文为 http://technology.chtsai.org/mmseg/ 。

详细规则例如以下:

① 规则1,最大匹配:假设词语能够找到一个简单的词匹配,则觉得该词即为该词语的分词

类似。词语“国际化”,通过词典分词。能够有例如以下分词结果

1. 国_际_化
2. 国际_化
3. 国际化

1. C1_C2_C3
2. C1C2_C3
3. C1_C2C3
4. C1C2C3

可见“国际化”有全然相应的词,则觉得这个词语即是一个词。

规则总结例如以下:

选取C1C2C3模式

② 规则2,最大平均词汇长度。假设词语分词不满足规则1,则使用规则2:

类似。词语“南京市长江大桥”,分词结果可能例如以下

1. 南京市_长江大桥  —— 平均词长度为7/2=3.5
2. 南京_市长_江大桥 —— 平均词长度为7/3=2.3

归纳该规则为则选取第一种分词方式,可见这个规则是兼容第一个规则的

1. C1C2_C3C4C5C6
2. C1C2_C3C4_C5C6

③ 规则3,最小词长方差。假设规则②不成立,则进行规则三。这个规则和我们平时用语有关,一般我们在组织语句时,为了朗朗上口,往往使用的词汇组成长度比較一致。

比方,“幸福_快乐”,“人之初_性本善”,“君子一言,驷马难追”。

类似,词语“研究生命科学”

1. 研究生_命_科学  ——词长方差0.82
2. 研究_生命_科学 ——词长方差0

上述平均词长都是2,可是词长方差不一致。依据规则③。选择另外一种分词方式,这样的规则能够归纳为

1. _C1C2_C3C4_C5C6_
2. _C1C2C3_C4_C5C6_

④ 规则4。最大单字自由度。

所谓单字自由度,能够简单的理解为这个字作为单独出现的语境次数。比方“的”常常作为定语修饰字,常常出如今各种语境。可是“的”偶尔也会和其它字词组成成语。比方“目的”等,这样的组合会影响改字的自由度。

有关自由度和凝固度。回头在《新词发现》中讨论。这样的推断主要是使用在单字存在的场景。

在规则③不成立的情况下,进行规则④的推断。

1. 化妆_和(10)_服装
2. 化妆_和服_装(3)

总结该规则为(备注,上面自由度属于个人瞎编)平均词长和词长方差是一致的,可是单字的自由度不同。选择第一种分词方式

1. _C1C2_C3_C4C5_

2. _C1C2_C3C4_C5_

Compare the freedom(C3) to freedom(C5)

3. 该算法的错误情况

该算法的错误案例能够详见原论文的Example of errors小节。个别错误是能够避免的,尤其是单字自由度,主要是语料库的训练问题。有些问题能够通过新词发现解决。查看该约束,能够推断是否满足自己的应用场景。

4. 小结

能感觉这篇算法阐述还是非常精炼美丽的,在非常多场景适定性也非常强。兴许将对基于mmseg算法开源的jcseg做个分析。

Mmseg中文分词算法解析的更多相关文章

  1. MMSeg中文分词算法

    Java中有一些开源的分词项目,比如:IK.Paoding.MMSEG4J等等.这里主要说的是MMSEG4J中使用的MMSeg算法.它的原文介绍在:http://technology.chtsai.o ...

  2. MMSEG 中文分词算法 翻译

    算法原文位于:http://technology.chtsai.org/mmseg/ http://www.360doc.com/content/13/0217/15/11619026_2661428 ...

  3. Sphinx+MySQL5.1x+SphinxSE+mmseg中文分词

    什么是Sphinx Sphinx 是一个全文检索引擎,一般而言,Sphinx是一个独立的搜索引擎,意图为其它应用提供快速.低空间占用.高结果相关度的全文搜索功能.Sphinx能够很easy的与SQL数 ...

  4. 中文分词算法之最大正向匹配算法(Python版)

    最大匹配算法是自然语言处理中的中文匹配算法中最基础的算法,分为正向和逆向,原理都是一样的. 正向最大匹配算法,故名思意,从左向右扫描寻找词的最大匹配. 首先我们可以规定一个词的最大长度,每次扫描的时候 ...

  5. 在Hadoop上运行基于RMM中文分词算法的MapReduce程序

    原文:http://xiaoxia.org/2011/12/18/map-reduce-program-of-rmm-word-count-on-hadoop/ 在Hadoop上运行基于RMM中文分词 ...

  6. 分词 | 双向匹配中文分词算法python实现

    本次实验内容是基于词典的双向匹配算法的中文分词算法的实现.使用正向和反向最大匹配算法对给定句子进行分词,对得到的结果进行比较,从而决定正确的分词方法. 算法描述正向最大匹配算法先设定扫描的窗口大小ma ...

  7. 中文分词算法工具hanlp源码解析

    词图 词图指的是句子中所有词可能构成的图.如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B).一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图. 需要稀疏2维 ...

  8. hanlp源码解析之中文分词算法详解

    词图 词图指的是句子中所有词可能构成的图.如果一个词A的下一个词可能是B的话,那么A和B之间具有一条路径E(A,B).一个词可能有多个后续,同时也可能有多个前驱,它们构成的图我称作词图. 需要稀疏2维 ...

  9. Coreseek-带中文分词的Sphinx

    Sphinx并不支持中文分词, 也就不支持中文搜索, Coreseek = Sphinx + MMSEG(中文分词算法) 1.下载 1).到官网下载 2).解压后有三个文件夹 csft-3.2.14: ...

随机推荐

  1. 安装mongodb卡顿

    "3.6下载安装会卡死."的原因在于,默认安装是包含mongodb compass,这个包的,这个包大约有180MB,下载很慢,导致所谓的的”卡死“. 如果你选用自定义安装的并且不 ...

  2. linux 下常见命令

    ===============安装和登陆命令============================================================= Mount: 挂载命令.把存储介 ...

  3. 在java中使用dom4j解析xml

    创建xml文档并输出到文件 import java.io.File; import java.io.FileOutputStream; import org.dom4j.Document; impor ...

  4. NYOJ 219 An problem about date

    An problem about date 时间限制:2000 ms  |  内存限制:65535 KB 难度:2   描述 acm的iphxer经常忘记某天是星期几,但是他记那天的具体日期,他希望你 ...

  5. [转]常见linux命令用法介绍

    su switch user 用途:用于用户之间的切换 格式: su - USERNAME切换用户后,同时切换到新用户的工作环境中 su USERNAME切换用户后,不改变原用户的工作目录,及其他环境 ...

  6. hdu 1907 尼姆博弈

    John Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submis ...

  7. 13-数组的API方法遍历

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  8. SPOJ QTREE3 Query on a tree again! ——Link-Cut Tree

    [题目分析] QTREE2,一看是倍增算法,太懒了,不写了.( ̄_, ̄ ) QTREE3,树链剖分可以做,发现链上的问题LCT也很好做. 要是子树问题貌似可以DFS序. 然后就成LCT模板题了. 考前 ...

  9. 洛谷P3097 - [USACO13DEC]最优挤奶Optimal Milking

    Portal Description 给出一个\(n(n\leq4\times10^4)\)个数的数列\(\{a_n\}(a_i\geq1)\).一个数列的最大贡献定义为其中若干个不相邻的数的和的最大 ...

  10. 刷题总结——飞扬的小鸟(NOIP2014提高组)

    题目: 题目背景 NOIP2014 提高组 Day1 试题. 题目描述 Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面 ...