搜索引擎中广泛使用的文档排序算法——BM25(Best Matching 25)

server/2024/11/28 12:00:35/

在搜索场景中,BM25能计算每个文档与查询的匹配度,从中找出最相关的文档,并按相关性高低排序展示。

要理解BM25,需要掌握以下几个关键概念:

1. 词频(Term Frequency, TF):某关键词在文档中出现的次数。关键词出现越频繁,通常表示文档与查询的相关性越高。
2. 逆文档频率(Inverse Document Frequency, IDF):衡量某关键词在整个文档集合中的稀有程度。稀有关键词的区分度更高,对评分贡献大,其计算公式为:【图1】
3. 文档长度归一化(Document Length Normalization):调整文档长度对相关性评分的影响。避免长文档因为包含更多关键词而获得不公平的高分。
4. 参数 k1 和 b
- k1:控制词频对评分的影响程度。值越高,词频权重越大。
- b:控制文档长度归一化的强度。b=0时忽略文档长度,b=1时完全考虑。

BM25结合上述概念,通过以下步骤计算每篇文档的相关性得分——

计算IDF,然后计算每个关键词的得分【图2】,再将各关键词的得分相加,得到文档的总相关性得分。

举个栗子,假设有以下三个文档,查询关键词“猫 养护”:

- 文档1:包含“猫”和“养护”各2次,总长度100个词。
- 文档2:包含“猫”3次,总长度150个词。
- 文档3:包含“养护”1次,总长度80个词。

计算两个关键词的IDF【图3】后,再计算各文档的BM25得分,最终得出:

- 文档1:同时包含“猫”和“养护”,得分较高。
- 文档2:仅包含“猫”,但词频较高。
- 文档3:仅包含“养护”,且词频低,得分最低。

详细内容:

 Understanding the BM25 full text search algorithm | Evan Schwartz


http://www.ppmy.cn/server/145618.html

相关文章

【NOIP普及组】表达式求值

【NOIP普及组】表达式求值 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 给定一个只包含加法和乘法的算术表达式,请你编程计算表达式的值。 输入 输入仅有一行,为需要你计算的…

使用 TinyGo 和 Gopherbot 进行硬件hacking

本篇内容是根据2019年4月份#84 Hardware hacking with TinyGo and Gopherbot音频录制内容的整理与翻译 Mat Ryer 与特邀嘉宾 Ron Evans 共同主持了第一期一对一采访式节目。 Mat 请 Ron 教我们有关 IoT 中的 Go、Gophercon、 TinyGo和Gopherbot的硬件黑客技术。 过程中为符合…

心情追忆:构建支付模块的五个基本接口设计

之前,我独自一人开发了一个名为“心情追忆”的小程序,旨在帮助用户记录日常的心情变化及重要时刻。我从项目的构思、设计、前端(小程序)开发、后端搭建到最终部署。经过一个月的努力,通过群聊分享等方式,用…

《并查集算法详解及实用模板》

《重生我要成为并查集高手🍔🍔🍔》 并查集:快速查询和快速合并, 路径压缩, 按大小,高度,秩合并。 静态数组实现 😇前言 在数据的海洋中,有一种悄然流淌的力量…

Python 将彩色视频转换为黑白视频(MP4-格式可选)

以下是使用 Python 将彩色视频转换为黑白电视风格的示例代码,主要借助了opencv-python库来实现: python import cv2def convert_to_black_and_white_video(input_video_path, output_video_path):# 打开视频文件cap cv2.VideoCapture(input_video_pat…

机器学习模型——线性回归

文章目录 前言1.基础概念2.代价函数3.单变量线性回归3.1加载数据3.2初始化超参数3.3梯度下降算法3.3.1初次梯度下降3.3.2 多次梯度下降3.3.3结果可视化 前言 随着互联网数据不断累积,硬件不断升级迭代,在这个信息爆炸的时代,机器学习已被应用…

嵌入式linux C++通用makefile模板

编译生成spdlog_app可执行程序 #Makefile # 编译器 #COMPLITEarm-none-linux-gnueabi- #COMPLITE/root/share/nuvoton_cross/arm_linux_4.8/bin/arm-nuvoton-linux-uclibceabi- #/root/share/nuvoton_cross/host/usr/bin/ COMPLITEarm-nuvoton-linux-gnueabi- CC$(COMPLITE)gc…

redis中的bigkey及读取优化

一、bigKey介绍 1、简介 在 Redis 中,Big Key(大键)指的是占用大量内存的单个键。通常,Redis 是一个高性能的内存数据库,但是当某些键变得非常大时,会带来性能上的影响。例如,大量的内存消耗、长时间的操作延迟,甚至可能导致 Redis 停止响应或崩溃。 通俗的来说,指…