一、常见的中文分词方案

1. 基于字符串匹配(词典)

基于规则的常见的就是最大正/反向匹配,以及双向匹配。
规则里糅合一定的统计规则,会采用动态规划计算最大的概率路径的分词.
以上说起来很简单,其中还有很多细节,比如词法规则的高效匹配编译,词库的索引结构等。
常见的基于词典的分词算法分为以下几种:正向最大匹配法、逆向最大匹配法和双向匹配分词法等。

2. 基于统计以及机器学习的分词

以CRF为主,也有用svm,nn的实现,这类都是基于模型的,,都有个缺陷,不方便增加用户词典(但可以结合,比如解码的时候force-decode)。 速度上会有损耗。 另外都需要提取特征。传统CRF一般是定义特征模板,方便性上有所提高。另外传统CRF训练算法(LBFGS)较慢,也有使用sgd的,但多线程都支持的不好。代表有crf++, crfsuite, crfsgd, wapiti等。

这类目前常用的是算法是HMM、CRF、SVM、深度学习等算法,比如stanford、Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备较好的学习能力,因此其对歧义词和未登录词的识别都具有良好的效果。

常见的分词器都是使用机器学习算法和词典相结合,一方面能够提高分词准确率,另一方面能够改善领域适应性。

3. 深度学习方法

深度学习主要是特征学习,端到端训练, 适合有大量语料的场景。另外各种工具越来越完善,利用GPU可大幅提高训练速度。

深度学习主要是特征学习,在NLP里各种词嵌入是一种有效的特征学习。

二、 一些实现

1. ikanalyzer

https://github.com/wks/ik-analyzer
IKAnalyzer是一个开源的,基于java语言开发的轻量级的中文分词工具包。从2006年12月推出1.0版开始,IKAnalyzer已经推出了3个大版本。最初,它是以开源项目Luence为应用主体的,结合词典分词和文法分析算法的中文分词组件。新版本的 IKAnalyzer3.0则发展为面向Java的公用分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化实现。

2. mmseg

http://technology.chtsai.org/mmseg/

3. CRF方法

https://nlp.stanford.edu/software/segmenter.shtml

4. 结巴分词

https://github.com/fxsjy/jieba
https://github.com/yanyiwu/cppjieba
基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图 (DAG);采用了动态规划查找最大概率路径, 找出基于词频的最大切分组合;对于未登录词,采用了基于汉字成词能力的 HMM 模型,使用了 Viterbi 算法。

5. 中科院分词系统

http://ictclas.nlpir.org/nlpir/
中国科学院计算技术研究所在多年研究工作积累的基础上,研制出了汉语词法分析系统ICTCLAS(Institute of Computing Technology, Chinese Lexical Analysis System),主要功能包括中文分词;词性标注;命名实体识别;新词识别;同时支持用户词典。先后精心打造五年,内核升级6次,目前已经升级到了ICTCLAS3.0。ICTCLAS3.0分词速度单机996KB/s,分词精度98.45%,API不超过200KB,各种词典数据压缩后不到3M,是当前世界上最好的汉语词法分析器。

6. smallseg

7. snailseg

8. THULAC

http://thulac.thunlp.org/
在线测试:
http://thulac.thunlp.org/demo

THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:

能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。

准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。

速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。

代码开源,目前 Java、Python和C++版本。

9. Stanford Word Segmenter

https://nlp.stanford.edu/software/segmenter.shtml
Java实现的CRF算法。可以直接使用训练好的模型,也提供训练模型接口。

10. ansj分词器

11. Hanlp分词

