检索策略
检索是RAG的核心,高质量的检索策略直接决定系统效果的上限。
共 3 篇文章·阅读时间:约30分钟
01稠密检索
稠密检索使用深度学习模型将文本编码为密集向量,通过向量相似度进行检索。
稠密检索原理
稠密检索的核心是使用神经网络编码器(Embedding模型)将查询和文档映射到同一个向量空间。 语义相近的文本在向量空间中距离更近。
工作流程
- 离线:文档通过Encoder编码为向量,存入向量数据库
- 在线:查询通过同一个Encoder编码为向量
- 计算查询向量与所有文档向量的相似度,返回Top-K
实现方法
Encoder选择
通用场景:OpenAI text-embedding、BGE
中文场景:BGE-zh、text2vec
代码场景:code-embedding
向量数据库
Milvus、Qdrant、Pinecone、Chroma
选型依据:数据规模、延迟要求、部署环境
相似度度量
余弦相似度(Cosine)、点积(Dot Product)、
欧氏距离(L2)
稠密检索的优势
- 能够捕捉语义相似性,处理同义词和表达多样性
- 对拼写错误和语言变化更鲁棒
- 适合开放域问答和语义匹配场景
02稀疏检索
稀疏检索基于传统关键词匹配,适合精确术语匹配和专有名词检索场景。
稀疏检索原理
稀疏检索将文档表示为高维稀疏向量(维度等于词表大小), 每个维度对应一个词,值为该词的TF-IDF等权重。
稀疏vs稠密对比
- 稀疏:维度=词表大小(万级),大多数为0
- 稠密:维度=向量维度(百级),大多数非0
BM25算法
BM25是稀疏检索的经典算法,是TF-IDF的改进版本,解决了词频饱和问题。
BM25公式核心
Score(D, Q) = Σ IDF(qi) × (tf(t,d) × (k+1)) / (tf(t,d) + k × (1-b + b×|d|/avgdl))
其中k和b是参数,tf是词频,IDF是逆文档频率
稀疏检索的优势
- 对专有名词、术语匹配精确
- 可解释性强:明确显示匹配的关键词
- 计算高效,适合大规模文档
- 不依赖Embedding模型
03混合检索与重排序
混合检索结合多种检索方法,重排序进一步提升结果质量。
混合检索方法
并行混合 (Parallel)
同时执行稠密和稀疏检索,分别得到结果后合并。
合并策略:RRF(Reciprocal Rank Fusion)等
顺序混合 (Sequential)
先用稀疏检索粗筛(如BM25),再用稠密检索精排。
结合两者优势,平衡效率和精度。
查询扩展 (Query Expansion)
使用LLM扩展查询,提升召回率。
如:原查询"AI发展" → 扩展为"AI发展、人工智能、机器学习"
重排序 (Re-ranking)
重排序在初步检索后使用更复杂的模型对结果进行精细排序。
重排序流程
- 向量检索:快速召回Top-100候选
- 重排序:使用Cross-Encoder精细排序
- 返回Top-10给LLM生成
Cross-Encoder
将查询和文档一起输入Encoder,计算相关性分数。
精度高但计算慢,适合小规模精细排序。
Cohere Rerank
云服务API,支持多语言。
开箱即用,效果优秀。
检索策略选择
- 简单场景:纯向量检索即可
- 术语密集:加入稀疏检索(BM25)
- 精度要求高:向量检索 + 重排序
- 最佳效果:混合检索 + 重排序