当前位置: 首页 > article >正文

BM25(Best Matching 25)信息检索

文章目录一、BM25本质在做什么二、核心思想直观理解1️⃣ 词出现次数Term Frequency, TF2️⃣ 词的稀有程度IDF3️⃣ 文档长度归一化三、BM25公式核心这是标准BM25打分函数 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/2ae37ae2b1c24eddae1b988194fb2aa3.png)四、BM25 vs TF-IDF关键区别五、实际应用场景 搜索引擎 RAG大模型检索增强 NLP系统六、一个简单例子七、总结文档长度归一化一、问题本质二、BM25的解决办法三、怎么惩罚机制解释四、直觉理解重点五、一个对比例子六、参数 b 的作用关键七、总结BM25Best Matching 25是一种经典的信息检索Information Retrieval, IR算法主要用于根据关键词从文档集合中排序最相关的结果。它是搜索引擎如 Elasticsearch、Apache Lucene中非常核心的一种相关性打分函数。一、BM25本质在做什么BM25解决的是一个核心问题 给定一个查询query如何给每篇文档打分并按“相关性”排序它属于基于词频的概率模型是对 TF-IDF 的改进版本更现代、更鲁棒二、核心思想直观理解BM25认为一个文档是否相关主要看三件事1️⃣ 词出现次数Term Frequency, TF查询词在文档中出现越多 → 越相关但不是线性增长避免刷词作弊 有“饱和机制”出现10次 ≠ 比出现5次强一倍2️⃣ 词的稀有程度IDF越罕见的词 → 信息量越大比如“的” → 没意义“量子纠缠” → 很有区分度3️⃣ 文档长度归一化长文档天然更容易包含关键词BM25会惩罚过长文档三、BM25公式核心这是标准BM25打分函数四、BM25 vs TF-IDF关键区别特性TF-IDFBM25TF增长线性非线性更合理长度处理简单归一更精细归一实际效果一般更强工业标准 BM25可以理解为“工程优化版的 TF-IDF”五、实际应用场景BM25广泛用于 搜索引擎Google早期/基础层Elasticsearch 默认算法Apache Solr RAG大模型检索增强向量检索Embedding之前的第一步过滤Hybrid SearchBM25 向量 NLP系统文档召回retrieval stageQA系统候选生成六、一个简单例子查询machine learning文档Amachine learning is powerful文档Bmachine learning machine learning machine learningBM25会给B更高分词频高但不会是3倍因为TF饱和七、总结BM25 一种更智能的关键词匹配打分算法用于排序最相关文档是现代搜索系统的基础组件。文档长度归一化这段内容讲的是BM25里的“文档长度归一化”length normalization机制核心是在解决一个非常现实的问题一、问题本质长文档天然更容易“命中关键词”但不一定更相关举个直观例子文档A短machine learning basics文档B长……一万字…… machine learning ……很多无关内容 文档B更容易包含“machine learning”但它不一定更相关只是更长而已。二、BM25的解决办法BM25会做一件事✅对长文档进行“惩罚”也就是你图里那句“长文档天然更容易包含关键词”“BM25会惩罚过长文档”三、怎么惩罚机制解释BM25在公式里引入了这一项[\frac{|D|}{avgdl}]含义是( |D| )当前文档长度( avgdl )所有文档的平均长度 如果文档比平均长 → 分母变大 →得分下降文档比平均短 → 分母变小 →得分相对更高四、直觉理解重点你可以这样理解BM25在问“这个词出现是因为文档真的相关还是因为文档太长”五、一个对比例子查询AI文档长度包含次数BM25判断A100字2次✅ 相关B5000字3次⚠️ 不一定更相关 虽然B出现次数更多但因为太长会被压分六、参数 b 的作用关键BM25里有个参数( b \in [0,1] )作用是控制“惩罚强度”( b 0 )❌ 不考虑长度不惩罚( b 1 )✅ 完全按长度惩罚常用值0.75 实际含义“长度影响占75%权重”七、总结文档长度归一化 防止长文档因为“啰嗦”而获得不公平的高分

相关文章:

BM25(Best Matching 25)信息检索

