ElasticSearch中的BM25算法实现原理及应用分析

文章目录

  • 一、引言
  • 二、BM25算法实现原理
    • BM25算法的实现原理
      • 1. 词频(TF):
      • 2. 逆文档频率(IDF):
      • 3. 长度归一化:
      • 4. BM25评分公式:
    • BM25算法示例
  • 三、BM25算法在ElasticSearch中的应用分析
    • 3.1 文档搜索
    • 3.2 参数调整
    • 3.3 混合搜索
  • 四、结论

在这里插入图片描述

一、引言

ElasticSearch是一个基于Lucene构建的开源搜索引擎,广泛应用于各种搜索场景中。为了提供高质量的搜索结果,ElasticSearch内部集成了多种信息检索算法,其中BM25算法是ElasticSearch
5.0及以后版本默认的相似度算法。BM25算法是一种基于词频(TF)和逆文档频率(IDF)的评分模型,用于评估查询与文档之间的相关性。本文将详细分析BM25算法的实现原理及其在ElasticSearch中的应用。

二、BM25算法实现原理

BM25算法的实现原理

BM25算法
BM25算法是一种在信息检索中广泛使用的排名函数,用于评估文档与用户查询之间的相关性。该算法是TF-IDF(词频-逆文档频率)的改进版本,旨在解决TF-IDF在处理某些问题时的不足。BM25算法的实现原理主要包括以下几个方面:

1. 词频(TF):

  1. 基本定义
    • 词频(TF)指的是在给定的文档d中,词项t出现的次数。
    • BM25调整:BM25对传统的TF计算方法进行了调整,引入了饱和度和长度归一化,以防止长文档由于包含更多词项而获得不公平的高评分。
  2. 饱和处理
    • 为了避免词项频率过高时产生过大的影响,BM25对TF进行了饱和处理。这通常通过一个非线性函数实现,使得词频的增长在达到一定阈值后变得平缓。
  3. 计算公式(在BM25公式中):
    • 词频f(qi, D)直接作为计算的一部分,但它会被一个饱和函数调整。具体来说,TF部分在BM25公式中通常表示为:
      f r a c f ( q i , D ) c d o t ( k _ 1 + 1 ) f ( q i , D ) + k _ 1 c d o t ( 1 − b + b c d o t f r a c ∣ D ∣ t e x t a v g d l ) \\frac{f(qi, D) \\cdot (k\_1 + 1)}{f(qi, D) + k\_1 \\cdot (1 - b + b \\cdot \\frac{|D|}{\\text{avgdl}})} fracf(qi,D)cdot(k_1+1)f(qi,D)+k_1cdot(1b+bcdotfracDtextavgdl)
      • 其中, ( f ( q i , D ) ) (f(qi, D)) (f(qi,D))是词项(qi)在文档(D)中的出现次数。
      • ( k _ 1 ) (k\_1) (k_1)是一个可调参数,通常设置在1.2到2.0之间,用于控制词频的饱和程度。
      • ( b ) (b) (b)是另一个可调参数,通常设置在0.0到0.75之间,用于控制文档长度对得分的影响。
      • ( ∣ D ∣ ) (|D|) (D)是文档 ( D ) (D) (D)的长度(即词项数量)。
      • t e x t a v g d l text{avgdl} textavgdl 是文档集合中文档的平均长度。
  4. 特点
    • 当词项在文档中出现次数很少时,TF的增加会显著提高该词项在文档中的权重。
    • 然而,随着词项出现次数的增加,TF的增加对权重的贡献会逐渐减小,从而实现饱和效果。
  5. 与TF-IDF中的TF比较
    • 在传统的TF-IDF中,词频通常是直接计算并使用的,没有饱和处理。
    • 而在BM25中,词频经过了一个非线性函数的调整,使得文档中的高频词项不会获得过高的权重。

2. 逆文档频率(IDF):

定义:衡量词项在整个文档集合中稀有程度的指标。
计算方法:通常是基于log函数来计算,即

I D F ( t ) = l o g ( N / d f ( t ) ) IDF(t) = log(N / df(t)) IDF(t)=log(N/df(t))

