@DailyDoseOfDS_: 别再到处用向量搜索了!一个30年前的算法,无需训练、无需嵌入、无需微调……
摘要
文章反对过度使用向量搜索,强调BM25在精确关键词匹配上的有效性及其在混合搜索系统中的作用。
别再到处用向量搜索了!一个30年前的算法,无需训练、无需嵌入、无需微调,至今仍在驱动Elasticsearch、OpenSearch和大多数生产级搜索系统。它就是BM25。让我们解释一下它为何如此强大:想象你在一个机器学习论文库中搜索“transformer attention mechanism”。BM25会问三个简单的问题:
“这个词有多罕见?” 每篇论文都包含“the”和“is”,这些词毫无用处。但“transformer”是具体且信息量大的词。BM25提升罕见词的权重,忽略噪声。→ 这就是公式中的IDF(qᵢ)
“它出现了多少次?” 如果一篇论文中“attention”出现了10次,这是个好迹象。但10次和100次之间的差异不会太大。BM25采用递减收益。→ 这就是f(qᵢ, D)与控制饱和度的k₁结合
“这篇文章是否异常长?” 一篇50页的论文自然比5页的论文包含更多关键词。BM25通过调整来平衡不同长度,避免长文档靠字数取胜。→ 这由参数b控制的|D|/avgdl
三个问题。没有神经网络。没有训练数据。只有优雅的数学(见下图)
最棒的是:BM25擅长精确关键词匹配——这往往是嵌入向量难以做到的。如果你的用户搜索“error code 5012”,嵌入向量可能返回语义相似的结果。而BM25会找到精确匹配。这就是混合搜索存在的原因。如今顶级的RAG系统将BM25与向量搜索结合。你得到了两全其美:语义理解加上精确关键词匹配。所以,在你为每个搜索问题投入GPU之前,考虑一下BM25。它可能已经解决了你的问题,或者在与语义搜索结合时让搜索效果更佳。
相似文章
@Al_Grigor: 不要默认从一开始就在RAG项目中使用向量搜索。先使用文本搜索。更简单:- 无需嵌入模型 ……
一条实用建议的推文,建议从一开始就用文本搜索(BM25)而不是默认用向量搜索来启动RAG项目,以降低复杂性;只有出现语义差距时才添加向量搜索。
为什么我停止使用语义嵌入进行工具选择并切换回BM25 [D]
作者分享了他们在agent中从语义嵌入切换到BM25进行工具选择的经验,发现在200个查询-工具对的数据集上,BM25的Top-1准确率达到81%,而嵌入只有64%,因为工具描述简短且关键词驱动,不像文档那样语义丰富。
BM25 + 向量搜索 + RRF 真的值得吗?
本文质疑将 BM25 与向量搜索结合 RRF 是否能提高智能体记忆检索的命中率,并暗示仅使用 BM25 可能就足够了。
@mixedbreadai:到如今,所有人都知道单向量嵌入模型对现代工作流极为有限。但它们包含更多…
单向量嵌入模型可用于提取稀疏潜在术语,而BM25可将这一词汇转化为强大的检索器。
Mongo 的向量搜索性能
本文讨论了 MongoDB 向量搜索功能的性能,可能与其他解决方案进行了比较,或强调了针对 AI 工作负载的改进。