08c. 检索算法与策略-混合检索
08c. 检索算法与策略-混合检索1. 概述 我们将学习混合检索技术的核心原理和实践方法掌握稀疏检索与稠密检索的融合策略了解RRF等结果融合算法为RAG系统构建兼顾精确匹配和语义理解的高效检索能力 。通过前两篇文档我们分别学习了稠密检索技术和稀疏检索技术。稠密检索能够通过向量嵌入捕捉文本的语义信息实现跨语言、同义词等智能检索但在精确匹配方面可能产生偏差。稀疏检索能够精确匹配用户查询中的关键词在处理产品型号、专有名词等精确匹配场景时表现出色但在语义理解方面存在局限。混合检索结合了两者的优势通过融合稀疏检索和稠密检索的结果我们能够兼顾精确匹配和语义理解的双重需求显著提升RAG系统的检索质量 ✨。前两篇文档08a. 检索算法与策略-稠密检索技术掘金 / 08a. 检索算法与策略-稠密检索技术CSDN08b. 检索算法与策略-稀疏检索掘金 / 08b. 检索算法与策略-稀疏检索CSDN2. 混合检索的原理 混合检索的核心思想是将稀疏检索和稠密检索的结果进行融合利用两者的优势互补。稀疏检索提供精确的关键词匹配能力稠密检索提供强大的语义理解能力通过合理的融合策略我们能够获得更全面、更准确的检索结果 。接下来我们将学习多种混合检索的实现方式了解稀疏检索和稠密检索如何配合使用以及常用的结果融合方法。3. 稀疏检索与稠密检索的配合 ⚙️混合检索的核心在于如何让稀疏检索和稠密检索有效地配合工作。我们需要设计合理的检索流程选择合适的融合策略才能充分发挥两者的优势 。3.1 混合检索的工作流程 混合检索的基本工作流程包括以下几个步骤1. 接收用户查询2. 并行执行稀疏检索3. 并行执行稠密检索4. 收集稀疏检索结果5. 收集稠密检索结果6. 结果融合7. 重新排序8. 返回最终结果从流程图可以看出稀疏检索和稠密检索是并行执行的这样可以提高检索效率。收集到两个检索结果后我们需要使用融合算法将它们合并然后重新排序返回最终结果。3.2 混合检索的Python实现 下面我们来看一个完整的混合检索实现示例importjiebafromrank_bm25importBM25Okapiimportnumpyasnpfromsklearn.metrics.pairwiseimportcosine_similarityclassHybridSearcher: 混合检索器 结合稀疏检索和稠密检索实现高效的混合检索 def__init__(self,documents,sparse_weight0.5,dense_weight0.5): 初始化混合检索器 Args: documents: 文档列表 sparse_weight: 稀疏检索权重 dense_weight: 稠密检索权重 self.documentsdocuments self.sparse_weightsparse_weight self.dense_weightdense_weight# 初始化稀疏检索器tokenized_docs[list(jieba.cut(doc))fordocindocuments]self.bm25BM25Okapi(tokenized_docs)# 初始化稠密检索器self.dense_embeddingsself._build_dense_embeddings(documents)def_build_dense_embeddings(self,documents): 构建稠密检索的向量嵌入 Args: documents: 文档列表 Returns: 文档向量嵌入矩阵 # 这里简化处理实际应使用真实的向量嵌入模型# 返回随机向量作为示例np.random.seed(42)returnnp.random.rand(len(documents),128)def_get_query_embedding(self,query): 获取查询的向量嵌入 Args: query: 查询字符串 Returns: 查询向量嵌入 # 这里简化处理实际应使用真实的向量嵌入模型# 返回随机向量作为示例np.random.seed(hash(query)%1000)returnnp.random.rand(128)defsearch(self,query,top_k5): 执行混合检索 Args: query: 查询字符串 top_k: 返回结果数量 Returns: 混合检索结果 # 稀疏检索tokenized_querylist(jieba.cut(query))sparse_scoresself.bm25.get_scores(tokenized_query)# 稠密检索query_embeddingself._get_query_embedding(query)dense_similaritiescosine_similarity(query_embedding.reshape(1,-1),self.dense_embeddings)[0]# 归一化得分sparse_scores_normalized(sparse_scores-sparse_scores.min())/(sparse_scores.max()-sparse_scores.min()1e-8)dense_scores_normalized(dense_similarities-dense_similarities.min())/(dense_similarities.max()-dense_similarities.min()1e-8)# 加权融合hybrid_scores(self.sparse_weight*sparse_scores_normalizedself.dense_weight*dense_scores_normalized)# 按得分排序并返回前top_k个结果sorted_indicesnp.argsort(hybrid_scores)[::-1][:top_k]results[]foridxinsorted_indices:results.append({document:self.documents[idx],score:hybrid_scores[idx],sparse_score:sparse_scores[idx],dense_score:dense_similarities[idx]})returnresults# 示例使用if__name____main__:documents[机器学习是人工智能的重要分支,深度学习是机器学习的一种,人工智能和机器学习发展迅速,自然语言处理是人工智能的核心技术,计算机视觉是人工智能的重要应用领域]searcherHybridSearcher(documents,sparse_weight0.6,dense_weight0.4)resultssearcher.search(人工智能,top_k3)print(混合检索结果)fori,resultinenumerate(results,start1):print(f{i}.{result[document]})print(f 综合得分:{result[score]:.4f})print(f 稀疏得分:{result[sparse_score]:.4f})print(f 稠密得分:{result[dense_score]:.4f})print()运行结果混合检索结果 1. 人工智能和机器学习发展迅速 综合得分: 1.0000 稀疏得分: 0.1383 稠密得分: 0.7816 2. 自然语言处理是人工智能的核心技术 综合得分: 0.9234 稀疏得分: 0.1383 稠密得分: 0.7735 3. 机器学习是人工智能的重要分支 综合得分: 0.7462 稀疏得分: 0.1291 稠密得分: 0.75893.3 融合策略的选择 在混合检索中我们需要选择合适的融合策略来合并稀疏检索和稠密检索的结果。常见的融合策略包括融合策略原理优点缺点适用场景加权融合对两种检索得分进行加权求和简单直观易于调参需要确定权重值通用场景RRF融合基于排名位置进行融合不依赖原始得分需要调参得分范围不一致的场景线性融合对归一化后的得分线性组合计算简单需要归一化得分范围一致的场景在实际项目中我们可以根据以下因素选择融合策略检索结果的特点如果两种检索方法的得分范围差异较大适合使用RRF融合业务需求如果需要强调某种检索方法可以使用加权融合性能要求如果对性能要求较高可以使用简单的线性融合3.4 权重调优 ⚖️在加权融合中稀疏检索和稠密检索的权重分配对最终结果影响很大。我们可以通过以下方式调优权重基于业务需求调优根据业务场景调整权重精确匹配重要增加稀疏检索权重语义理解重要增加稠密检索权重基于数据验证调优使用验证集测试不同权重组合准备标注好的测试数据测试不同权重组合的效果选择效果最好的权重组合基于用户反馈调优根据用户点击行为调整权重收集用户点击数据分析用户偏好动态调整权重3.5 混合检索的优势 混合检索相比单一检索方法具有以下优势优势说明提高召回率结合两种检索方法能够召回更多相关文档提高准确率融合多种检索结果能够提高结果的准确性增强鲁棒性单一检索方法失效时另一种方法可以补充适应性强能够适应不同类型的查询和文档根据实际测试数据单一检索策略的F1分数通常在0.65-0.75之间而精心设计的混合检索可以将这一指标提升到0.80以上。3.6 混合检索的应用场景 混合检索适用于以下场景专业领域检索如医疗、法律等领域需要精确匹配专业术语同时理解语义多语言检索需要处理不同语言的查询结合关键词匹配和语义理解长尾查询对于不常见的查询混合检索能够提供更好的结果个性化检索结合用户历史行为提供个性化的检索结果接下来我们将学习混合检索的实战注意事项了解在实际项目中如何应用混合检索技术 ️。4. 实战注意事项 ⚠️在实际项目中使用混合检索时我们需要注意融合策略的选择、参数调优和性能优化等问题 。4.1 权重分配的实战经验 在混合检索中权重分配是影响检索效果的关键因素。根据实际项目经验我们总结出以下配置建议场景类型稀疏检索权重稠密检索权重说明专业文档检索0.30.7语义理解更重要但关键词匹配作为保底线产品型号检索0.70.3精确匹配更重要关键词匹配是核心通用问答系统0.50.5两种检索方式同等重要错误码查询0.80.2关键词匹配是关键向量检索容易误召在实际项目中我们发现一个常见的误区过度依赖向量检索。比如用户搜索Error 1024时向量检索可能返回一堆毫不相关的系统错误内容。这时关键词检索BM25就是不可或缺的保底线。4.2 分块策略对混合检索的影响 分块策略直接影响混合检索的效果。根据实战经验我们总结出以下要点分块大小要适中建议设置256~512 Tokens约400~800中文字。分块太小会导致语义不完整分块太大则会降低检索精度。必须设置重叠建议设置10%~20%的重叠。这能确保如果切分点正好在一句话的中间这句话能在相邻的两个块中完整出现。按语义切分避免按字符硬切应按语义单元切分。对于Wiki文档建议按Markdown标题切分对于PDF文档可按段落聚合。4.3 元数据过滤的重要性 ️在实际项目中我们经常遇到这样的问题用户搜索2023年财报却召回了2021年财报的内容。这是因为向量检索只关注语义相似性忽略了时间等元数据。解决方案是为每个文档块添加元数据标签例如{year:2023,source:wiki,category:finance}在检索时先进行前置过滤Pre-filtering例如设置filteryear2023然后再执行混合检索。这是提升准确率最经济有效的手段。4.4 重排序的必要性 混合检索召回了大量文档后我们发现一个现象真正的答案可能位于第8个位置但系统只返回前5个结果导致答案被截断丢失。解决方案是引入重排序Rerank机制混合检索召回Top 50→ 重排序精选Top 5→ 大模型重排序器Reranker是一个精读模型它将查询和文档拼接在一起计算相关性得分准确率极高。常用的开源重排序器有bge-reranker-large中文效果极佳。4.5 上下文窗口的迷失中间现象 当我们一次性向大模型输入多个文档块时会出现迷失中间现象模型只引用了第1个和最后一个文档块中间的内容被忽略了。解决方案是采用凹形拼接策略将分数最高的文档块放置在上下文的开头和结尾分数稍低的放置在中间。例如按1-3-5-4-2的顺序拼接而不是简单的1-2-3-4-5。4.6 常见问题与解决方案 问题原因解决方案搜索IT部在哪办公召回了IT部负责办公设备维修向量检索语义漂移增加稀疏检索权重搜索合同违约责任召回了食堂管理规定的违约责任分块太碎上下文不完整增大分块大小设置重叠搜索具体错误码返回无关内容向量检索不擅长精确匹配增加关键词检索权重多轮对话中它是什么意思无法理解缺少上下文信息将历史问题与当前问题拼接后检索4.7 一个可参考的配置清单 根据实际项目经验我们总结出以下配置清单组件推荐配置说明分块大小512 tokens必须设置10%~15%的重叠稀疏检索器BM25关键词匹配是保底线稠密检索器BGE-M3支持多语言且长文本能力强权重分配Vector 0.7 Keyword 0.3作为良好的起点根据场景调整重排序器BGE-Reranker-v2-m3必备组件是提升效果的关键召回数量检索Top 50 → 重排序Top 5保证召回率精选上下文4.8 避坑口诀 根据实战经验我们总结出以下避坑口诀混合检索关键词检索是保底线向量检索是冲上限分块策略按语义切分重叠必须给足权重调优精确匹配重要增加稀疏权重语义理解重要增加稠密权重重排序大力出奇迹加上Rerank后效果立竿见影5. 总结 通过本文的学习我们对混合检索技术有了全面的了解掌握了如何结合稀疏检索和稠密检索的优势为RAG系统构建更加高效的检索能力 。

