尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

BM25Okap

BM25Okap
📅 发布时间:2026/6/19 18:23:29

BM25Okapi 核心解析

1. 什么是 BM25Okapi?

BM25(Best Matching 25)是一种经典的检索排序算法,用于计算「查询文本」与「文档」的相关性得分,广泛应用于搜索引擎、问答系统等场景。
 
  • Okapi BM25 是 BM25 的最常用变体(由伦敦城市大学的 Okapi 项目提出),核心基于 TF-IDF 思想,但优化了文档长度归一化等问题,效果更优。
  • 核心公式(简化版):image
    • tf(q_i, D):词 qi​ 在文档 D 中的词频;
    • IDF(q_i):词 qi​ 的逆文档频率(衡量词的稀有度);
    • 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)
 

相关新闻

  • Original Alientech KESS3 Slave 6-Month Subscription: Diagnose Tune European/American Vehicles
  • 2025年最新!实验室专用水处理设备厂家推荐及联系方式汇总 - 极欧测评
  • Pygubu-Designer:Python GUI开发

最新新闻

  • LaTeX长表格排版进阶:如何用longtable宏包实现跨页表格的精细控制?
  • 2026亲测:专业降AIGC软件选它准没错 - 降AI小能手
  • LeagueAkari:基于LCU API的英雄联盟客户端工具包实现多数据源整合架构设计
  • 2026防晒墨镜哪些品牌排名高?TOP5清单出炉 - 速递信息
  • 上海汽车音响改装选哪家?上海音乐人生,二十年赛事级连锁标杆门店 - 音乐人生汽车音响
  • 技术解析:从Tri-Plane到3D GAN,如何实现高效且一致的神经渲染

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号