文档章节

ElasticSearch与ICTCLAS中文分词系统

一配
 一配
发布于 2017/05/12 15:45
字数 1395
阅读 118
收藏 0

1. ElasticSearch Smart Chinese Analysis插件

    今天在学习ElasticSearch插件时,其中包含了Smart Chinese Analysis插件,这个插件集成了Lucene的Smart Chinese analysis模块到ES中,可以对中文或中英混合text来分析[1]。

    再搜索了Lucene的Smart Chinese analysis模块,发现是2009年5月9日,Gao xiaoping贡献给Apache Lucene社区的智能中文分词模块imdict-chinese-analyzer, 当时的Lucene是2.4.1版本[2,3]。在[3]中,有对imdict-chinese-analyzer的简要描述。

2.  imdict智能词典所采用的智能中文分词程序

    imdict-chinese-analyzer 是 imdict智能词典 的智能中文分词模块,算法基于隐马尔科夫模型(Hidden Markov Model, HMM),是中国科学院计算技术研究所的ictclas中文分词程序的重新实现(基于Java),可以直接为lucene搜索引擎提供*简体中文*分词支持。

    Apache Lucene的中文分词

    Apache Lucene是java实现的一个高效的文本搜索引擎软件,它适用于几乎所有要求全文检索的应用项目,尤其是跨平台应用。对英文的处理已经非常完善,但在中文方面仍然非常欠缺,目前lucene的contribution中,中日韩语言只有一个分析器(cjk analyzer),还是按中日韩文字来逐个切分的,无论从索引效率还是搜索准确度上都很难符合要求。

    为什么需要智能分词

    中文与西方语言最大的区别就在于语句的词汇之间没有明显的分词界限,但是计算机自然语言处理是按词汇来进行分析的,因此中文分词的效果直接影响中文检索和自然语言处理的准确性。例如: “我购买了道具和服装”,如果采用比较简单的正向最大匹配算法,分词结果是“我 购买 了 道具 和服 装”,明显偏离了原句的意思;而采用基于HMM的智能分词模型,能够综合分析句子的结构、各个词的频率以及各个词汇之间的跳转频率,从而能产生最优化的分词结果:“我 购买 了 道具 和 服装”。

    imdict-chinese-analyzer的特性

    1. 完全Unicode支持

    分词核心模块完全采用Unicode编码,无须各种汉字编码的转换,极大的提升了分词的效率。

    2. 提升搜索效率

    根据imdict智能词典的实践,在有智能中文分词的情况下,索引文件比没有中文分词的索引文件小1/3

    3. 提高搜索准确度

    imdict-chinese-analyzer采用了HHMM分词模型,极大的提高了分词的准确率,在此基础上的搜索,比对汉字逐个切分要准确得多!

    4. 更高效的数据结构

    为了提高效率,针对常用中文检索的应用场景,imdict-chinese-analyzer对一些不必要的功能进行了删减,例如词性标注、人名识别、时间识别等等。另外还修改了算法的数据结构,在内存占用量缩减到1/3的情况下把效率提升了数倍。

    三种智能分词软件效率对比

    ICTCLAS 1.0是中科院张华平博士开发的一款基于HHMM的智能分词软件,2009年5月时版本为3.0(商业版,C++实现),而imdict-chinese-analyzer 和 ictclas4j 都是基于同一模型开发的Java版分词软件,三者的分词效率对比如下图:

  |                            | ictclas4j      | imdict-chinese-analyzer | ICTCLAS 3.0 |

                               |:--------------|:----------------------------|:----------------|

 | 分词速度(字节/秒) | 13.86       | 483.64                        | 678.15        |

| 分词速度(汉字/秒) | 7439      | 259517                        | 363888      |

测试数据采用中文文件大小为62390KB,内容长度为33477693字符,各软件独立分词并将分开的词写到文件里。

测试环境为:酷睿E7200双核,内存2G,JDK参数为:"-Xms512m -Xmx1024m "

由此对比可以看出, imdict-chinese-analyzer的分词效率与C++实现的ICTCLAS 3.0的分词效率在同一个数量级,是 ictclas4j 的 36 倍!