相关新闻

【Mysql】:如何配置最大连接数?

【Mysql】:如何配置最大连接数?

MySQL 数据库的 max_connections 参数用于控制服务器允许的最大并发连接数。增加这个值可以允许更多的客户端同时连接到数据库,但是需要注意的是,每个连接都会消耗一定的内存和其他资源,因此不能无限制地增加该值。 如何查看当前的最大连接数…

2026/5/17 10:24:47 阅读更多 →
OpenClaw机器人诞生了,首次拥有记忆,科幻电影照进现实了!

OpenClaw机器人诞生了,首次拥有记忆,科幻电影照进现实了!

还没有一台OpenClaw云服务器?点此即可享一键秒级部署。 手把手教你一键部署OpenClaw,1分钟搞定! 可视化面板快速接入QQ、企微、飞书、钉钉等IM应用,同时支持海外Discord、WhatsApp、Telegram、iMessage等应用。 OpenClaw这回彻底…

2026/7/5 3:17:53 阅读更多 →
半监督图像分类训练框架

半监督图像分类训练框架

import random #导入 Python 自带的随机数库。 import torch #导入 PyTorch 核心库。 import torch.nn as nn #导入 PyTorch 的神经网络模块,并简写为 nn。 import numpy as np #导入数值计算库 NumPy,简写为 np。 import os #导入 …

