夜雨聆风学习资料网

ARTICLE · 1028028

不装向量库,19 行 Python 给文档装上 BM25

不装向量库,19 行 Python 给文档装上 BM25

不装向量库,19 行 Python 给文档装上 BM25

知识库搜不到东西,我先把检索层扒开看。不装向量库、不跑模型,19 行 Python 给本地文档装上 BM25 搜索。

装 rank_bm25 和 jieba 两个包就行。读入语料、切成词、建索引、按分数排前三。本机实测:分词约 0.79 秒,建索引 6 毫秒,单次查询只要 0.2 毫秒。

拿 14 篇中文文档做对照。原词查“语音克隆 容器”,目标文章直接排第一。换 10 种问法再测,grep 只中 1 次,BM25 的 Top-1 中了 8 次、Top-3 中了 9 次。

负对照用“量子纠缠”这类无关词,最高分只有 2.63,正常查询的中位分是 6.99。分数确实能分清相关和不相关。

不过 BM25 也有边界。它只看词面重叠,不懂同义词和改写。10 组里那 1 组没命中,就是查询词和文档完全没重合。遇到这种,还得靠向量检索兜底。

原文不装向量库,19 行 Python 给文档装上 BM25 搜索:换 10 种问法,grep 只对 1 次、BM25 对 8 次
广西,22分钟前,

相关学习资料

返回首页浏览学习资料