3. Lucene SmartChineseAnalyzer

    imdict-chinese-analyzer在Apache Lucene中被重新命名为SmartChineseAnalyzer。其源代码中有以下注释:

    SmartChineseAnalyzer 是一个智能中文分词模块, 能够利用概率对汉语句子进行最优切分, 并内嵌英文tokenizer,能有效处理中英文混合的文本内容。

    它的原理基于自然语言处理领域的隐马尔科夫模型(HMM), 利用大量语料库的训练来统计汉语词汇的词频和跳转概率, 从而根据这些统计结果对整个汉语句子计算最似然(likelihood)的切分。

    因为智能分词需要词典来保存词汇的统计值,SmartChineseAnalyzer的运行需要指定词典位置,如何指定词典位置请参考 org.apache.lucene.analysis.cn.smart.AnalyzerProfile

    SmartChineseAnalyzer的算法和语料库词典来自于ictclas(http://ictclas.nlpir.org/downloads)

    @see org.apache.lucene.analysis.cn.smart.AnalyzerProfile

4. NLPIR汉语分词系统与张华平博士

     NLPIR汉语分词系统,又名ICTCLAS,当前最新版本是2017。NLP表示自然语言处理,IR表示信息检索,NLPIR.org是自然语言处理与信息检索共享平台。

     张华平,NLPIR(ICTCLAS)创始人与开发者,2009年担任北京理工大学大数据搜索挖掘实验室主任,博士,副教授。其微博见[5]

 

参考资料:

[1] Smart Chinese Analysis plugin, https://www.elastic.co/guide/en/elasticsearch/plugins/master/analysis-smartcn.html

[2] contrib intelligent Analyzer for Chinese, https://issues.apache.org/jira/browse/LUCENE-1629

[3] Source code of imdict-chinese-analyzer, https://code.google.com/archive/p/imdict-chinese-analyzer/

[4] NLPIR/ICTCLAS汉语分词系统, http://ictclas.nlpir.org/downloads

[5] 张华平博士微博, http://weibo.com/drkevinzhang?refer_flag=1005055013_&is_hot=1

© 著作权归作者所有

一配
粉丝 34
博文 140
码字总数 94295
作品 0
西城
私信 提问
Elasticsearch 安装和配置

安装 elasticsearch 上传 elasticsearch-1.7.3.tar.gz 到 Linux环境 解压缩至 /usr/local 目录,并启动 elasticsearch 启动 elasticsearch 浏览器访问 http://192.168.81.132:9200/ ,出现如下......

o135248
2018/04/16
0
0
Elasticsearch中文分词研究

一、ES分析器简介 ES是一个实时搜索与数据分析引擎,为了完成搜索功能,必须对原始数据进行分析、拆解,以建立索引,从而实现搜索功能; ES对数据分析、拆解过程如下: 首先,将一块文本分成...

zhaipengfei1231
2018/04/18
0
0
Elasticsearch 6.5.4集群安装IK中文分词插件

中文分词就是将一句话的语义,分成一个个的词,之所以要分词是因为需要保证搜索的准确度。Elaticsearch默认对于英文分词的支持较好,毕竟是老外开发的,并且英文本身的语言特性也利于分词,只...

北极南哥
01/02
0
0
使用logstash+elasticsearch+kibana快速搭建日志平台

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接口的调用次数、执行时间...

eddy_linux
2015/11/13
0
0
【ElasticSearch】---SpringBoot整合ElasticSearch

SpringBoot整合ElasticSearch 一、基于spring-boot-starter-data-elasticsearch整合 开发环境:springboot版本:2.0.1,elasticSearch-5.6.8.jar版本:5.6.8,服务器部署ElasticSearch版本:......

雨点的名字
2018/08/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二进制位操作

单片机,或者一些模块的设置操作,都是由一个字节数据来完成,每位各有定义。就需进行位操作来组合需要的数字结果。 以JavaScript为例,编写位操作。 我们期望得到这样一个二进制数:0101101...

format
33分钟前
3
0
聊聊中国的通信行业:从“七国八制”到“中华”脊梁

本期文章和大家一起来聊一聊我曾经从事过的通信行业吧。最近各方面信息的泛滥,包括和华为的同学聊天,自己确实也感慨颇多。想想我自己本科主修通信工程,研究生再修信息与通信工程,从本科开...

CodeSheep
今天
7
0
MDK:ARM M451M:exceed the range of code meory, continue to erase or not?

问题: 代码空间超限 几天前就遇到:exceed the range of code meory, continue to erase or not? 如下所示: 解决过程 开始以为中MDK软件的128KB限制,如是就不能生成HEX文件,应该链接时有提...

SamXIAO
今天
1
1
OSChina 周六乱弹 —— 因违反《中华人民共和国治安管理处罚法》第四十四条之规定

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :#今日歌曲推荐# 惊艳分享谷微的单曲《安守本份》(@网易云音乐) 《安守本份》- 谷微 手机党少年们想听歌,请使劲儿戳(这里) ...

小小编辑
今天
595
12
Angular 英雄编辑器

应用程序现在有了基本的标题。 接下来你要创建一个新的组件来显示英雄信息并且把这个组件放到应用程序的外壳里去。 创建英雄组件 使用 Angular CLI 创建一个名为 heroes 的新组件。 ng gener...

honeymoose
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部