2026/7/4 20:44:26 阅读更多 →

最新新闻

AI智能体开发实战:从Coze到Dify,掌握未来高薪岗位核心技能

AI智能体开发实战:从Coze到Dify,掌握未来高薪岗位核心技能

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个面向2026年AI训练师和智能体工程师岗位的实战公开课,核心是掌握两大主流平台:扣子(Coze)和Di…

2026/7/5 22:40:55 阅读更多 →
PHP与Java跨语言AES加解密兼容性实现与实战指南

PHP与Java跨语言AES加解密兼容性实现与实战指南

1. 项目概述与核心价值最近在对接一个第三方支付平台的回调接口时,遇到了一个典型的老问题:对方使用Java服务,采用AES-128-CBC模式、PKCS5Padding填充方式对数据进行加密,然后进行Base64编码后传输。而我的后端服务是用PHP7写的。…

2026/7/5 22:38:55 阅读更多 →
东芝TC78H653FTG与PIC18F2458的直流电机控制方案

东芝TC78H653FTG与PIC18F2458的直流电机控制方案

1. 项目背景与核心组件介绍在工业自动化和消费电子领域,直流有刷电机因其结构简单、成本低廉和控制方便等优势,始终占据重要地位。然而,如何实现高效精准的电机控制一直是工程师面临的挑战。东芝公司的TC78H653FTG H桥驱动器与Microchip的PIC…

