趋近智
向量 (vector)搜索擅长捕获语义并找到相似项,但它有时可能遗漏那些特定关键词、标识符或精确短语很重要的文档。例如,搜索像 XG-500 这样的产品代码或 calculate_fft 这样的特定函数名,如果语义表示未能充分突出该精确术语而非其更广泛的上下文 (context),可能无法可靠地找出最相关的文档。在此,传统关键词搜索技术仍具有显著价值。
结合关键词搜索,尤其使用Okapi BM25等有效算法,与向量搜索相结合,使您能够构建一个混合系统,该系统结合了两类方法的优势:向量提供的语义理解和关键词提供的精确术语匹配。
您可能了解TF-IDF(词频-逆文档频率),这是一种根据关键词相关性对文档评分的经典方法。它根据词语在文档中出现的频率(TF)以及该词语在整个文档集中的稀有程度(IDF),为文档中的每个词语计算权重 (weight)。基本思想是,在特定文档中频繁出现但整体稀有的词语,能很好地指示该文档的内容。
尽管TF-IDF奠定了基础,但它仍有局限。它没有考虑词频饱和效应(即一个词第10次出现对相关性贡献小于第1次出现),且缺少一种精细的方式来处理文档长度的差异。
BM25(最佳匹配25)是一种更高级的概率检索函数,它直接解决了这些局限,通常为关键词搜索带来更好效果。它已成为许多现代搜索引擎的标准。BM25改进了TF和IDF的思路,并引入了文档长度归一化 (normalization)。
在BM25中,给定查询 (包含词语 )时,文档 的评分公式通常表示为:
我们来逐一分析各个组成部分:
逆文档频率(IDF): 类似于TF-IDF,该部分衡量查询词 的稀有性或信息量。在较少文档中出现的词语会得到更高的IDF分数。计算IDF有多种方式;一种常用的方式是:
指集合中文档的总数, 是包含词语 的文档数量。添加 项是为了平滑处理,避免语料库中不存在的词语引起除零错误,并避免词语在超过半数文档中出现时引发的问题。
词频饱和: 分数 部分调整了原始词频 。参数 (parameter) (通常在1.2到2.0之间)控制分数饱和的速度。随着一个词语在文档中出现的频率增加,它对分数的贡献也增加,但增加的速率会减小。这避免了仅仅因为一个词语重复出现多次的文档不公平地主导搜索结果。
文档长度归一化: 术语 根据文档长度 相对于集合中平均文档长度 avgdl 来归一化分数。参数 (通常在0.75左右)控制归一化的程度。当 时,归一化完全生效;当 时,没有长度归一化。这有助于避免很长的文档仅仅因为有更多机会包含查询词而获得不公平的优势。
通过调整 和 ,您可以将BM25的行为调整以适应您的特定数据集和查询模式。
将BM25(或其他关键词算法)与向量 (vector)搜索结合通常涉及并行运行两种搜索类型,然后组合结果。
并行查询执行: 当用户查询到来时,它会同时发送到:
索引要求: 这种方法需要维护两种不同类型的索引:
系统架构: 您可以使用在应用层连接的独立专业系统,或采用为混合搜索设计的平台,这些平台内部管理稠密和稀疏(关键词)表示。选择取决于您的规模、性能需求和现有基础架构。
混合搜索系统在组合结果之前并行执行向量和关键词搜索的流程。
独立执行这些搜索会产生两组不同的候选文档,每组都根据各自的评分机制(向量的相似度分数,关键词的BM25分数)进行排序。接下来的重要一步,我们将在下一节讨论,是如何有效地合并或整合这些独立的结果列表,形成一个单一、一致的排序,既反映语义相关性,也反映关键词的重要性。
简洁的语法。内置调试功能。从第一天起就可投入生产。
为 ApX 背后的 AI 系统而构建
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•