文章目录一、BM25本质在做什么二、核心思想(直观理解)1️⃣ 词出现次数(Term Frequency, TF)2️⃣ 词的稀有程度(IDF)3️⃣ 文档长度归一化三、BM25公式(核心)这是标准BM25打分函数&…...

AI 编程盛行的时代,为什么 “『DC- WFW』” 仍然具有必要性?沼

这&#xff0c;是一个采用C精灵库编写的程序&#xff0c;它画了一幅漂亮的图形&#xff1a; 复制代码 #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle void draw(int d){for(int i0;i<5;i)turtle.fd(d).left(72); } int main(){ …...

算法的能耗模型与绿色计算优化方向的技术4

能耗模型基础理论算法复杂度与能耗关系时间复杂度与空间复杂度对硬件资源消耗的影响&#xff0c;建立数学模型描述指令执行次数、数据访问频率与能耗的关联。硬件层面的能耗因素CPU动态功耗&#xff08;CVf&#xff09;、静态功耗、内存访问能耗、缓存命中率等关键参数&#xf…...

3步解决浏览器Markdown阅读难题:从乱码到专业渲染的蜕变之路

3步解决浏览器Markdown阅读难题&#xff1a;从乱码到专业渲染的蜕变之路 【免费下载链接】markdown-viewer Markdown Viewer / Browser Extension 项目地址: https://gitcode.com/gh_mirrors/ma/markdown-viewer 你是否遇到过这样的窘境&#xff1a;在浏览器中打开本地M…...

Docker 容器中运行 AI CLI 工具:用户隔离与持久化卷实战指南暗

环境安装 pip install keystone-engine capstone unicorn 这3个工具用法极其简单&#xff0c;下面通过示例来演示其用法。 Keystone 示例 from keystone import * CODE b"INC ECX; ADD EDX, ECX" try:ks Ks(KS_ARCH_X86, KS_MODE_64)encoding, count ks.asm(CODE)…...

电子电路中的“心脏”:电源铝

前言 Kubernetes 本身并不复杂&#xff0c;是我们把它搞复杂的。无论是刻意为之还是那种虽然出于好意却将优雅的原语堆砌成 鲁布戈德堡机械 的狂热。平台最初提供的 ReplicaSets、Services、ConfigMaps&#xff0c;这些基础组件简单直接&#xff0c;甚至显得有些枯燥。但后来我…...

如何永久保存微信聊天记录:WeChatMsg本地数据备份完整指南

如何永久保存微信聊天记录&#xff1a;WeChatMsg本地数据备份完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

第十五节:启动序列——从 claude 命令到 REPL 就绪

知识图谱定位:前面两节我们分别拆解了终端 UI(第13节 React Ink)和命令系统(第14节 斜杠路由)——它们都假设一个前提:REPL 已经就绪。但从用户在终端敲下 claude 按回车,到他看到交互界面,这中间到底发生了什么?答案是一个精心设计的三阶段启动序列:cli.tsx::main()…...

贾子科学的历史意义与现实影响:挑战西方科学哲学霸权的新范式

贾子科学的历史意义与现实影响&#xff1a;挑战西方科学哲学霸权的新范式摘要&#xff1a; 贾子科学是贾龙栋于2025-2026年提出的原创科学哲学体系&#xff0c;其历史意义在于直接挑战以波普尔证伪主义为核心的西方科学划界标准&#xff0c;提出“公理驱动可结构化”新标尺&…...

Vitest单元测试教程

Vitest 是 Vite 生态的极速单元测试框架&#xff0c;API 兼容 Jest&#xff0c;上手快、配置简单、性能极高。下面从 安装 → 配置 → 编写测试 → 常用断言 → Mock → 组件测试 → 运行与覆盖率 完整流程带你上手。一、安装 1. 基础安装 npm i -D vitest # 或 yarn add -D vi…...

Jenkins 学习总结腋

先唠两句&#xff1a;参数就像餐厅点单 把API想象成一家餐厅的“后厨系统”。 ? 路径参数/dishes/{dish_id} -> 好比你要点“宫保鸡丁”这道具体的菜&#xff0c;它是菜单&#xff08;资源路径&#xff09;的一部分。查询参数/dishes?spicytrue&typeSichuan -> 好比…...

