前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES中文检索须知:分词器与中文分词器

ES中文检索须知:分词器与中文分词器

作者头像
Steve Wang
发布2024-04-22 08:51:40
3100
发布2024-04-22 08:51:40
举报
文章被收录于专栏:从流域到海域从流域到海域

ElasticSearch (es)的核心功能即为数据检索,常被用来构建内部搜索引擎或者实现大规模数据在推荐召回流程中的粗排过程

ES分词

分词即为将doc通过Analyzer切分成一个一个Term(关键字),es分词在索引构建数据检索时均有体现:

  1. 构建倒排索引时每一个term都指向包含这个term的多个doc。
  2. 搜索时需要通过分词将查询语句切分成一个一个term进行检索。

简单来说,ES的数据检索原理包含分词、基于分词结果计算相似度得分按得分从高到低排序返回指定长度下的排序结果三个主要步骤,本文主要关注中文场景下的分词过程。

#mermaid-svg-SehEmMXBix40FQW4 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SehEmMXBix40FQW4 .error-icon{fill:#552222;}#mermaid-svg-SehEmMXBix40FQW4 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-SehEmMXBix40FQW4 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-SehEmMXBix40FQW4 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-SehEmMXBix40FQW4 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-SehEmMXBix40FQW4 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-SehEmMXBix40FQW4 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-SehEmMXBix40FQW4 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-SehEmMXBix40FQW4 .marker.cross{stroke:#333333;}#mermaid-svg-SehEmMXBix40FQW4 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-SehEmMXBix40FQW4 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-SehEmMXBix40FQW4 .cluster-label text{fill:#333;}#mermaid-svg-SehEmMXBix40FQW4 .cluster-label span{color:#333;}#mermaid-svg-SehEmMXBix40FQW4 .label text,#mermaid-svg-SehEmMXBix40FQW4 span{fill:#333;color:#333;}#mermaid-svg-SehEmMXBix40FQW4 .node rect,#mermaid-svg-SehEmMXBix40FQW4 .node circle,#mermaid-svg-SehEmMXBix40FQW4 .node ellipse,#mermaid-svg-SehEmMXBix40FQW4 .node polygon,#mermaid-svg-SehEmMXBix40FQW4 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-SehEmMXBix40FQW4 .node .label{text-align:center;}#mermaid-svg-SehEmMXBix40FQW4 .node.clickable{cursor:pointer;}#mermaid-svg-SehEmMXBix40FQW4 .arrowheadPath{fill:#333333;}#mermaid-svg-SehEmMXBix40FQW4 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-SehEmMXBix40FQW4 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-SehEmMXBix40FQW4 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-SehEmMXBix40FQW4 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-SehEmMXBix40FQW4 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-SehEmMXBix40FQW4 .cluster text{fill:#333;}#mermaid-svg-SehEmMXBix40FQW4 .cluster span{color:#333;}#mermaid-svg-SehEmMXBix40FQW4 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-SehEmMXBix40FQW4 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}

query

分词

基于分词结果计算相似度得分

按得分从高到低返回指定长度下的排序结果

ES内置分词器

ES官方内置了一些常用的分词器(Analyzer,分词器在NLP中称为tokenzier,es使用analyzer的原因是除了分词之外后续还会进行一些文本分析的动作):

the quick brown-foxes jumped over the lazy dog’s bone. 该英语句子是一个经典的自然语言处理例句,它是全字母句,包含了全部26个字母。

分词器

作用

分词对象

结果示例

Standard Analyzer

标准分词器,也是默认的分词器,基于Unicode文本分割算法。默认分词器适用于英语,并且对大多数语言都有效

The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.

[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog’s, bone ]

Simple Analyzer

简单分词器,基于非字母字符进行分词,单词会转为小写字母,非字母字符如数字、空格、连字符和撇号将被丢弃

The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.

[ the, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

Whitespace Analyzer

空格分词器,按空格进行切分

The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.

[ The, 2, QUICK, Brown-Foxes, jumped, over, the, lazy, dog’s, bone. ]

Stop Analyzer

在简单分词器的基础上增加了停用词的功能

The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.

[ quick, brown, foxes, jumped, over, lazy, dog, s, bone ]

Keyword Analyzer

关键词分词器,将整个输入句子认为是关键字直接返回,不分词

The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.

[The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.]

Pattern Analyzer

patter分词器,patter指的是正则的pattern,利用正则表达式对文本进行切分,支持停用词

The 2 QUICK Brown-Foxes jumped over the lazy dog’s bone.

[ the, 2, quick, brown, foxes, jumped, over, the, lazy, dog, s, bone ]

Language Analyer

针对特定语言的分析器

-

-

Fingerprint Analyzer

指纹分词器,是一种专业分词器,可通过创建指纹来进行重复检测的

-

-

Custom Analyzer

如果以上没有符合需求的分词器,es也允许通过添加插件的方式添加自定义分词器

-

-

注:停用词,英文称为Stop Words,是在信息检索和自然语言处理过程中,为了节省存储空间和提高搜索效率,系统会自动过滤掉某些出现频率高但又不具有实际意义的字或词。这些被过滤的词语通常包括语气词、连词、介词等,例如汉语中的“的”、“以及”、“甚至”、“吧”,以及英语中的“the”、“a”、“also”等。

在中文场景下,有一个踩坑点是,默认的Standard Analyzer会按照一个汉字一个汉字切分的方式来分词,这样构建的索引缺乏语义信息,导致检索效果不佳,因而中文场景下需要使用专门的分词器。

中文分词器

常用的中文分词器有两个比较主流的:ik analyzersmartcn(Smart Chinese Analyzer)

ik analyzer

ik analyzer 是一个基于开源项目IK Analysis进行开发的第三方的中文分词器。IK Analyzer提供了细粒度的中文分词能力,支持词库扩展、自定义词典、停用词过滤、同义词扩展等功能,可以根据具体需求进行匹配和定制。适用于更精确的分词和分析需求。

ik analyzer支持两种分词方法,可以在构建索引时指定:

  1. ik_max_word:将需要分词的文本做最小粒度的拆分,尽可能分出更多的词
  2. ik_smart_word:将需要分词的文本做最大粒度的拆分,尽可能分出更少的词

git上下载插件,存到es插件目录,重启es服务即可使用:

代码语言:javascript
复制
wget https://github.com/medcl/elasticsearch-analysis-ik/releases
smartcn

smartcn是es内置的中文分词器,使用机器学习算法进行分词,同时适用于简体中文和繁体中文,具有较高的分词准确率和召回率,适用于大多数中文文本检索场景。因为是内置的,所以优点是无需额外配置即可使用。

参考文献
  1. ElasticSearch 中的中文分词器以及索引基本操作详解
  2. 【9种】ElasticSearch分词器详解,一文get!!!| 博学谷狂野架构师
  3. ELK(六)分词器
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ES分词
  • ES内置分词器
  • 中文分词器
    • ik analyzer
      • smartcn
      • 参考文献
      相关产品与服务
      NLP 服务
      NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档