,其中 N N N是文档总数, d f ( t ) df(t) df(t)是包含词项t的文档数。

3. 长度归一化:

引入原因:考虑到文档长度对评分的影响,BM25引入了长度归一化因子。
实现方式:通过计算文档长度与平均文档长度的比值,并将其作为一个因子加入到评分公式中。

4. BM25评分公式:

公式:

S c o r e ( D , Q ) = ∑ ( I D F ( q i ) ∗ f ( q i , D ) ∗ ( k 1 + 1 ) ) / ( f ( q i , D ) + k 1 ∗ ( 1 − b + b ∗ ∣ D ∣ / a v g d l ) ) Score(D, Q) = ∑(IDF(qi) * f(qi, D) * (k1 + 1)) / (f(qi, D) + k1 * (1 - b + b * |D| / avgdl)) Score(D,Q)=(IDF(qi)f(qi,D)(k1+1))/(f(qi,D)+k1(1b+bD∣/avgdl))

  • D D D:文档
  • Q Q Q:查询,由词项qi组成
  • q i qi qi:查询中的词项
  • f ( q i , D ) f(qi, D) f(qi,D):词项qi在文档D中的词频
  • ∣ D ∣ |D| D:文档D的长度
  • a v g d l avgdl avgdl:文档集合的平均文档长度
  • k 1 k1 k1 b b b:可调节的参数,通常k1取1.2到2.0之间的值,b取0.0到1.0之间的值

 BM25算法示例

BM25算法示例

假设我们有以下简单的场景:

1. 文档集合:包含两篇文档D1和D2。

  • D1: “The cat sat on the mat.”
  • D2: “The dog chased the cat around the house.”
    2. 查询:Q = “cat”

3. 计算步骤:
TF计算:

  • D1中"cat"的TF = 1
  • D2中"cat"的TF = 1

IDF计算 (假设只有两篇文档):

I D F ( " c a t " ) = l o g ( 2 / 2 ) = 0 IDF("cat") = log(2 / 2) = 0 IDF("cat")=log(2/2)=0

(因为"cat"在两篇文档中都出现了)

注意:在实际应用中,由于文档集合通常很大,IDF值通常不会是0。

长度归一化 (假设|D1| = 5, |D2| = 7, avgdl = 6):

  • D1的长度归一化因子 = 1(因为|D1|与avgdl接近)
  • D2的长度归一化因子会稍小一些(因为|D2|略大于avgdl)
  • BM25评分(由于IDF为0,这里的评分仅作为示例):

S c o r e ( D 1 , Q ) = ( 0 ∗ 1 ∗ ( k 1 + 1 ) ) / ( 1 + k 1 ∗ ( 1 − b + b ∗ 5 / 6 ) ) Score(D1, Q) = (0 * 1 * (k1 + 1)) / (1 + k1 * (1 - b + b * 5 / 6)) Score(D1,Q)=(01(k1+1))/(1+k1(1b+b5/6))

S c o r e ( D 2 , Q ) = ( 0 ∗ 1 ∗ ( k 1 + 1 ) ) / ( 1 + k 1 ∗ ( 1 − b + b ∗ 7 / 6 ) ) Score(D2, Q) = (0 * 1 * (k1 + 1)) / (1 + k1 * (1 - b + b * 7 / 6)) Score(D2,Q)=(01(k1+1))/(1+k1(1b+b7/6))

注意:由于IDF为0,这里的评分都为0。在实际应用中,由于IDF不会是0,所以评分会有所不同。

4.结果 :由于评分相同(但实际上不会是0),我们可以根据其他因素(如文档长度、其他词项的评分等)来进一步排序文档。

请注意,这个示例是为了说明BM25算法的计算过程而简化的。在实际应用中,文档集合会更大,IDF值不会是0,并且会考虑查询中的多个词项。

BM25算法在ElasticSearch中的应用分析

三、BM25算法在ElasticSearch中的应用分析

3.1 文档搜索

ElasticSearch使用BM25算法来计算查询与文档的相关性评分,并根据评分对搜索结果进行排序。用户输入的查询会被分词,并与索引中的文档进行匹配,最终返回相关性最高的文档列表。