2025届学术党必备的十大AI科研平台横评

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 人工智能本领在学术写作范畴的运用越来越普遍&#xff0c;它的关键价值是协助科研者达成文献…...

ARM 架构 JuiceFS 性能优化:基于 MLPerf 的实践与调优死

Qt是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本笔记将重点介绍QSpinBox数值微调组件的常用方法及灵活应用。…...

OpenClaw 太难装了?试试 LangTARS:一行命令部署 + WebUI 管理面板,还能接入 Dify/Coze/nn??悠

1. 什么是 Apache SeaTunnel&#xff1f; Apache SeaTunnel 是一个非常易于使用、高性能、支持实时流式和离线批处理的海量数据集成平台。它的目标是解决常见的数据集成问题&#xff0c;如数据源多样性、同步场景复杂性以及资源消耗高的问题。 核心特性 丰富的数据源支持&#…...

PHP AI校验配置被低估的致命细节(内存泄漏触发点、AST解析偏差、Token限流阈值)——资深SRE连夜重写配置手册

第一章&#xff1a;PHP AI校验配置的全局认知与风险图谱PHP AI校验配置并非孤立的技术模块&#xff0c;而是横跨应用层、中间件、模型服务与基础设施的复合型安全控制面。其核心目标是在AI能力注入业务流程的同时&#xff0c;确保输入合法性、输出可控性、行为可审计及策略可收…...

嵌入式进阶——MCU启动与代码执行教程

MCU启动与代码执行教程 1. 简介 本教程旨在帮助理解&#xff0c;深入剖析ARM Cortex-M系列单片机上电后的完整启动流程&#xff0c;以及程序在Flash、RAM、寄存器三者的协同执行机制。基于STM32等典型MCU&#xff0c;从硬件复位瞬间开始&#xff0c;逐步讲解向量表加载、Reset_…...

学Simulink——基于Simulink的坡道起步防溜坡电机转矩控制

目录 手把手教你学Simulink ——基于Simulink的坡道起步防溜坡电机转矩控制 一、问题背景 二、系统架构与控制逻辑 1. 控制层级 2. 防溜坡转矩需求 三、无传感器坡度估计方法 方法:基于加速度计 + 车速微分 Simulink 实现 四、防溜坡转矩控制器设计 1. 基础转矩规划…...

基于yolov8和faster-rcnn的电动车戴头盔检测,界面可选择模型,支持图像、视频和摄像实时检测【pytorch框架、python源码】

更多目标检测、图像分类识别、目标追踪、图像分割、图像检索等项目可看我主页其他文章 功能演示&#xff08;看shi pin 下面的简介&#xff09;&#xff1a; https://www.bilibili.com/video/BV1DWXrBaE3Z/?spm_id_from333.1387.homepage.video_card.click&vd_source23c…...

打卡信奥刷题(3078)用C++实现信奥题 P7033 [NWRRC 2016] CodeCoder vs TopForces

P7033 [NWRRC 2016] CodeCoder vs TopForces 题目描述 在 Byteland&#xff0c;竞赛编程非常流行。事实上&#xff0c;每位 Byteland 的公民都在两个编程网站——CodeCoder 和 TopForces 上注册。每个网站都有自己专有的评分系统。每位公民在每个网站上都有一个唯一的整数评分&…...

打卡信奥刷题(3077)用C++实现信奥题 P7023 [NWRRC 2017] Equal Numbers

P7023 [NWRRC 2017] Equal Numbers 题目描述 给定一个包含 nnn 个整数 a1,…,ana_{1}, \ldots, a_{n}a1​,…,an​ 的列表。你可以执行以下操作&#xff1a;选择某个 aia_{i}ai​ 并将其乘以任意正整数。 你的任务是计算在进行 kkk 次操作后列表中可能出现的不同整数的最小数…...

法国Hornetsecurity联合里尔大学:如何让人工智能学会保护隐私

