检索策略

检索是RAG的核心,高质量的检索策略直接决定系统效果的上限。

共 3 篇文章·阅读时间:约30分钟

01稠密检索

稠密检索使用深度学习模型将文本编码为密集向量,通过向量相似度进行检索。

稠密检索原理

稠密检索的核心是使用神经网络编码器(Embedding模型)将查询和文档映射到同一个向量空间。 语义相近的文本在向量空间中距离更近。

工作流程

  1. 离线:文档通过Encoder编码为向量,存入向量数据库
  2. 在线:查询通过同一个Encoder编码为向量
  3. 计算查询向量与所有文档向量的相似度,返回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)

重排序在初步检索后使用更复杂的模型对结果进行精细排序。

重排序流程

  1. 向量检索:快速召回Top-100候选
  2. 重排序:使用Cross-Encoder精细排序
  3. 返回Top-10给LLM生成
Cross-Encoder

将查询和文档一起输入Encoder,计算相关性分数。
精度高但计算慢,适合小规模精细排序。

Cohere Rerank

云服务API,支持多语言。
开箱即用,效果优秀。

检索策略选择

  • 简单场景:纯向量检索即可
  • 术语密集:加入稀疏检索(BM25)
  • 精度要求高:向量检索 + 重排序
  • 最佳效果:混合检索 + 重排序
----