在文档搜索过程中,用户输入的查询首先会被Elasticsearch的分词器处理成多个查询词项,然后这些词项与索引中的文档进行匹配。BM25算法会根据每个词项在文档中出现的频率(TF)和在整个文档集合中的稀有程度(IDF)来计算每个词项对文档得分的贡献。此外,BM25算法还包括两个可调节的参数k1和b,分别用来控制词频的饱和度和文档长度对得分的影响。

3.2 参数调整

ElasticSearch允许用户根据实际需求调整BM25算法中的参数(如k1,
b),以优化搜索结果的准确性和相关性。通过调整这些参数,可以控制词频、文档长度等因素对评分的影响,从而适应不同的搜索场景和数据集。

3.3 混合搜索

除了使用BM25算法进行文本搜索外,ElasticSearch还支持与其他算法(如向量模型、基于学习的模型等)进行混合搜索。通过结合不同算法的优点,可以进一步提高搜索效率和准确性,满足更复杂的搜索需求。

ElasticSearch

四、结论

ElasticSearch中的BM25算法是一种基于词频和逆文档频率的评分模型,通过计算查询与文档的相关性评分来提供高质量的搜索结果。其实现原理简单而有效,通过调整参数和与其他算法进行混合搜索,可以进一步优化搜索结果的准确性和相关性。在实际应用中,ElasticSearch的BM25算法已经得到了广泛的应用和验证,为用户提供了高效、准确的搜索体验。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/35776.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Java 中的使用Selenium 测试框架

Selenium 测试框架:在 Java 中的使用 Selenium 测试框架就是这样一个强大的工具,它为 Web 应用的自动化测试提供了全面且高效的解决方案。 一、Selenium 简介 Selenium 是一个开源的自动化测试工具集,专门用于测试 Web 应用程序。它支持多…

数据结构:队列详解 c++信息学奥赛基础知识讲解

目录 一、队列概念 二、队列容器 三、队列操作 四、代码实操 五、队列遍历 六、案例实操 题目描述: 输入格式: 输出格式: 输入样例: 输出样例: 详细代码: 一、队列概念 队列是一种特殊的线性…

【单片机毕业设计选题24032】-基于STM32的电瓶车电池检测系统

系统功能: 系统上电后显示“欢迎使用电池检测系统请稍后”后两秒后正常显示界面 第一页面第一行显示“系统状态信息” 第二行显示获取到的电压值 第三行显示获取到的电流值 第四行显示获取到的温度和剩余电量值 短按B4按键可切换到第二页面 第二页面第一行显示“温度阈值…

2020年全国大学生数学建模竞赛C题中小微企业信贷决策(含word论文和源代码资源)

