中文分词和搜索引擎

Elasticsearch专栏-5.es基本用法-分词查询 es 分词查询 阅读详情

作者:Winter 工程师

搜索引擎,上网的人基本上都不陌生了,CNNIC的第17次《互联网调查报告》显示,使用搜索引擎服务的网民,仅次于电子邮件。中文分词,估计了解的人并不多,毕竟太技术,太底层。但中文分词是中文搜索引擎系统中非常重要的模块,这里之所以强调是中文搜索引擎,是针对英文搜索引擎来讲,因为对于英文来说,空格代表词和词之间的分隔,也就不存在分词问题。和中文搜索引擎类似还有日文、韩文、泰文搜索引擎等,都需要处理分词问题。

为什么需要中文分词

目前的搜索引擎,大多是基于一种称为倒排索引的结构[1]。以什么做为索引的Key值,直接影响到整个搜索引擎的准确度、召回率[2]、速度。我们先看看不使用中文分词的情况。

如果不使用中文分词,可以采用单个汉字索引方式。例如,雅虎,先索引'雅'字,然后再索引'虎'字。同样,对于一篇文章,先把所有的汉字都单独索引一次,并记录他们的位置。搜索过程中,也是先找'雅'字的所有文档,再找'虎'字的所有文档,然后做交叉'与'运算,即包含这两个字,而且位置连续的文档才会做为符合要求的结果。这种方式是最基本的索引方式,现在有些小引擎中还在使用。但这里存在一个很有挑战性的问题:总共的常用汉字是3000多个,我们每次查询过程中,进行'与'操作的计算量会相当大,对于大数据量搜索引擎来说(超过10亿的文档),每天上亿次查询,这样的索引结构,无疑是对硬件和算法的极大挑战。

考虑到速度问题,如果不使用分词,还有另外一种选择:n元组合索引方式,2元/3元等。拿2元来说,中国人,先索引'中国', 再索引'国人'。同样,对于一篇文章,以2为单位,把所有相邻的汉字都索引起来,并记录他们的位置。搜索过程中,也是先找包含'中国'的所有文档,再找'国人'的所有文档,然后做交叉'与'运算,即包含这两个单元,而且位置连续的文档才会做为符合要求的结果。这样以两个字做为索引单元,可以大大减少在搜索过程中的计算量。

以上两种方式,都可以不需要分词,也能实现搜索引擎的索引和搜索。但是这里存在一个不可忽视的问题:准确度。一个很常见的例子:和服,如果按照上面两种方式,都会查到包含'主板 和服 务器'的文档; 北大 也会得到'东 北大 学'。对于大数据量的搜索引擎来说,每个搜索次都会有成千上万个结果,用户已经很挑选他真正想要的文章,如果这里还要增加许多错误,估计用户体验会极差。这时候,我们需要中文分词。

词,是中文语言中最小的语意单位。以词为单位做为搜索引擎的索引的Key值,会大大提高搜索引擎结果的准确性,同时保证了搜索过程中计算量小。其实还有一个优点,以词为单位的索引,索引库会比上两种方式小很多。很明显:如果以 中国人 做为一个词,那么搜索的时候,不需要任何'与'运算,索引的时候记录也会减少。关于搜索过程描述参看中文搜索引擎技术揭密:系统架构

参考
1. The Anatomy of a Large-Scale Hypertextual Web Search Engine
2. 召回率: recall. 即得到的正确结果占所有应该得到的正确结果的比例。如:包含'雅虎'的正确的网页应该有500个,但搜索得到了600个结果,其中有400个是正确的,还有200个是错误的。那么准确度是:400/600=66.67%, 召回率是:400/500=80%.


中文分词的算法
中文分词技术的研究,已经有几十年的历史了,在20世纪80年代,我国就有人开始研究如何用计算机来自动分词。如何让机器去识别语言中最小的语意单位,不是一件很容易的事情。

如何进行分词?对于程序员来说,最容易想到的办法是,用一个大词典,把所有的词都存入词典中,扫描输入的文本,查找所有可能的词,然后看哪个词可以做为输出。例如:


输入文本: 我是学生
词: 我/是/学生


其实这样做了以后,可以解决60%的问题。总结起来,分词的算法分为:
1. 基于字符串匹配的分词方法
2. 基于理解的分词方法
3. 基于统计的分词方法