https://github.com/hankcs/HanLP
HanLP是由一系列模型与算法组成的Java工具包,目标是普及自然语言处理在生产环境中的应用。HanLP具备功能完善、性能高效、架构清晰、语料时新、可自定义的特点。

  • 中文分词
  • 最短路分词
  • N-最短路分词
  • CRF分词
  • 索引分词
  • 极速词典分词
  • 用户自定义词典
  • 词性标注
  • 命名实体识别
  • 中国人名识别
  • 音译人名识别
  • 日本人名识别
  • 地名识别
  • 实体机构名识别
  • 关键词提取
  • extRank关键词提
  • 自动摘要
  • TextRank自动摘要
  • 短语提取
  • 基于互信息和左右信息熵的短语提取
  • 拼音转换
  • 多音字
  • 声母
  • 韵母
  • 声调
  • 简繁转换
  • 繁体中文分词
  • 简繁分歧词(简体、繁体、臺灣正體、香港繁體)
  • 文本推荐
  • 语义推荐
  • 拼音推荐
  • 字词推荐
  • 依存句法分析
  • 基于神经网络的高性能依存句法分析器
  • MaxEnt依存句法分析
  • CRF依存句法分析
  • 语料库工具
  • 分词语料预处理
  • 词频词性词典制作
  • iGram统计
  • 词共现统计
  • CoNLL语料预处理
  • CoNLL UA/LA/DA评测工具
    在提供丰富功能的同时,HanLP内部模块坚持低耦合、模型坚持惰性加载、服务坚持静态提供、词典坚持明文发布,使用非常方便,同时自带一些语料处理工具,帮助用户训练自己的模型。

12. KCWS分词器(字嵌入+Bi-LSTM+CRF)

https://github.com/koth/kcws
使用tensorflow

13. ZPar

https://github.com/frcchang/zpar

14. 盘古分词组件

http://pangusegment.codeplex.com/

15. SCWS

http://www.xunsearch.com/scws/
SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统)。

这是一套基于词频词典的机械式中文分词引擎,它能将一整段的中文文本基本正确地切分成词。 词是中文的最小语素单位,但在书写时并不像英语会在词之间用空格分开, 所以如何准确并快速分词一直是中文分词的攻关难点。

SCWS 采用纯 C 语言开发,不依赖任何外部库函数,可直接使用动态链接库嵌入应用程序, 支持的中文编码包括 GBK、UTF-8 等。此外还提供了 PHP 扩展模块, 可在 PHP 中快速而方便地使用分词功能。

分词算法上并无太多创新成分,采用的是自己采集的词频词典,并辅以一定的专有名称,人名,地名, 数字年代等规则识别来达到基本分词,经小范围测试准确率在 90% ~ 95% 之间, 基本上能满足一些小型搜索引擎、关键字提取等场合运用。首次雏形版本发布于 2005 年底。

SCWS 由 hightman 开发, 并以 BSD 许可协议开源发布,源码托管在 github。

16. HTTPCWS

中文切词(又称中文分词,Chinese Word Segmentation)指的是将一个汉字序列切分成一个一个单独的词。中文分词是文本挖掘的基础,对于输入的一段中文,成功的进行中文分词,可以达到电脑自动识别语句含义的效果。这种方法又叫做机械分词方法,它是按照一定的策略将待分析的汉字串与一个 “充分大的”机器词典中的词条进行配,若在词典中找到某个字符串,则匹配成功(识别出一个词)。

17. 庖丁解牛分词器

庖丁解牛分词器是基于lucene的中文分词系统的软件。 庖丁解牛分词器是基于lucene的中文分词系统的软件。
仅支持Java,且提供lucence接口。

18. CC-CEDICT

提供一份以汉语拼音为中文辅助的汉英辞典,其词典可以用于中文分词。Chrome中文版就是使用这个词典进行中文分词的。

三、 公开数据集

1. SIGHAN Bakeoff 2005

http://sighan.cs.uchicago.edu/bakeoff2005/

2. 人民日报 2014, 65MB

https://pan.baidu.com/s/1hq3KKXe

本文参考:
https://www.zhihu.com/question/19578687

