大家好,欢迎来到IT知识分享网。
ES 分词器
自然语言处理 中文分词器
1. 中文分词是文本处理的基础步骤,也是人机交互时的基础模块.
2. 中文分词效果直接影响词性,句法等
3. 中文分词特点
- 基于 词典分词算法
- 基于 理解的分词方法
- 基于 统计的机器学习算法
-
词典分词算法
基于词典分词算法,也称为字符串匹配分词算法。该算法是按照一定的策略将待匹配的字符串和一个已经建立好的”充分大的”词典中的词进行匹配,若找到某个词条,则说明匹配成功,识别了该词。常见的基于词典的分词算法为一下几种:
- 正向最大匹配算法。
- 逆向最大匹配法。
- 最少切分法。
- 双向匹配分词法。
基于词典的分词算法是应用最广泛,分词速度最快的,很长一段时间内研究者在对对基于字符串匹配方法进行优化,比如最大长度设定,字符串存储和查找方法以及对于词表的组织结构,比如采用TRIE索引树,哈希索引等。
这类算法的优点:速度快,都是O(n)的时间复杂度,实现简单,效果尚可。
算法的缺点:对歧义和未登录的词处理不好。
-
基于理解的分词方法
这种分词方法是通过让计算机模拟人对句子的理解,达到识别词的效果,其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象,它通常包含三个部分:分词系统,句法语义子系统,总控部分,在总控部分的协调下,分词系统可以获得有关词,句子等的句法和语义信息来对分词歧义进行判断,它模拟来人对句子的理解过程,这种分词方法需要大量的语言知识和信息,由于汉语言知识的笼统、复杂性,难以将各种语言信息组成及其可以直接读取的形式,因此目前基于理解的分词系统还在试验阶段。
-
基于统计的机器学习算法
这类目前常用的算法是HMM,CRF,SVM,深度学习等算法,比如stanford,Hanlp分词工具是基于CRF算法。以CRF为例,基本思路是对汉字进行标注训练,不仅考虑了词语出现的频率,还考虑上下文,具备良好的学习能力,因此对歧义词和未登录词的识别都具有良好的效果。
Nianwen Xue在其论文中《Combining Classifier for Chinese Word Segmentation》中首次提出对每个字符进行标注,通过机器学习算法训练分类器进行分词,在论文《Chinese word segmentation as character tagging》中较为详细地阐述了基于字标注的分词法。
算法优点:能很好处理歧义和未登录词问题,效果比前一类效果好
算法缺点: 需要大量的人工标注数据,以及较慢的分词速度
常见的中文分词分类器
- 中科院计算所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的默认优化实现。
ik分词器
-
目录简介
- IKAnalyzer.cfg.xml,用来配置自定义的词库
- main.dic,ik原生内置的中文词库,大约有27万多条,只要是这些单词,都会被分在一起。
- surname.dic,中国的姓氏。
- suffix.dic,特殊(后缀)名词,例如
乡、江、所、省
等等。 - preposition.dic,中文介词,例如
不、也、了、仍
等等。 - stopword.dic,英文停用词库,例如
a、an、and、the
等。 - quantifier.dic,单位名词,如
厘米、件、倍、像素
等。
-
ik 分词结果类型
- analyzer:ik_max_word , 将文档做最细粒度的拆分
- analyzer:ik_smart , 文档作最粗粒度的拆分
-
ik 分词器操作
# 查询 GET _analyze { "analyzer": "ik_max_word", "text": "上海自来水来自海上" } # 结果 { "tokens" : [ { "token" : "上海", "start_offset" : 0, "end_offset" : 2, "type" : "CN_WORD", "position" : 0 }, { "token" : "自来水", "start_offset" : 2, "end_offset" : 5, "type" : "CN_WORD", "position" : 1 }, { "token" : "自来", "start_offset" : 2, "end_offset" : 4, "type" : "CN_WORD", "position" : 2 }, { "token" : "水", "start_offset" : 4, "end_offset" : 5, "type" : "CN_CHAR", "position" : 3 }, { "token" : "来自", "start_offset" : 5, "end_offset" : 7, "type" : "CN_WORD", "position" : 4 }, { "token" : "海上", "start_offset" : 7, "end_offset" : 9, "type" : "CN_WORD", "position" : 5 } ] }
-
ik之短语查询
GET ik1/_search { "query": { "match_phrase": { "content": "今天" } } } # 结果 { "took" : 1, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.2876821, "hits" : [ { "_index" : "ik1", "_type" : "doc", "_id" : "1", "_score" : 0.2876821, "_source" : { "content" : "今天是个好日子" } }, { "_index" : "ik1", "_type" : "doc", "_id" : "3", "_score" : 0.2876821, "_source" : { "content" : "我今天不活了" } } ] } }
-
ik之短语前缀查询
GET ik1/_search { "query": { "match_phrase_prefix": { "content": { "query": "今天好日子", "slop": 2 } } } } # 结果 { "took" : 1, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 2, "max_score" : 0.2876821, "hits" : [ { "_index" : "ik1", "_type" : "doc", "_id" : "1", "_score" : 0.2876821, "_source" : { "content" : "今天是个好日子" } }, { "_index" : "ik1", "_type" : "doc", "_id" : "3", "_score" : 0.2876821, "_source" : { "content" : "我今天不活了" } } ] } }
摘自: # ES 分词器
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/31698.html