这项由法国Hornetsecurity公司与里尔大学、法国国家信息与自动化研究院(Inria)、法国国家科学研究中心(CNRS)以及里尔中央理工学院联合开展的研究&#xff0c;发表于2026年3月31日的计算机科学期刊&#xff0c;论文编号为arXiv:2603.29497v1。有兴趣深入了解的读者可以通过这个…...

SAP MM | 物料主数据:为什么修改了“特殊采购类型”但在 MM04 查不到修改历史?

在 SAP 物料主数据&#xff08;Material Master&#xff09;的操作中&#xff0c;用户有时会修改 “特殊采购类型”&#xff08;SOBSL&#xff09;&#xff0c;比如从“厂内生产”改为“从其他工厂调拨&#xff08;40&#xff09;”。但用户说&#xff0c;修改了主数据之后&…...

容器化网络与Kubernetes网络深度解析

一、Docker网络基础 Docker四大网络驱动 Driver 1: Bridge (默认) ┌────────────────────────────────┐ │ Docker主机 │ │ │ │ ┌─────────────┐ ┌──────────┐ │ │ │ Container A │ │ Bridge │ │ │…...

Shell流程控制(if-else、循环,实现复杂逻辑)

在Linux/Unix系统中&#xff0c;Shell脚本是自动化运维、批量处理任务的核心工具&#xff0c;而流程控制则是让脚本“摆脱线性执行”、实现灵活逻辑的关键。无论是简单的条件判断&#xff08;如“文件是否存在”&#xff09;&#xff0c;还是复杂的批量操作&#xff08;如“遍历…...

Shell通配符与正则表达式(批量匹配,精准筛选)

在Linux Shell运维、脚本开发中&#xff0c;“匹配”是高频操作——批量处理文件、筛选日志内容、定位目标数据&#xff0c;都离不开高效的匹配工具。而Shell通配符与正则表达式&#xff0c;正是支撑这些操作的核心技术。很多初学者容易混淆二者&#xff0c;误以为它们是“同一…...

Shell变量与环境变量(自定义配置,灵活复用)

在Linux/Unix Shell编程与日常运维中&#xff0c;变量是贯穿始终的核心工具——它就像一个可自定义的“数据容器”&#xff0c;能存储文本、数字、路径等各类信息&#xff0c;通过灵活配置实现代码复用、环境统一&#xff0c;大幅提升操作效率与脚本可维护性。很多新手容易混淆…...

Shell核心基础命令(下)——系统与权限操作

Shell核心基础命令&#xff08;下&#xff09;——系统与权限操作 前言 在Linux系统中&#xff0c;权限管理是系统安全的基石。作为多用户多任务操作系统&#xff0c;Linux通过精细的用户-组-权限模型来控制对系统资源的访问。本文将深入讲解Shell中与系统权限相关的核心命令…...

月入3W+!Java+YOLO接单变现全指南:10个可直接落地的AI视觉项目,全场景覆盖

做Java后端开发的同学&#xff0c;是不是都困在「CRUD死循环」里&#xff1f;每天写重复的业务代码&#xff0c;薪资触顶难突破&#xff0c;想转AI赛道又被Python劝退&#xff0c;学了一堆算法却找不到落地场景&#xff0c;更不知道怎么变现。 我身边有个3年经验的Java开发朋友…...

不记命令也能排障:catpaw chat 实战手册俟

Julia&#xff08;julialang.org&#xff09;由Stefan Karpinski、Jeff Bezanson等在2009年创建&#xff0c;目标是融合Python的易用性、C的高性能、R的统计能力、Matlab的科学计算生态。 其核心设计哲学是&#xff1a; 高性能&#xff1a;编译型语言&#xff08;JIT&#xff0…...

EF Core 10向量搜索扩展架构设计图泄露事件(内部PPT第7页已证实):这3个设计决策将重写.NET AI应用开发范式

第一章&#xff1a;EF Core 10向量搜索扩展的演进背景与战略定位随着AI应用在企业级系统中加速落地&#xff0c;传统关系型数据库的标量查询能力已难以满足语义检索、相似性匹配等新兴场景需求。EF Core 10首次将向量搜索能力深度融入ORM层&#xff0c;标志着微软在数据访问技术…...