ES如何提高召回率之【词干提取】

召回率Recall原理与代码实例讲解 召回率Recall原理与代码实例讲解 1.背景介绍 在信息检索、机器学习和数据挖掘等领域中,召回率(Recall)是一个非常重要的评估指标。它用于衡量模型或系统在检索相关项目时的有效性和完整性。无论是在搜索引擎、推荐系统还是分类任务中,召回率都扮演着至关重要的角色。本文将深入探讨召回率的 阅读详情

想要提高召回率就需要尽可能匹配相关的文档,其中一个办法就是在索引阶段对词语分析(分词器)的时候提取词干,搜索的时候也取词干。

不取词干

es默认使用的是标准的分词器,是不会取词干的。
但是标准分词器是包含小写转换分词过滤器的,也是可以提高召回率的。

{
    "analyzer": "standard",
    "text": "I liked apple"
}
{
    "tokens": [
        {
            "token": "i",
            "start_offset": 0,
            "end_offset": 1,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "liked",
            "start_offset": 2,
            "end_offset": 7,
            "type": "<ALPHANUM>",
            "position": 1
        },
        {
            "token": "apple",
            "start_offset": 8,
            "end_offset": 13,
            "type": "<ALPHANUM>",
            "position": 2
        }
    ]
}
  • 【liked】被分词器切割出来了

那我们使用【liked】进行搜索是能搜索出来的,但是如果我们使用【like】是无法搜索出来的。

那为了提高召回率,我们需要对【liked】二次提取,提取出词干【like】,那么搜索的时候,无论是使用like、liked、liking都能搜索出来了

取词干

使用能取词干的分词器,比如english

{
    "analyzer": "english",
    "text": "I liked apple"
}
{
    "tokens": [
        {
            "token": "i",
            "start_offset": 0,
            "end_offset": 1,
            "type": "<ALPHANUM>",
            "position": 0
        },
        {
            "token": "like",
            "start_offset": 2,
            "end_offset": 7,
            "type": "<ALPHANUM>",
            "position": 1
        },
        {
            "token": "appl",
            "start_offset": 8,
            "end_offset": 13,
            "type": "<ALPHANUM>",
            "position": 2
        }
    ]
}
  • 【liked】提取出来的词干是【like】

取词干带来的准确率问题

问题描述

如果用户就是想根据时态(过去式、过去分词)搜索,返回的数据会和用户预料的一样么?
比如:现在有两条数据

{"id":1,"content":"I like apple"}
{"id":2,"content":"I liked apple"}

现在搜索词是【liked】,那么两条数据都会被搜出来,并且评分一样,如下:

{
    "query":{
        "match":{
            "content":"i liked it"
        }
    }
}
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 0.18232156,
        "hits": [
            {
                "_index": "dong_analyzer_test",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.18232156,
                "_source": {
                    "id": 1,
                    "content": "I like apple"
                }
            },
            {
                "_index": "dong_analyzer_test",
                "_type": "_doc",
                "_id": "2",
                "_score": 0.18232156,
                "_source": {
                    "id": 2,
                    "content": "I liked apple"
                }
            }
        ]
    }
}
  • 可以发现文档2排在了第二位,如果数量多一点,可能页面第一页都看不到他,但实际上他应该排在第一位

解决办法

再加一个字段

{
  "properties": {
      "content": {
        "type": "text",
        "analyzer": "english",
        "fields": {
          "std": {
            "type": "text",
            "analyzer": "standard"
          }
        }
      }
    }
}
  • content:使用了提取词干的分词器
  • content.std:不使用标准分词器

注意:如果是新增字段,需要重新导入一遍数据。

搜索的时候进行多字段搜索

{
   "query": {
        "multi_match": {
            "query":  "I liked it",
            "type":   "most_fields", 
            "fields": [ "content", "content.std" ]
        }
    }
}
  • most_fields:是将两个字段查询的评分加起来
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 1.2401118,
        "hits": [
            {
                "_index": "dong_analyzer_test",
                "_type": "_doc",
                "_id": "2",
                "_score": 1.2401118,
                "_source": {
                    "id": 2,
                    "content": "I liked apple"
                }
            },
            {
                "_index": "dong_analyzer_test",
                "_type": "_doc",
                "_id": "1",
                "_score": 0.5469647,
                "_source": {
                    "id": 1,
                    "content": "I like apple"
                }
            }
        ]
    }
}
2、提升问答系统性能:IdSay的优化与词干提取算法评估 本文探讨了IdSay问答系统的性能优化及其在词干提取算法评估方面的研究成果。通过对IdSayBL与其他系统的对比分析,明确了改进方向,包括引入语义等价性、利用维基百科的本体知识以及优化答案评分机制等。这些改进显著提升了IdSay系统的准确性和创新性。此外,文章还评估了葡萄牙语词干提取算法的准确性及其对信息检索的影响,揭示了其在实际应用中的表现与潜力。未来工作将聚焦于时间处理、共指消解和多语言支持等方面。 阅读详情

