前言

中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块。不同于英文的是,中文句子中没有词的界限,因此在进行中文自然语言处理时,通常需要先进行分词,分词效果将直接影响词性、句法树等模块的效果。当然分词只是一个工具,场景不同,要求也不同。
在人机自然语言交互中,成熟的中文分词算法能够达到更好的自然语言处理效果,帮助计算机理解复杂的中文语言。
根据中文分词实现的原理和特点,可以分为:

  • 基于词典分词算法
  • 基于理解的分词方法
  • 基于统计的机器学习算法

基于词典分词算法

基于词典分词算法,也称为字符串匹配分词算法。该算法是按照一定的策略将待匹配的字符串和一个已经建立好的"充分大的"词典中的词进行匹配,若找到某个词条,则说明匹配成功,识别了该词。常见的基于词典的分词算法为一下几种:

  • 正向最大匹配算法。
  • 逆向最大匹配法。
  • 最少切分法。
  • 双向匹配分词法。

基于词典的分词算法是应用最广泛,分词速度最快的,很长一段时间内研究者在对对基于字符串匹配方法进行优化,比如最大长度设定,字符串存储和查找方法以及对于词表的组织结构,比如采用TRIE索引树,哈希索引等。

这类算法的优点:速度快,都是O(n)的时间复杂度,实现简单,效果尚可。

算法的缺点:对歧义和未登录的词处理不好。

基于理解的分词方法

这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果,其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象,它通常包含三个部分:分词系统,句法语义子系统,总控部分,在总控部分的协调下,分词系统可以获得有关词,句子等的句法和语义信息来对分词歧义进行判断,它模拟来人对句子的理解过程,这种分词方法需要大量的语言知识和信息,由于汉语言知识的笼统、复杂性,难以将各种语言信息组成及其可以直接读取的形式,因此目前基于理解的分词系统还在试验阶段。

基于统计的机器学习算法

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

Nianwen Xue在其论文中《Combining Classifier for Chinese Word Segmentation》中首次提出对每个字符进行标注,通过机器学习算法训练分类器进行分词,在论文《Chinese word segmentation as character tagging》中较为详细地阐述了基于字标注的分词法。

算法优点:能很好处理歧义和未登录词问题,效果比前一类效果好

算法缺点: 需要大量的人工标注数据,以及较慢的分词速度

目前常见的中文分词分类器

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

随着深度学习的兴起,也出现了基于神经网络的分词器,例如有研究人员尝试使用双向LSTM+CRF实现分词器,其本质上是序列标注,所以有通用性,命名实体识别等都可以使用该模型,据报道其分词器字符准确率可以高达97.5%,算法框架的思路与论文《Neural Architectures for Named Entity Recogintion》类似,利用该框架可以实现中文分词,如下图所示:

首先对语料进行字符嵌入,将得到的特征输入给双向的LSTM,然后加一个CRF就得到标注结果。

分词器目前存在的问题

目前中文分词难点主要有三个:

  • 分词标准:比如人名,在哈工大的标准中姓和名是分开的,但是在Hanlp中是合在一起的,这需要根据不同的需求制定不同的分词标准。

  • 歧义:对于同一个待切分字符串存在多个分词结果。歧义又分为组合歧义,交集型歧义和真歧义三种分类。
    • 组合型歧义:分词是有不同的粒度的,指某个词条中的一部分也可以切分未一个独立的词条,比如“中华人民共和国”,粗粒度的分词就是“中华人民共和国”,细粒度的分词可能是中华/人民/共和国
    • 交集型歧义:在郑州天和服装厂中,天和是厂名,是一个专有名词,和服也是一个词,它们共用了
    • 真歧义:本身的语法和语义都没有问题,即便采用人工切分也会产生同样的歧义,只有通过上下文的语义环境才能给出正确的切分结果,例如:对于句子美国会通过对台售武法案,既可以切分成美国/会/通过台售武法案也可以切分成美/国会/通过台售武法案
  • 新词:也称未被词典收录的词,该问题的解决依赖于人们对分词技术和汉语语言结构进一步认识。