关于这3种算法的详细介绍,可以查看中文分词技术,我这里想介绍的是,如何处理新词。

新词,术语是"未登录词",就是那些没有收入到词典里面的词。新词主要包括:人名、地名、机构名、热点新名词等。例如:2003年之前,没有人知道"非典"。"非典"刚出现的时候,这就是新词。还有"超女", "三个代表","芙蓉姐姐"。识别新词的能力是评估一个分词系统的重要指标。在国际上每年进行的分词大赛中,识别新词的比赛也单独提出。2006年SIGHAN的分词大赛中,就增添了对于机构名识别的比赛。

如何识别新词成为最近几年分词技术研究的重点。总结起来,无非分成两种:
1. 基于规则的方法。
2. 基于统计、机器学习。

拿人名识别为例。你不可能把所有的人名都放入词典中,这决定了人名注定会是新词。从人名构造来说,很有规律:姓+名。张王刘李陈、天下一半人。也就是说可能有一半的人,是这五个姓。名也有一定规律:建华/建国/志强.....等有许多经常用于名字中的汉字;对于地名识别也可以找出很多规则,省/县/村/镇/湾/河等,都是很常用的后缀,如果他们出现,之前出现地名的可能性比较大。如果把这些规律转化成计算机能识别的算法,就是基于规则的算法。这种基于规则的算法简单有效,而且发现规则可很方便加入。

规则总会有例外,规则过多以后,如何去权衡这些规则,会是十分头疼的问题。人们试着告诉计算机目标,让计算机自己去尝试各种方法组合这些规则并得到最优参数,这就机器学习。随着Machine Learning(机器学习)技术的不断进步,其应用范围也越来越广,中文分词算法也从中受益。ANN(人工神经网络), 最大熵模型, HMM(隐马尔可夫模型)等算法都在新词识别中有应用。通过机器学习识别新词的原理并不复杂。一般都是先定义一些特征,然后利用训练语料进行学习,建立模型。还是以人名识别为例,可以定义姓名前面的字、姓、名、姓名后面的字做为特征,通过利用标注好姓名的语料库进行学习训练。

机器学习识别新词的好处在于自动寻找一些识别新词的特征,其准确度和召回率都能达到比较高的水平。但机器学习算法需要有足够多的训练语料,人工准备准确的大规模的训练语料也会十分困难。另外,机器学习算法一般速度会比较慢,优化速度,使之用于海量数据处理,也是使用机器学习的一个关键点。


中文分词和搜索引擎
中文分词除了在索引结构上影响搜索引擎以外,还会如何影响搜索引擎?
除了搜索引擎的索引过程需要用到分词以外,所有的搜索之前也需要用到分词。有些人误认为"短语搜索"(即两端加上引号的搜索方式,搜索引擎基本都支持这种方式,查看搜索引擎帮助)是直接拿字符串去匹配不用分词,因为结果看上去好像是字符串匹配的结果。其实不然,短语搜索同样需要用分词,只不过在结果中需要位置连续等严格限制。当位置连续时,在显示摘要的时候,会让你感觉只是用字符串匹配。

除了在搜索前端后端都需要用到分词以外,搜索引擎还有一个原则:前端后端分词结果应该一致。这意思是说,如果你在索引时没有识别出"文德"的人名,你在搜索时最好也别识别出来,这样可以按照两个单字的方式查找,或许有正确结果,否则会查不到结果。反之也一样。由于索引过程中,分词输入的一篇文章,有大量的上下文信息,但在搜索时,用户输入的可能只有几个字,很多上下文信息不在存在。如果过多使用统计或机器学习,很容易导致搜索引擎的前端后端分词不一致的问题。这也是搜索引擎使用分词和其他系统,如机器翻译,使用分词不一样的地方。

如果你看过搜索引擎的query log(即所有搜索词的记录),你会发现新词很多,会占30%,或者更多。对这些新词的识别会直接影响搜索结果的准确性,或者说相关性。搜索结果的相关性决定于排序算法,排序算法一部分依赖于网页的质量和权威性,另一方面依赖于分词结果的准确性。分词结果准确,我们会方便的计算词在文章中的重要程度。"超女"做为一个词在文章中的权重,和"超"、"女"两个字在文章中的权重计算方法会很不一样,这样就会直接影响相关性的计算。