相关推荐

用VASPKIT+Quantum Espresso高效绘制能带图:从K点路径生成到可视化全流程

本文详细介绍了如何整合VASPKIT与Quantum Espresso(QE)软件,构建一套高效的能带计算与可视化工作流。通过VASPKIT自动化生成高对称K点路径,结合QE完成自洽与非自洽计算,并利用gnuplot绘制发表级能带图。该流程极大提升了材料电子结构研究的效率与可重复性,是进行DFT能带计算的实用指南。

weixin_29294975的博客 163

Elasticsearch实战(十)---Match及MatchPhrase提升召回率及精确度及重积分优化Rescore

Elasticsearch实战使用 Match及MatchPhrase提升召回率及精确度, rescore实现重积分优化

流浪的喵的博客 4315

DNS入侵检测 datacon2020

DNS入侵检测 datacon2020。

weixin_51491521的博客 523

ElasticSearch 判断结果质量的度量值精准率、召回率

精准率和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。现在以捕鲤鱼为目的。P和R指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。F值 = 正确率 * 召回率 * 2 / (正确率 + 召回率) (F 值即为正确率和召回率的调和平均值)F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

qq_40537587的博客 888

利用ORCAD/pspice 仿真分析电路的幅度相位谱

利用ORCAD的pspice仿真分析电路的相位谱1.介绍2.搭建电路原理图3.建立仿真文件,进行交流分析4.仿真、查看输出5.总结 1.介绍 orcad配合pspice一直是电路原理图绘制和仿真的主要工具,pspice工具提供了诸如暂态分析、直流分析、交流分析等多个工具。学校主要教的是multisim,对orcad讲得很少,最进要利用orcad对运放构成的电路的频响、相移特性进行分析,发现资料幅度...

qq_40011737的博客 1万+

睿尔曼超轻量仿人机械臂-ROS第一篇 启动机械臂的Moveit

本文主要讲述了睿尔曼六轴机械臂在ROS中的功能包配置,及如何根据文件启动Moveit做仿真。

realman_Rop的博客 7489

ES知识记录

ES知识记录

承缘丶 1911

《计算机科学概论(第13版)》5-12章

定序是按给定语句的顺序应用每个算法步骤。(primitive):建立一组定义明确的构建块,利用它们来构造和执行算法的表示。可以消除歧义,不会引起误解,就像咱们传统的自然语言(用英语来沟通交流)。(programming language):原语的集合以及说明如何组合这些原语来表示比较复杂的想法的规则集合。用程序设计语言描述的算法可以在计算机上执行。每个原语都有自己的语法和语义,语法指的是原语的符号表示,语义是指该原语的含义。伪代码:用户开发过程中非正式表达想法的符号系统。

输入知识,消化知识,输出知识,分享知识,教人让我学习更好,业精于勤荒于嬉,行成于思毁于随 1036

搜索推荐相关

搜索算法 Learning to Rank方法: 1、单文档方法:根据query判断每个item的相似度 2、文档对方法:确定文档对的前后顺序 3、文档列表法:确定所有文档的先后顺序 Item:垂域、意图、语义相似性、item的热度、用户的搜索日志 排序算法的评估标准 AUC: 准确率:描述模型的推荐列表(分母)中有多少是正例item; 召回率:描述有多少正例item(分母)包含在模型的推荐列表中 AP average precision(平均精度):在不同recall情况下 precisi

weixin_43612836的博客 1406

智护健康:基于 ESP32 的可穿戴式心率血氧远程监测手环设计与实现

随着健康管理理念的普及,可穿戴式健康监测设备成为刚需。本文设计了一款基于 ESP32 芯片的可穿戴式心率与血氧远程监测手环,通过集成专业生物传感器采集生理数据,借助 ESP32 的无线通信能力实现数据远程传输,搭配手机 APP 与云平台完成数据存储、分析与预警。文中详细阐述了硬件选型、模块接线、软件设计流程及核心代码实现,该手环具备低功耗、高精度、实时性强等特点,可满足日常健康监测与远程照护需求。