机器学习笔记二十四 中文分词资料整理相关推荐

  1. 嵌入式Linux驱动笔记(二十四)------framebuffer之使用spi-tft屏幕(上)

    你好!这里是风筝的博客, 欢迎和我一起交流. 最近入手了一块spi接口的tft彩屏,想着在我的h3板子上使用framebuffer驱动起来. 我们知道: Linux抽象出FrameBuffer这个设备 ...

  2. 【Visual C++】游戏开发笔记二十四 由DirectX的几个版本说开去

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  3. 机器学习笔记(十四)——HMM估计问题和前向后向算法

    一.隐马尔科夫链的第一个基本问题 估计问题:给定一个观察序列O=O1O2-OTO=O_1O_2\dots O_T和模型u=(A,B,π)u = (\boldsymbol{A,B,\pi}),如何快速地 ...

  4. Java8的其它 新特性(笔记二十四)

    标题 Java 8新特性简介 一.Lambda表达式 1.为什么使用Lambda表达式 2.使用举例 二.函数式(Functional)接口 1.什么是函数式(Functional)接口 2.如何理解 ...

  5. 机器学习知识点(二十四)隐马尔可夫模型HMM维特比Viterbi算法Java实现

    1.隐马尔可夫模型HMM    学习算法,看中文不如看英文,中文喜欢描述的很高深.    http://www.comp.leeds.ac.uk/roger/HiddenMarkovModels/ht ...

  6. 机器学习(二十四)——数据不平衡问题, 强化学习

    https://antkillerfarm.github.io/ 数据不平衡问题 https://mp.weixin.qq.com/s/e0jXXCIhbaZz7xaCZl-YmA 如何处理不均衡数据 ...

  7. Java笔记二十四——Spring开发

    Spring是一个支持快速开发Java EE应用程序的框架.它提供了一系列底层容器和基础设施,并可以和大量常用的开源框架无缝集成,可以说是开发Java EE应用程序的必备. 在Spring Frame ...

  8. [傅里叶变换及其应用学习笔记] 二十四. 级联,脉冲响应

    我们上节课学习了 在离散有限维空间中,任何线性系统都是通过矩阵间的相乘得到的 在连续无限维空间中,任何线性系统都是通过对核函数的积分得到的 脉冲响应(impulse response) 级联线性系统( ...

  9. 机器学习笔记(十四):异常检测

    目录 1)Problem motivation 2)Gaussian distribution 3)Algorithm 4)Developing and evaluating an anomaly d ...

最新文章

  1. 系列文章|OKR与敏捷(二):实现全栈敏捷
  2. java实现Windows资源管理器
  3. Python numpy hstack() vstack() stack() dstack() vsplit() concatenate()函数用法和区别
  4. boost::units模块实现展示信息单元系统
  5. angularjs的$http请求方式
  6. win7安装证书时无响应的解决办法
  7. tomcat 占用 dos
  8. leetcode1037 有效的回旋镖(Java练习)
  9. 地表径流分布数据/水文站点分布/降雨量分布/辐射分布数据
  10. 浅谈御剑web指纹识别-CMS指纹识别
  11. JQuery提交表单
  12. 170926_Spring Cloud 微服务实战(翟永超著) 读书笔记(三)_Eureka详解
  13. 计算机语言底层用汉语拼音设计,对汉语拼音设计方案认识(10页)-原创力文档...
  14. python停止运行_Python已停止工作,问题解决
  15. 混合正弦余弦算法和 Lévy飞行的麻雀算法-附代码
  16. python房价预测_python房价预测
  17. 一网统管网格化解决方案 PPT
  18. Ubuntu快速建立Samba网络共享文件夹
  19. Beego2 使用Session时SetCookie无效
  20. 《心智社会》—马文·明斯基

热门文章

  1. Java 知识点整理-20.网络编程
  2. CRM成功的关键是以客户为中心
  3. 计算机基础集体备课教研记录,集体备课教研活动记录基础会计教学的集体备课与教研...
  4. 计算机分支结构语句的实验报告,c语言 实验报告三 分支结构程序设计
  5. 曙光I620 - G30 配置 iLo
  6. 牛大牛二打乒乓球问题(秋招笔试题)
  7. error C4496: 使用了非标准扩展“for each”: 替换为 ranged-for 语句
  8. 安装lombok(红辣椒)
  9. 月报总结|Moonbeam 3月份大事一览
  10. 使用手机陀螺仪 完成一个简单的小游戏