RAG prepare
About 3 min
检索算法
检索,retrieval,是 RAG 中最重要的第一步。完整的检索流程包含两个阶段:表征(将文本转化为数学表示) 与 匹配(在数据库中寻找最相似的结果)。
稀疏检索(Sparse Retrieval)
稀疏检索主要基于关键词匹配。它非常擅长处理精确匹配(如人名、产品型号、特定术语),但难以理解同义词。
传统稀疏检索
- TF-IDF: 经典的加权方法,根据词频(TF)和逆文档频率(IDF)计算权重。
- BM25(Best Matching 25)
神经稀疏检索
这类模型利用深度学习(如 BERT)来学习词的权重,甚至能进行查询扩展(Query Expansion),即在向量中激活文档里没出现但相关的词。
- SPLADE (V1/V2): 目前 SOTA(最先进)的稀疏检索模型。它通过 BERT 预测词表中的词项重要性,能自动实现“语义扩展”(例如搜“汽车”时,向量中“车辆”的维度也会被激活)。
- DeepCT: 利用 BERT 学习每个词在特定上下文中的权重,替换传统的 TF 词频。
- Doc2Query: 在索引阶段利用 T5 等生成模型为文档生成可能的问题,并拼接到文档中,从而增加关键词覆盖率。
稠密检索(Dense Retrieval)
稠密检索通过双编码器(Bi-Encoders)将文本映射到低维稠密向量(通常 768 或 1024 维),通过计算向量间的余弦相似度或内积来检索。它擅长处理语义相关性。
语义表征模型 (Embedding Models)
- 双编码器 (Bi-Encoders): 如 DPR、BGE、E5、OpenAI text-embedding。将查询和文档独立编码。
- 后交互模型 (Late Interaction): 如 ColBERT。保留 Token 级别的特征,在检索时进行细粒度交互,效果更好但存储开销大。
k-最近邻算法 (kNN Search)
k-Nearest Neighbors
- HNSW (基于图):性能最强,目前向量数据库的主流选择。
- IVF (基于聚类):通过将向量空间划分为区域来缩小搜索范围。
- PQ (乘积量化):通过压缩向量数据来降低内存占用。
近似最近邻搜索算法 (ANN Search)
Approximate Nearest Neighbor
- HNSW (基于图):性能最强,目前向量数据库的主流选择。
- IVF (基于聚类):通过将向量空间划分为区域来缩小搜索范围。
- PQ (乘积量化):通过压缩向量数据来降低内存占用。
混合检索(Hybird Retrieval)
区别
| 特性 | Sparse Retrieval (如 BM25, SPLADE) | Dense Retrieval (如 BGE, DPR, OpenAI) |
|---|---|---|
| 匹配原理 | 关键词/项 匹配 | 语义/意图 匹配 |
| 优点 | 精确匹配好(人名、货号);冷启动快;无需训练。 | 语义理解强(同义词、意图);跨语言能力强。 |
| 缺点 | 词汇鸿沟(搜“电脑”找不到“计算机”)。 | 容易产生“幻觉”匹配;难以匹配生僻的特定词汇。 |
| 适用场景 | 法律文件、技术手册、特定实体搜索。 | 问答系统、聊天机器人、通用语义搜索。 |