weixin_42300449的博客 1198

第四节:Vben Admin登录对接后端getUserInfo接口

上一节,我们完成了/api/auth/login接口的创建,通过login接口,我们完成了登录和Token的生成。但是登陆还是报404返回,发现是Vben Admin又请求了一个/api/getUserInfo接口,本节我们就来分析完成这个接口本节,我们完成了getUserInfo接口,完成了登录操作,成功的进入到工作台页面。

cuiwin的专栏 2845

ES如何提高准确率之【term-centric】

本文探讨了多字段搜索的时候,每个字段的词频和逆向文档频率不同带来的搜索准确率问题。问题的根本原因在于:搜索的时候大多数都是针对字段进行搜索,但本文中的情况是希望对词进行搜索。解决思路也是很简单,就是把多个字段的词频和逆向文档频率整合到一起,当然可以在建立索引的时候整合,也可以搜索的时候进行整合查询。

帅东's Blog 2103

2025年最新自动化/控制保研夏令营&预推免面试真题分享(东南/浙大/华科清华)

笔者来2021级本科自动化专业,以下部分将介绍我在夏令营以及预推免期间发生经历和问题。

Control Everything 2645

Elasticsearch权威指南:算法词干提取器深度解析

Elasticsearch权威指南:算法词干提取器深度解析 词干提取技术概述 在全文搜索引擎中,词干提取(Stemming)是一项关键技术,它通过将单词还原到其基本形式(词干)来提高搜索召回率。Elasticsearch提供了多种词干提取方法,其中算法词干提取器是最常用的一类。 算法词干提取器原理 算法词干提取器通过应用一系列预定义的规则来转换单词,而不是依赖字典查询。这类提取器的工作方式包括: ...

gitblog_00807的博客 492

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ElasticSearch 2 (19) - 语言处理系列之故事开始

ElasticSearch 2 (19) - 语言处理系列之故事开始 摘要 全文搜索是精度(尽可能少的返回不相关文档)和召回(尽可能多的返回相关文档)的战场。尽管只精确匹配用户查询的词肯定会是精确的,但这并不够。我们可能会丢失许多被用户认为相关的文档,取而代之的是我们需要扩大撒网范围,去搜索那些与原始查询不完全相同但又相关的词。 版本 elasticsearch版本: elasticsearch-...

weixin_34357928的博客 106

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Elasticsearch权威指南:词干提取技术解析与实现