文章目录 一、部分题目二、部分论文三、部分源代码(一)数据处理代码(二)熵权法与TOPSIS代码(三)最小二乘法代码(四)粒子群代码 四、完整word版论文和源代码(两种获取方式…

Nest 的 IoC 机制

后端系统中,会有很多对象: Controller 对象:接收 http 请求,调用 Service,返回响应 Service 对象:实现业务逻辑 Repository 对象:实现对数据库的增删改查 此外,还有数据库链接对…

内外网文件流转场景日益复杂,看麒麟信安如何构筑安全防线?

随着信息化快速发展,数据已成为企业核心资产,根据信息安全分级保护和等级保护的相关要求,诸多单位都采取了内外网隔离措施以确保信息安全。但在管理内外部数据流通时,用户单位在集中加密存储、文件流转管理机制、外带文件审批管理…

AI原力觉醒:华硕NUC组团出道,快来Pick属于你的NUC

NUC 家族组团出道,全新的计算体验,重新定义桌面设备。AI加持下,谁最适合你? 颜值担当 NUC 14 Pro 居家必备单品 适用于广大消费者的NUC 14 Pro,不仅颜值在线,更多方位考虑您的日常所需,工作娱…

2024/6/28 英语每日一段

The Supreme Court on Thursday rejected a challenge to an obscure provision of President Donald Trump’s 2017 tax package, ending a lawsuit that many experts feared could destabilize the nation’s tax system. In a divided decision, the court upheld a one-ti…

基于SpringBoot养老院管理系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

Java网络编程(JavaWeb的基础)

Java网络编程(JavaWeb的基础) 文章目录 Java网络编程(JavaWeb的基础)前言一、网络编程概述1.1 软件架构&网络基础1.2 网络通信要素:IP/端口/通信协议1.3 传输层协议:tcp/udp 二、网络编程API2.1 InetAddress类2.2 Socket类&am…

控制台扫雷(C语言实现)

目录 博文目的实现思路项目创建文件解释 具体实现判断玩家进行游戏还是退出扫雷棋盘的确定地图初始化埋雷玩家扫雷的实现雷判断函数 源码game.cgame.h扫雷.c 博文目的 相信不少人都学习了c语言的函数,循环,分支那我们就可以写一个控制台的扫雷小游戏来检…

中小企业进行数字化转型会面临哪些挑战?

在当今这个信息化、数字化的时代,中小企业进行数字化转型已不再是选择,而是必然。然而,这条转型之路并非坦途,它充满了未知与挑战。今天,我们就来探讨一下中小企业为社么要进行数字化转型以及在数字化转型过程中可能遇…

1983springboot VUE兼职招聘管理系统开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 springboot VUE兼职招聘管理系统是一套完善的完整信息管理类型系统,结合springboot框架和VUE完成本系统,对理解JSP java编程开发语言有帮助系统采用springboot框架(MVC模式开发),系统具有完整的源代码和…

重磅!免费一键批量混剪工具它来了,一天上万短视频不是梦

很多做短视频营销的朋友需要批量生成大量的短视频,但是市面上的工具一是不好用,二是要收费。 今天给大家介绍一款免费的,可以自动化批量生成短视频的工具MoneyPrinterPlus。 同时支持windows和linux平台。 有了它,一天生成上万短…

从零创建深度学习张量库,支持gpu并行与自动微分

多年来,我一直在使用 PyTorch 构建和训练深度学习模型。尽管我已经学会了它的语法和规则,但总有一些东西激起了我的好奇心:这些操作内部发生了什么?这一切是如何运作的? 如果你已经到这里,你可能也有同样的…

Linux 的启动流程

第一步、加载内核 操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。 以我的电脑为例,/boot 目录下面大概是这样一些文件: $ ls /bootconfig-3.2.0-3-amd64config-3.2.0-4-amd64grubinitrd.img-3.2.0-3-amd64initrd.img-3.2.0-4-amd6…

云效BizDevOps上手亲测

云效BizDevOps上手亲测 什么是云效项目协作Projex配置2023业务空间原始诉求字段原始诉求工作流创建原始诉求配置2023产品空间创建主题业务原始诉求关联主题配置2023研发空间新建需求需求关联主题 与传统区别云效开发流程传统开发流程云效BizDevOps 操作体验 什么是云效 在说到…

【vue3】【vant】 移动本草纲目案例发布收藏项目源码

更多项目点击👆👆👆完整项目成品专栏 【vue3】【vant】 移动本草纲目案例发布收藏项目源码 获取源码方式项目说明:其中功能包括 项目包含:项目运行环境文件截图 获取源码方式 加Q群:632562109项目说明&am…

揭秘搜索引擎核心机制:网页爬行、索引、预处理、建立索引、查询处理与结果排序策略的深入解读

搜索引擎的工作原理与流程是一个复杂而精细的系统工程,旨在帮助用户从互联网的海量信息中快速找到最相关、最有价值的内容。 理解搜索引擎工作原理对于内容创作、网站优化、广告投放及日常搜索至关重要。它能指导网页设计更加友好,提高搜索引擎排名&…

热点观察 | 《姜饼人王国》新作来袭、《Monopoly GO!》荣登5月全球畅销榜榜首

本周出海热点: 1. 中国品牌借欧洲杯打响知名度 2. 米哈游玩家切割二次元 3. 6月27日,Steam游戏《六月衷曲》上线TapTap 4. 《Monopoly GO!》荣登5月全球畅销榜榜首 5. 《地下城与勇士》拿下本周亚洲T1市场畅销榜冠军 6. 《姜饼人王国》新作强势登顶…