当前位置: 首页 > 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.rkmt.cn/news/81884.html

相关文章:

  • Original Alientech KESS3 Slave 6-Month Subscription: Diagnose Tune European/American Vehicles
  • 2025年最新!实验室专用水处理设备厂家推荐及联系方式汇总 - 极欧测评
  • Pygubu-Designer:Python GUI开发
  • 苏州装修公司施工质量红榜:2025年口碑TOP5避坑指南 - 品牌测评鉴赏家
  • 苏州二手房局部改造全攻略:5家高口碑公司深度测评 - 品牌测评鉴赏家
  • LLaMa-Factory 使用 Llama-3-8B-Instruct 在 双卡 NVIDIA Quadro P5000 16G 环境跑通4bit模型微调全过程
  • 苏州别墅装修公司怎么选?这几家口碑好到爆! - 品牌测评鉴赏家
  • 再见了,我的神兽朋友
  • 12月10日日记
  • 苏州装修哪家强?前十榜单大放送! - 品牌测评鉴赏家
  • CQOI 2025
  • 2025苏州装修公司指南:从本土老字号到新锐黑马,这份攻略帮你精准避坑! - 品牌测评鉴赏家
  • NOI 2025
  • 英语_错题集_常用短语
  • 梦数据库新增大字段报错问题
  • 年轻人的理想家:极简风装修公司怎么选?这份避坑指南+实战案例请收好 - 品牌测评鉴赏家
  • 达梦数据库操作
  • MCP 爆火背后:是技术革命,还是精心包装的“新瓶旧酒”?
  • web框架——flask基础知识深入-flask3.x之上下文管理机制
  • 「2025家装售后红榜」十大装修公司谁能“售后无忧”? - 品牌测评鉴赏家
  • 2025年12月成都软件定制开发,crm系统定制软件开发,流程管理系统软件开发公司推荐:聚焦企业定制能力与技术竞争力​ - 品牌鉴赏师
  • 2025年12月cfd券商推荐:行业权威盘点与合规资质红榜发布​ - 品牌鉴赏师
  • SAM 学习笔记
  • 2025年12月cfd经纪商公司推荐:行业权威测评与合规交易平台红榜发布​ - 品牌鉴赏师
  • 2025年12月四川软件开发,成都软件开发,数据中台管理系统软件开发公司推荐:定制服务测评与选型指南​ - 品牌鉴赏师
  • 2025年12月降血糖公司推荐:行业权威盘点与品质红榜发布​ - 品牌鉴赏师
  • 2025年12月杭州章程翻译,杭州法律翻译,杭州移民翻译公司品牌推荐榜,专业度与口碑深度解析!​ - 品牌鉴赏师
  • 2025年12月ACDC电源模块,AC-DC电源模块,DC电源模块厂家推荐:行业权威盘点与品质红榜发布​ - 品牌鉴赏师
  • python 装饰器 —— @functools.wraps
  • 按DDD领域分析Openfeign