在信息检索和搜索引擎的世界中,用户搜索"running"时,期望能找到包含"run"、"ran"、"runs"的文档。这就是词干提取(Stemming)技术的核心价值——将词汇还原到其词根形式,提升搜索的召回率(Recall)。 词干提取技术解决了自然语言中的**词形变化(Inflection)**问题: ```mermaid mindmap root(词形变化类型) (数) ...

gitblog_00404的博客 483

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

搜索引擎中的词干提取与拼写纠正结合

在当今信息爆炸的时代,搜索引擎成为人们获取信息的重要工具。用户在使用搜索引擎时,输入的查询词可能存在各种不规范的情况,例如拼写错误或者使用了不同的词形。词干提取可以将不同词形的单词还原为其词干形式,从而扩大搜索范围,提高召回率;拼写纠正则可以将用户输入的拼写错误的单词修正为正确的形式,保证搜索的准确性。将词干提取与拼写纠正结合起来,能够显著提升搜索引擎的性能,为用户提供更精准、更全面的搜索结果。本文介绍了搜索引擎中词干提取与拼写纠正结合的技术。

专注搜索引擎技术 374

Elasticsearch词干提取与精确搜索混合使用指南

在实际搜索业务场景中,我们经常面临一个核心矛盾:既要实现智能的词干提取(Stemming)来提高搜索召回率,又要保证特定场景下的精确匹配能力。Elasticsearch 作为业界领先的搜索引擎,提供了强大的文本分析功能来解决这一难题。 本文将深入探讨如何在实际项目中混合使用词干提取和精确搜索技术,帮助您构建既智能又精准的搜索体验。 ## 词干提取基础 ### 什么是词干提取? 词干提取(S...

gitblog_00544的博客 286

Apollo搜索原理大揭秘:分词、词干提取与TF-IDF ranking

Apollo是一款Unix风格的个人搜索引擎和网络爬虫,专为管理数字足迹设计。它通过高效的搜索算法帮助用户快速找到个人数据中的相关信息,核心技术包括分词处理、词干提取和TF-IDF排序。 ## 🔍 Apollo搜索核心流程解析 Apollo的搜索流程可分为三大关键步骤:文本分析(分词与词干提取)、索引匹配和结果排序。从架构图中可以清晰看到数据从客户端到后端处理的完整路径: [![Apoll

gitblog_01151的博客 932

词干提取技术详解:从NLP基础到Python实战应用

在自然语言处理和文本分析领域,文本规范化是基础且关键的技术环节。其核心原理是通过算法将单词的各种屈折形式(如复数、时态变化)归并到统一的基础形式,从而减少词汇表维度、提升语义一致性。这项技术的工程价值在于显著改善搜索引擎的召回率和文本分类的准确性,广泛应用于信息检索、数据挖掘和文档聚类等场景。其中,词干提取作为高效的文本预处理方法,通过规则化的后缀剥离实现快速归一化,而NLTK库中的波特和雪球算法则是该技术的经典实现。本文聚焦于词干提取的实战应用,结合Python环境配置和完整预处理管道构建,帮助开发者掌握

weixin_29032337的博客 305

Elasticsearch多字段搜索 - multi_match查询和多数字段-----multi_match查询

multi_match查询提供了一个简便的方法用来对多个字段执行相同的查询。 NOTE 存在几种类型的multi_match查询,其中的3种正好和在"了解你的数据"一节中提到的几种类型相同:best_fields,most_fields以及cross_fields。 默认情况下,该查询以best_fields类型执行,它会为每个字段生成一个match查询,然后将这些查询包含在一个dis_max查询中。下面的dis_max查询: { "dis_max": { "queries":

weixin_47238995的博客 3741

【Elasticsearch】为一个字段配置多个分析器

Elasticsearch会自动将引号内的单词重定向到指定的字段(如`.exact`字段),而其他单词则使用默认字段(如`body`字段)。• `body.exact`字段:使用`english_exact`分析器,仅进行小写处理,不进行词干提取。这样,用户可以根据需要选择使用词干提取的字段(`body`)或精确匹配的字段(`body.exact`)。查询`ski`时,返回所有包含`ski`、`skis`或`skiing`的文档。• `"ski"`:精确匹配,使用`body.exact`字段。

risc123456的博客 766

Elasticsearch: 权威指南 » 深入搜索 » 多字段搜索 » 多数字段 good

跨字段实体搜索 » 多数字段编辑 全文搜索被称作是召回率(Recall)与精确率(Precision)的战场:召回率——返回所有的相关文档;精确率——不返回无关文档。目的是在结果的第一页中为用户呈现最为相关的文档。 为了提高召回率的效果,我们扩大搜索范围——不仅返回与用户搜索词精确匹配的文档,还会返回我们认为与查询相关的所有文档。如果一个用户...

weixin_34384557的博客 108

使用阿里云试用Elasticsearch学习:3.1 处理人类语言——开始处理各种语言

关于单词 no 和 not 有点特别,这俩词会反转跟在它们后面的词汇的含义。或许我们应该认为这两个词很重要,不应该把他们看成停用词。防止 organization 和 organizations 被缩减为词干指定一个自定义停用词列表切词为 world 、 health 、 organization 、 does 、 not 、 sell 、 organ我们在 将单词还原为词根 和 停用词: 性能与精度 中分别详细讨论了词干提取和停用词。

weixin_49131823的博客 1103

深耕ElasticSearch - 基于most_fields类型实现多字段查询

1. 最佳字段和多数字段的区别 1、最佳字段(best_fields): 当搜索词语具体概念的时候,比如 “brown fox” ,词组比各自独立的单词更有意义。文档在相同字段中包含的词越多越好,评分也来自于最匹配字段。 2、 多数字段(most_fields): 为了对相关度进行微调,常用的一个技术就是将相同的数据索引到不同的字段,它们各自具有独立的分析链。一个字段可以包括未经词干提取过的原词,另一个字段包括其他词源、口音。 主字段可能包括它们的词源、同义词以及变音词或口音词,被用来匹配尽可能多的文档。相

你今天真好看呀 1258
上一篇: 让代码变美的第四天 - 工厂方法模式
下一篇: ES如何提高准确率之【term-centric】
帅东
博客等级 码龄11年 676粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值