中文分词对于搜索引擎的影响,还表现在对于用户输入词意图的识别。识别用户的输入词是否是人名、网站名、软件名还是其他通用词汇,能够判断用户的意图,从而提供用户想要的结果。

其实中文分词是所有中文处理的基础,因此如果有一个好的分词系统,会对改进搜索引擎的相关性有很大的帮助。但最终展现给用户的是网页结果而不是分词结果,提高网页的相关性,有100%准确的分词也是不够。如何在准确的中文分词基础上,做更多的分析和挖掘,理解用户的意图,满足用户的需要,是每个搜索引擎公司都在努力做的事情。

雅虎的中文分词
YST 是Yahoo Search Technology的缩写。Yahoo收购inktomi公司后,又收购了几家做搜索的公司,综合打造出自己的搜索引擎技术。最开始,雅虎没有分词技术(segmentation), 中文、日文、韩文....等都是使用的第三方的产品。后来,随着雅虎正式进入中文搜索市场,雅虎开始加强对中文分词的研究,现在YST中使用的中文分词系统已经是雅虎中国和雅虎美国工程师共同开发的版本--YWS(Yahoo Word Segmenter),而且现在还在持续不断的改进。YWS 在对于人名、地名、机构名等新词识别方面有很不错的准确度,对于query的分析提供了很大帮助。

然而,对于搜索引擎厂商来说,没有最好的分词,只有最合适的分词。如何改进分词系统,配合以合适的索引结构,最终不断提高用户的满意度,这是一个长期的课题。

第七章-分布式搜索引擎-ES:全文查询、分词查询、精确查询、地理坐标查询、组合查询(bool、funtion_score)以及RestApi 111 阅读详情

相关推荐

Blender - Shrinkwrap - 更方便的制作贴合模型的表面来建模

Shrinkwrap 修改器 使用 Blender 想要快速建模可以贴合现有模型表面的效果:衣服、皮肤、等效果,可以使用 Shrinkwrap 修改器,这个修改器的名字其实按照英文上的理解,翻译为:收缩的包裹效果 应用 如这块铁皮,它要贴合机身弯曲的效果,可以先建好一个铁皮,再 Shrinkwrap 到一个指定的网格上 留意的参数 Target 要贴合的对象(目前我已知是可以贴合到网格对象上,实在是方便) VertexGroup 顶点组,和之前讲到过的,顶点组可以组设顶点的权重,意思这个可.

Jave.Lin 的学习笔记 6070

MySQL也可以实现分词搜索(FULLTEXT)

MySQL使用Ngram解析器实现分词搜索

weixin_44001317的博客 6740

affymatrix探针转换 | GPL5175探针对应的基因转换

一般情况下,有一些比较成熟的对应平台的注释数据集的R包。但是这个注释平台,我在Bioconductor上找了一圈都没有找到。只能通过最原始也最可靠的方法,从GEO数据集上去下载这部分的注释文件。以下展示全过程。 我要检查的数据平台是:GPL5157。 数据集的注释集链接为:https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GPL5175 这个注释数据集比较难弄的地方在于,它的基因集注释的不太好。没有比较直接的可供提取的genesample的信息;在ge.

weixin_40640700的博客 7124

基于ES之分词搜索详解

目录(1)IK分词插件安装与验证(2)IK自定义词库扩展配置(3)创建ES索引和Mapping (1)IK分词插件安装与验证 分词器地址: https://github.com/medcl/elasticsearch-analysis-ik 1.IK analyzer插件包的下载地址:https://elasticsearch.cn/download/ 2.插件安装过程 进入到/opt/modules/elasticsearch/plugins目录下 创建ik目录mkdir ik 将下载好的插件解压到

蔡政洁的博客 9109

测绘无人船避坑指南:云卓H12Pro遥控器接海康摄像头,从网络设置到RTSP流延迟优化全流程

本文详细解析了测绘无人船视频子系统的优化方案,重点介绍海康威视摄像头与云卓H12Pro遥控器的深度适配流程。从网络设置到RTSP流延迟优化,提供了一套经过实测的低延迟(<200ms)解决方案,适用于复杂水域环境下的测绘任务。