一般在搜索引擎中,构建索引时和查询时会使用不同的分词算法,常用的方案是,在索引的时候,使用细粒度的分词以保证召回,在查询的时候使用粗粒度的分词以保证精度。

分词工具介绍

    • 中科院计算所NLPIR:NLPIR能够全方位多角度满足应用者对大数据文本的处理需求,包括大数据完整的技术链条:网络抓取、正文提取、中英文分词、词性标注、实体抽取、词频统计、关键词提取、语义信息抽取、文本分类、情感分析、语义深度扩展、繁简编码转换、自动注音、文本聚类等。
      NLPIR所有功能模块全部备有对应的二次开发接口(动态链接库.dll,.so,及静态链接库等形式),平台的各个中间件API可以无缝地融合到客户的各类复杂应用系统之中,可兼容Windows,Linux, Android,Maemo5, FreeBSD,麒麟等不同操作系统,开发者可使用Java,C/C++,C#, Python,Php, R等各类主流开发语言调用其所有功能。

    • 哈工大的LTP:语言技术平台(Language Technology Platform,LTP)是哈工大社会计算与信息检索研究中心历时十年开发的一整套中文语言处理系统。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library, DLL)的应用程序接口、可视化工具,并且能够以网络服务(Web Service)的形式进行使用。

    • ansj分词器:这是一个基于n-Gram+CRF+HMM的中文分词的java实现;分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上;目前实现了中文分词、 中文姓名识别 、 用户自定义词典、关键字提取、自动摘要、关键字标记等功能。可以应用到自然语言处理等方面,适用于对分词效果要求高的各种项目。

    • 清华大学THULAC:THULAC(THU Lexical Analyzer for Chinese)由清华大学自然语言处理与社会人文计算实验室研制推出的一套中文词法分析工具包,具有中文分词和词性标注功能。THULAC具有如下几个特点:
      • 能力强。利用我们集成的目前世界上规模最大的人工分词和词性标注中文语料库(约含5800万字)训练而成,模型标注能力强大。
      • 准确率高。该工具包在标准数据集Chinese Treebank(CTB5)上分词的F1值可达97.3%,词性标注的F1值可达到92.9%,与该数据集上最好方法效果相当。
      • 速度较快。同时进行分词和词性标注速度为300KB/s,每秒可处理约15万字。只进行分词速度可达到1.3MB/s。
    • 斯坦福分词器:作为众多斯坦福自然语言处理中的一个包, Java实现的CRF算法。可以直接使用训练好的模型,也提供训练模型接口。

    • Hanlp分词器:求解的是最短路径。优点:开源、有人维护、可以解答。原始模型用的训练语料是人民日报的语料,当然如果你有足够的语料也可以自己训练。

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

    • KCWS分词器(字嵌入+Bi-LSTM+CRF) https://github.com/koth/kcws):本质上是序列标注,这个分词器用人民日报的80万语料,据说按照字符正确率评估标准能达到97.5%的准确率,各位感兴趣可以去看看。

    • ZPar:新加坡科技设计大学开发的中文分词器,包括分词、词性标注和Parser,支持多语言,据说效果是公开的分词器中最好的,C++语言编写。

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