2026/7/5 22:38:55 阅读更多 →
MC6470与PIC18LF45K22嵌入式姿态控制系统设计

MC6470与PIC18LF45K22嵌入式姿态控制系统设计

1. MC6470与PIC18LF45K22硬件组合概述MC6470惯性测量单元与PIC18LF45K22微控制器的组合,为嵌入式控制系统提供了一套高性价比的硬件解决方案。这套系统特别适合需要实时姿态检测和精密运动控制的场景,如无人机飞控、自平衡机器人、工业机械臂等应用。MC6…

2026/7/5 22:38:54 阅读更多 →
扩散模型在老照片修复中的应用与技术解析

扩散模型在老照片修复中的应用与技术解析

1. 老照片修复的技术挑战与扩散模型优势 从事数字图像修复工作十余年,我见证了从传统手工修复到AI智能修复的技术演进。历史老照片修复一直是个令人头疼的问题——那些发黄、破损、褪色的老照片承载着珍贵记忆,却因年代久远变得模糊不清。传统修复方法主…

2026/7/5 22:36:54 阅读更多 →
3D视觉感知技术:原理、应用与工程实践

3D视觉感知技术:原理、应用与工程实践

1. 3D视觉感知技术:从平面到立体的认知革命2007年第一代iPhone发布时,那颗200万像素的后置摄像头曾让世界惊叹。但如今回头看,那不过是把现实世界"压扁"成二维图像。真正的突破发生在2017年,当iPhone X首次搭载TrueDept…

2026/7/5 22:36:54 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