weixin_30415113的博客 626

奇安信 2025 年护网蓝队初选笔试题(附答案解析)

熬夜为大家整理了 奇安信 2025 年护网蓝队初选笔试题,(关注我我会持续更新)涵盖 SQL 注入、Web 安全、渗透测试、二进制安全 等核心知识点,并附上详细答案解析,助力大家高效备考!12.下列关于虚表指针描述正确的是(1.5分)✅ B. 虚表指针存储的是虚表的首地址❌ A. 任何类对象都存在虚表指针(仅含虚函数的类有)❌ C. 虚表指针位于对象内存空间的起始处(由编译器决定)❌ D. 虚表指针是否存在不影响对象所占内存空间的大小(存在时会增加指针大小)📌 解析:虚表指针(vptr)用于实现多态,指向

Aishenyanying33的博客 4696

ES分词查询

Solr使用zookeeper进行分布式管理,而ES自身带有分布式协调管理Solr支持更多格式数据,而ES仅支持jsonSolr官方提供功能更多,而ES本身更注重核心功能,高级功能由第三方插件提供ES在处理实时搜索应用时效高于Solrtoken:分词后的单词,小写start_offset:在短语中的开始位置end_offset:短语中的结束位置position:单词在短语中的位置,即第几个单词。

Yu_Mariam的博客 2484

QGIS基于快鸟(QuickBird)影像统计小麦种植面积

​01数据情况 本次选用某地4月份快鸟(QuickBird)影像为例,使用QGIS演示提取小麦播种情况,并按照200米*200米分区计算种植面积的过程。 注:本文对应的操作视频作为今天第二篇推送同时发布,习惯看视频的朋友可以点击观看。 附数据压缩包: 链接:https://pan.baidu.com/s/1JVUS8uAOR61RxC1n9Or9_w 提取码:qgis 含快鸟影像QB_subset.tif和200*200米分区矢量图层200Mgrid.shp。 ...

QGISClass的博客 1979

JAVA ik es_Elasticsearch入门和查询语法分析(ik中文分词)

全文搜索现在已经是很常见的功能了,当然你也可以用mysql加Sphinx实现。但开源的Elasticsearch(简称ES)目前是全文搜索引擎的首选。目前像GitHub、维基百科都使用的是ES,它可以快速的存储,搜索和分析数据。一、安装与启动ES的运行需要依赖java环境,可以在命令行运行java --version。如果出现说明已经安装了,否则你就需要安装下java环境。然后我们就可以开始装...

weixin_30882521的博客 1210

TSP、MTSP问题遗传算法详细解读及python实现

写在前面 遗传算法是一种求解NPC问题的启发式算法,属于仿生进化算法族的一员。仿生进化算法是受生物行为启发而发明的智能优化算法,往往是人们发现某种生物的个体虽然行为较为简单,但生物集群通过某种原理却能表现出智能行为。于是不同的人研究不同的生物行为原理,受到启发而发明出新的仿生进化算法。比如免疫优化算法,蚁群算法,模拟退火算法等,这些算法以后也会简单介绍。 本文的主题是遗传算法,该算法也是受到生物行为启发。物竞天择,适者生存,优胜劣汰,是该优化算法的核心思想。笔者在业务中需要用到遗传算法求解TSP问题,但是网

weixin_47675950的博客 9306

【零基础入门unity游戏开发——unity通用篇14】unity特性相关的知识(基于unity6开发介绍)

unity特性相关的知识(基于unity6开发介绍)

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1204

es中文分词插件mac_elasticsearch 中文分词、插件的安装和使用(一)

1. 安装elasticsearch、kibana、x-pack#安装elasticsearchwget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.3.tar.gztar -zxvf elasticsearch-5.5.3.tar.gz./bin/elasticsearch -d #启动elast...

weixin_39764603的博客 350

Sigrity Power Tree如何进行直流压降仿真分析操作指导

Sigrity Power Tree模式可以用于前仿真,在没有layout文件的情况下对电源进行直流压降仿真分析,用于评估原理图设计以及器件选型是否合理。Model:设置为Equal Current,设置为等电源模型,意思该负载每个电源pin都是等电流的。Current:设置每个负载的电流,U30为3A,U3-U6各为1A。Nominal Current:设置能够承载的最大电流,设置为10A。Upper/ Lower Tol:设置为压降范围为5%Output Current:设置输出电流为10A。

