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

BM25Okap

BM25Okapi 核心解析

1. 什么是 BM25Okapi?

BM25(Best Matching 25)是一种经典的检索排序算法,用于计算「查询文本」与「文档」的相关性得分,广泛应用于搜索引擎、问答系统等场景。
 
  • Okapi BM25 是 BM25 的最常用变体(由伦敦城市大学的 Okapi 项目提出),核心基于 TF-IDF 思想,但优化了文档长度归一化等问题,效果更优。
  • 核心公式(简化版):image
    • tf(q_i, D):词  在文档  中的词频;
    • IDF(q_i):词  的逆文档频率(衡量词的稀有度);
    • k1/b:可调参数(k1 控制词频饱和,b 控制文档长度影响,默认 k1=1.5,b=0.75);
    • |D|:文档 D 的长度,avgdl:语料库平均文档长度。

2. BM25Okapi 的核心功能

  • 对语料库预计算统计信息(文档长度、词频、IDF 等);
  • 输入查询文本,快速计算查询与每个文档的相关性得分;
  • 支持按得分排序,返回 Top-N 最相关文档。

3. BM25Okapi 的基本用法(基于 rank_bm25 库)

首先安装依赖:
pip install rank_bm25
from rank_bm25 import BM25Okapi# 步骤1:准备语料库并分词(必须是二维列表,每个子列表是文档的分词结果)
corpus = ["苹果手机的电池续航怎么样","华为手机的拍照功能很强","小米手机的性价比很高","苹果手机的系统流畅度不错"
]
# 中文分词(实际场景建议用 jieba,此处简化为字符拆分)
tokenized_corpus = [list(doc) for doc in corpus]# 步骤2:初始化 BM25Okapi
bm25 = BM25Okapi(tokenized_corpus)# 步骤3:处理查询文本(分词)
query = "苹果手机"
tokenized_query = list(query)# 步骤4:计算相关性得分
scores = bm25.get_scores(tokenized_query)  # 返回每个文档的得分列表
# 输出:[1.8705882352941177, 0.0, 0.0, 1.8705882352941177]# 步骤5:获取 Top-N 文档
top_n_docs = bm25.get_top_n(tokenized_query, corpus, n=2)
# 输出:['苹果手机的电池续航怎么样', '苹果手机的系统流畅度不错']

代码优化建议(补充)

当前代码的字符拆分分词方式仅适用于演示,实际中文场景需优化:
import jieba  # 主流中文分词库
from rank_bm25 import BM25Okapi# 正确的分词方式(语义词拆分)
async def rerank(self, text: str, corpus:list[str], documents:list[Any], topK: int = 10):# 1. 中文分词(替代单字符拆分)tokenized_query = jieba.lcut(text)  # 拆分成语义词,如"苹果手机"→["苹果", "手机"]search_corpus = [jieba.lcut(cor) for cor in corpus]  # 语料库同理# 2. 初始化BM25(此时输入的是语义词列表,符合算法要求)bm25 = BM25Okapi(search_corpus)# 3. 返回Top-K相关文档return bm25.get_top_n(tokenized_query, documents, n = topK)
 
http://www.jsqmd.com/news/71346/

相关文章:

  • Original Alientech KESS3 Slave 6-Month Subscription: Diagnose Tune European/American Vehicles
  • 100 平新房装修不踩坑!苏州这 6 家高性价比公司闭眼入 - 品牌测评鉴赏家
  • 栈的快速入门
  • 苏州装修避坑指南:这几家透明报价、0增项的良心公司请收好! - 品牌测评鉴赏家
  • 2025年最新!实验室专用水处理设备厂家推荐及联系方式汇总 - 极欧测评
  • 【Cache缓存】基本概念 - 实践
  • 苏州100平新房装修攻略:高性价比公司精选+避坑指南,本地人都这样选! - 品牌测评鉴赏家
  • 苏州100平新房装修攻略:高性价比公司精选+避坑指南,本地人都这样选! - 品牌测评鉴赏家
  • DASCTF 2025下半年赛 reverse wp
  • Alientech KESS3 Slave Marine PWC Bench-Boot Protocol Activation for Mechanics Owners
  • Pygubu-Designer:Python GUI开发
  • 苏州装修性价比大揭秘!这些公司省钱又省心 - 品牌测评鉴赏家
  • 苏州装修公司施工质量红榜:2025年口碑TOP5避坑指南 - 品牌测评鉴赏家
  • 苏州二手房局部改造全攻略:5家高口碑公司深度测评 - 品牌测评鉴赏家
  • LLaMa-Factory 使用 Llama-3-8B-Instruct 在 双卡 NVIDIA Quadro P5000 16G 环境跑通4bit模型微调全过程
  • P11714 [清华集训 2014] 主旋律 题解
  • 2025苏州装修公司设计实力大揭秘:这几家凭什么脱颖而出? - 品牌测评鉴赏家
  • Cell | 本周最新文献速递
  • docker操作
  • 苏州二手房装修公司怎么选?这5家口碑好、避坑指南请收好 - 品牌测评鉴赏家
  • 苏州别墅装修公司怎么选?这几家口碑好到爆! - 品牌测评鉴赏家
  • 苏州厂房装修哪家好?2025实力派榜单与避坑指南(附全维度筛选攻略) - 品牌测评鉴赏家
  • 嵌入式处理器选型实战教程:MCU(STM32/ESP32/Arduino)+MPU(ARM Cortex-A)全解析
  • 贪心算法
  • 我的一位神兽朋友5
  • 我的一位神兽朋友6
  • 苏州装修公司前十强攻略:口碑、性价比、设计力全解析(2025避坑指南) - 品牌测评鉴赏家
  • 12月10日日记
  • 再见了,我的神兽朋友
  • 网络分析与数据可视化软件 Gephi下载安装教程(附下载方式)