ES-自然语言处理之中文分词器的更多相关文章

  1. 自然语言处理之中文分词器-jieba分词器详解及python实战

    (转https://blog.csdn.net/gzmfxy/article/details/78994396) 中文分词是中文文本处理的一个基础步骤,也是中文人机自然语言交互的基础模块,在进行中文自 ...

  2. ES[7.6.x]学习笔记(七)IK中文分词器

    在上一节中,我们给大家介绍了ES的分析器,我相信大家对ES的全文搜索已经有了深刻的印象.分析器包含3个部分:字符过滤器.分词器.分词过滤器.在上一节的例子,大家发现了,都是英文的例子,是吧?因为ES是 ...

  3. ElasticSearch中文分词器-IK分词器的使用

    IK分词器的使用 首先我们通过Postman发送GET请求查询分词效果 GET http://localhost:9200/_analyze { "text":"农业银行 ...

  4. Es学习第五课, 分词器介绍和中文分词器配置

    上课我们介绍了倒排索引,在里面提到了分词的概念,分词器就是用来分词的. 分词器是ES中专门处理分词的组件,英文为Analyzer,定义为:从一串文本中切分出一个一个的词条,并对每个词条进行标准化.它由 ...

  5. es学习(三):分词器介绍以及中文分词器ik的安装与使用

    什么是分词 把文本转换为一个个的单词,分词称之为analysis.es默认只对英文语句做分词,中文不支持,每个中文字都会被拆分为独立的个体. 示例 POST http://192.168.247.8: ...

  6. elasticsearch教程--中文分词器作用和使用

    概述   本文都是基于elasticsearch安装教程 中的elasticsearch安装目录(/opt/environment/elasticsearch-6.4.0)为范例 环境准备 ·全新最小 ...

  7. Elasticsearch笔记六之中文分词器及自定义分词器

    中文分词器 在lunix下执行下列命令,可以看到本来应该按照中文"北京大学"来查询结果es将其分拆为"北","京","大" ...

  8. 转:从头开始编写基于隐含马尔可夫模型HMM的中文分词器

    http://blog.csdn.net/guixunlong/article/details/8925990 从头开始编写基于隐含马尔可夫模型HMM的中文分词器之一 - 资源篇 首先感谢52nlp的 ...

  9. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(十九)ES6.2.2 安装Ik中文分词器

    注: elasticsearch 版本6.2.2 1)集群模式,则每个节点都需要安装ik分词,安装插件完毕后需要重启服务,创建mapping前如果有机器未安装分词,则可能该索引可能为RED,需要删除后 ...

  10. es5.0 安装ik中文分词器 mac

    es5.0集成ik中文分词器,网上资料很多,但是讲的有点乱,有的方法甚至不能正常运行此插件 特别注意的而是,es的版本一定要和ik插件的版本相对应: 1,下载ik 插件: https://github ...

随机推荐

  1. jquery清空div里所有input输入框的值

    $("#divId input").val("");

  2. codeforces 443 B. Kolya and Tandem Repeat 解题报告

    题目链接:http://codeforces.com/contest/443/problem/B 题目意思:给出一个只有小写字母的字符串s(假设长度为len),在其后可以添加 k 个长度的字符,形成一 ...

  3. 一步一步学Silverlight 2系列(11):数据绑定

    概念 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  4. re(正则表达式)模块

    一.最常用的匹配语法 re.match 从头开始匹配 re.search 匹配包含 re.findall 把所有匹配到的字符放到以列表中的元素返回 re.split  以匹配到的字符当做列表分隔符 r ...

  5. java nio的一个严重BUG

    java nio的一个严重BUG Posted on 2009-09-28 19:27 dennis 阅读(4588) 评论(5)  编辑  收藏 所属分类: java .源码解读      这个BU ...

  6. C++ 多项目dll调用-隐式

    将DAA人脸检测做成动态库以便其他程序调用,采用隐式调用完成. 给出部分关于dll制作的关键代码: 1.DLL 多项目DLL编写注意将其他相关项目设置成静态库,以及各库涉及的版本一致性. DLL.h ...

  7. E20180331-hm

    corresponding adj. 相当的,对应的; 通信的; 符合的,符合; 一致的; implicitly adv. 含蓄地; 暗示地; 无疑问地; 无保留地; causal  adj. 具有因 ...

  8. POJ2533/hdoj1950【DP】

    O(nlog(n))的方法: 定义d[k]:长度为k的上升子序列的最末元素,若有多个长度为k的上升子序列,则记录最小的那个最末元素. d中元素也是单调递增的. #include <iostrea ...

  9. bzoj 4550: 小奇的博弈【博弈论+dp】

    首先看出终止状态是全都堆在左边或者右边,然后发现黑的向左白的向右是最优策略(如果不能这样了也就该输了) 然后就不会了 参考 http://www.cnblogs.com/CQzhangyu/p/770 ...

  10. bzoj 1874: [BeiJing2009 WinterCamp]取石子游戏【博弈论】

    先预处理出来sg值,然后先手必败状态就是sg[a[i]]的xor和为0(nim) 如果xor和不为0,那么一定有办法通过一步让xor和为0,具体就是选一个最大的sg[a[i]],把它去成其他sg值的x ...