引言
在RAG(检索增强生成)系统中,检索质量直接决定了最终生成内容的准确性和相关性,但单一检索方法的局限性日益凸显。混合检索技术作为一种创新的解决方案,通过结合不同检索方法的优势,显著提升了检索效果,为RAG系统注入了新的活力。
本文将深入探讨混合检索技术在RAG系统中的应用,包括语义检索与关键词检索的优缺点、BM25与向量检索的结合方式、混合检索的权重调整策略、稀疏-密集混合检索架构,以及混合检索在不同场景下的适用性。
1. 语义检索与关键词检索的优缺点
1.1 语义检索(密集检索)
语义检索,也称为密集检索或向量检索,是基于深度学习模型将文本转换为高维向量,然后通过计算向量间的相似度来找到语义相关的内容。
优点:
- 理解语义相关性:能够捕捉文本的深层语义,即使查询和文档使用不同的词汇表达相同的概念,也能找到相关内容。
- 处理同义词和上下文:能够理解同义词、近义词和上下文信息,提高检索的灵活性。
- 多语言理解:支持跨语言检索,如用中文查询可以匹配到英文文档。
- 多模态支持:可以扩展到图像、音频等多模态内容的检索。
- 容错性强:对拼写错误、模糊描述有较好的容忍度。
缺点:
- 计算成本高:向量计算和存储需要较高的计算资源。
- 对低频词和专有名词不敏感:可能无法准确捕捉罕见术语或专有名词的重要性。
- 短查询效果差:对于只有几个词的短查询,向量表示可能不够丰富,导致检索效果不佳。
- 精确匹配能力弱:难以处理需要精确匹配的查询,如产品编号、特定代码等。
- 黑盒特性:向量模型的决策过程不透明,难以解释和调试。
1.2 关键词检索(稀疏检索)
关键词检索,也称为稀疏检索,主要基于TF-IDF、BM25等算法,通过匹配查询和文档中的关键词来确定相关性。
优点:
- 精确匹配能力强:对特定术语、名称、ID等有出色的精确匹配能力。
- 计算效率高:相比向量检索,计算和存储成本更低。
- 对低频词敏感:能够识别并重视文档中的低频但重要的词汇。
- 短查询效果好:即使只有几个关键词的查询也能有效工作。
- 可解释性强:检索结果可以通过匹配的关键词直观解释。
缺点:
- 语义理解能力弱:无法理解同义词和上下文,只关注词汇的精确匹配。
- 依赖词汇重叠:如果查询和相关文档没有共同的词汇,则无法检索到相关内容。
- 语言依赖性强:跨语言检索能力有限。
- 无法处理模糊查询:对拼写错误和模糊表达敏感。
- 难以处理长文本语义:难以捕捉长文本的整体语义。
1.3 两种检索方法的互补性
语义检索和关键词检索在本质上是互补的:
- 语义检索擅长理解"意思相似但表达不同"的内容
- 关键词检索擅长找到包含特定术语和精确匹配的内容
这种互补性正是混合检索技术的基础,通过结合两者的优势,可以显著提高检索的全面性和准确性。
2. BM25与向量检索的结合方式
BM25(Best Matching 25)是一种经典的关键词检索算法,而向量检索则是语义检索的主要实现方式。将这两种技术结合起来,可以创建更强大的混合检索系统。
2.1 BM25算法简介
BM25是一种基于概率的检索模型,是TF-IDF的改进版本,用于评估文档与查询的相关性。其核心公式为:
score(D, Q) = ∑(IDF(qi) · (f(qi, D) · (k1 + 1)) / (f(qi, D) + k1 · (1 - b + b · |D| / avgdl)))
其中:
- D是文档,Q是查询
- f(qi, D)是词qi在文档D中的频率
- |D|是文档D的长度
- avgdl是平均文档长度
- k1和b是调整参数
BM25的优势在于它能够平衡词频、文档长度和逆文档频率,对于关键词匹配非常有效。
2.2 向量检索简介
向量检索基于文本嵌入模型(如BERT、Sentence-BERT等),将文本转换为高维向量,然后通过计算向量间的相似度(如余弦相似度)来确定相关性。其基本流程为:
- 使用预训练模型将文本转换为向量表示
- 构建向量索引(如HNSW、IVF等)
- 计算查询向量与文档向量的相似度
- 返回相似度最高的文档
2.3 结合方式
BM25与向量检索的结合主要有以下几种方式:
2.3.1 并行检索与结果融合
最直接的结合方式是分别执行BM25和向量检索,然后融合两者的结果:
- 独立检索:使用BM25和向量检索分别获取候选文档
- 结果融合:通过某种策略(如RRF、线性组合等)合并两组结果
- 重新排序:对合并后的结果进行重新排序
这种方法的优点是实现简单,可以灵活调整两种检索方法的权重;缺点是需要维护两套索引,且融合策略可能影响最终效果。
2.3.2 级联检索
级联检索是一种多阶段检索方法:
- 粗检索:使用计算成本较低的方法(通常是BM25)获取初步候选集
- 精检索:使用更精确但计算成本更高的方法(通常是向量检索)对候选集进行重新排序
这种方法的优点是计算效率高,适合大规模数据集;缺点是初步筛选可能会过滤掉一些语义相关但关键词不匹配的文档。
2.3.3 稀疏-密集混合表示
将文档同时表示为稀疏向量(BM25)和密集向量(嵌入),然后在检索时同时考虑两种表示:
- 双重索引:为每个文档创建稀疏和密集两种表示
- 混合相似度:定义一个结合两种表示的相似度度量
- 联合检索:基于混合相似度进行检索
这种方法的优点是能够在单次检索中同时考虑关键词匹配和语义相关性;缺点是需要设计合适的混合相似度度量。
2.3.4 基于Sparse-BM25的实现
近期的一些向量数据库(如Milvus 2.5)引入了基于稀疏向量的BM25实现(Sparse-BM25),将BM25转化为向量操作:
- 稀疏向量表示:将词频表示为稀疏向量
- 向量化BM25:将BM25计算转化为向量操作
- 统一索引:在向量数据库中统一管理稀疏和密集向量
这种方法的优点是统一了检索范式,可以利用向量数据库的优化;缺点是实现相对复杂,需要特定的向量数据库支持。
3. 混合检索的权重调整策略
在混合检索系统中,如何平衡不同检索方法的贡献是关键问题。权重调整策略直接影响检索结果的质量和相关性。
3.1 线性组合策略
最常见的权重调整策略是线性组合,即通过加权平均来融合不同检索方法的分数:
final_score = α * dense_score + (1 - α) * sparse_score
其中:
- dense_score是向量检索(密集检索)的相似度分数
- sparse_score是BM25(稀疏检索)的相似度分数
- α是权重参数,取值范围为[0, 1]
当α=1时,系统完全依赖向量检索;当α=0时,系统完全依赖BM25检索。通过调整α值,可以控制两种检索方法的相对重要性。
3.2 动态权重调整
静态的权重参数可能无法适应不同类型的查询。动态权重调整根据查询特性自动调整权重:
- 查询长度感知:短查询可能更适合关键词检索,长查询可能更适合语义检索
- 查询类型识别:识别查询是否包含专有名词、术语或ID,相应调整权重
- 查询模糊度评估:评估查询的模糊程度,模糊查询可能更适合语义检索
动态权重调整可以通过机器学习模型实现,该模型根据查询特征预测最优的权重参数。
3.3 排序融合算法
除了简单的线性组合,还有一些更复杂的排序融合算法:
3.3.1 倒数排名融合(RRF)
RRF(Reciprocal Rank Fusion)是一种流行的排序融合算法,其公式为:
RRF_score(d) = ∑(1 / (k + rank_i(d)))
其中:
- rank_i(d)是文档d在第i个检索系统中的排名
- k是一个常数(通常为60),用于减轻排名靠前的文档的影响
RRF不需要原始相似度分数,只需要排名信息,因此适用于不同检索系统的结果融合。
3.3.2 Borda计数
Borda计数是一种基于排名的投票系统:
Borda_score(d) = ∑(N - rank_i(d))
其中N是候选文档的总数。排名越高的文档获得的分数越高。
3.3.3 CombMNZ
CombMNZ结合了分数和出现次数:
CombMNZ(d) = count(d) * ∑(norm_score_i(d))
其中:
- count(d)是文档d在各个检索系统结果中出现的次数
- norm_score_i(d)是归一化后的相似度分数
3.4 学习排序(Learning to Rank)
学习排序是一种使用机器学习来优化排序的方法:
- 特征提取:从不同检索系统获取特征(