weixin_54787054的博客 732

ElasticSearch 6.5.4 安装中文分词器 IK和pinyiin

参考文章:ElasticSearch 6.5.4 安装中文分词器 IK和pinyiin ES的常用的中文分词有基于汉字的ik和基于拼音的pinyin https://github.com/medcl/elasticsearch-analysis-ik/releases https://github.com/medcl/elasticsearch-analysis-pinyin 安装的时候...

justlpf的专栏 968

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Elasticsearch中文分词之Thulac和IK

一、背景 Elasticsearch(文中简称ES)通过Analyzer进行分词,可使用ES内置分词器,也可以自定义扩展。 Analyzer是ES中专门处理分词的组件,它由三部分组成: Character Filters:针对原始文本处理。 Tokenizer:按照规则切分为单词。 Token Filter:将切分的单词进行加工,转为小写,删除stopwords,增加同义词等。 图一:分词示例(应用 icu_analyzer 插件分词) ES有较多内置分词器,但是针对中文分词并不友好,中文分

zDREAM_UTOPIA的专栏 1306

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

ElasticSearch基础2之倒排索引原理和中文分词器es-ik

正向索引与倒排索引 正向索引 正排表是以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。 这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护;因为索引是基于文档建立的,若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档...

xiaobo5264063的博客 603

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Elasticsearch 自学笔记二】IK 中文分词器和搜索语法

文章目录IK 中文分词器测试自定义词典ES 搜索语法keyword 和 text 的区别测试过滤搜索结果结果分页与排序逻辑查询区间查询结果高亮 ES 作为一个搜索引擎,拥有高效且功能齐全搜索算法,这一期我们来了解一下其细节。 IK 中文分词器 ES 并不支持中文词语的切割,当使用中文时,我们输入的词汇会被切割成一个个单子,而不能组成我们想要的词语。 幸运的是,ES 人性化的支持各种插件的安装,通过安装 IK 分词器,我们就可以解决这个问题。 在 Docker 中,我们需要先进入容器,不用 Docker 可

Koorye今天自学了吗 944

ES101系列06 | 中文分词和Suggester

本篇文章主要讲解中文分词和 ElasticSearch 中的重要 API —— Suggester,同时也会提到 Search Template、Index Alias 和 Function Score Query 等高级搜索功能。

Lance_Yuan24的博客 1001

使用Docker快速安装部署ES和Kibana并配置IK中文分词器以及自定义分词拓展词库

使用Docker快速安装部署ES和Kibana并配置IK中文分词器以及自定义分词拓展词库

qq_41568648的博客 725

es拼音分词 大帅哥_elasticsearch实现中文分词和拼音分词混合查询+CompletionSuggestion...

引言之前已经介绍了如何搭建elasticsearch服务端和简单的索引创建,和中文分词的支持。今天我们来说一说如何实现elasticsearch同时实现中文分词和pinyin分词。并且实现类似百度搜索栏的搜索建议的功能。混合查询实现混合查询有很多方式,这里介绍我认为是一个偷懒的方法,就是为你要拼音搜索的字段提供两个额外的字段,一个是全拼字段,一个是首字母缩写字段。我这里用的是官网的Employee...

weixin_29015483的博客 614

elasticsearch 中文分词、插件的安装和使用(一)

1. 安装elasticsearch、kibana、x-pack #安装elasticsearch wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.3.tar.gz tar -zxvf elasticsearch-5.5.3.tar.gz ./bin/elasticsearch -d ...

aibaokan0043的博客 212

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

目录 概述 环境准备 认识中文分词器 常用的中文分词器 IK Analyzer hanlp中文分词器 彩蛋 概述         上一篇博文记录了elasticsearch插件安装和管理, 在地大物博的祖国使用es,不得不考虑中文分词器,es内置的分词器对中文分词的支持用惨不忍睹来形容不为过,看这篇博文之前,建议先看一下博文elasticsearch...

java_龙 1万+
上一篇: 一个基于搜索的中文分词方法( A Search-based Chinese Word Segmentation Method)
下一篇: 百度搜索引擎详解
jackfirst86
博客等级 码龄18年 28粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值