本文属于 RAG 工程框架中的「2 索引与召回」环节,聚焦「Sparse Vector Retrieval」方法。可先阅读 RAG-00.方法概述 再进入本篇。
原理
Sparse 检索将文本编码为高维稀疏向量(词项或词项扩展权重),检索时做稀疏匹配(常配倒排索引)。
1 | flowchart LR |
优势与局限
- 优势:可解释性好;关键词可控;CPU 部署友好。
- 局限:抽象语义泛化弱于 dense;长尾同义表达召回可能不足。
资源与时延
- 索引开销:中(倒排结构成熟)。
- 查询时延:低到中。
- 工程复杂度:低于 ColBERT。
应用场景
- 法规、医疗、金融术语检索。
- 需要“为什么召回这条”的可解释系统。
统一合成数据示例
输入数据片段
1 | { |
中间结果(稀疏匹配)
1 | [ |
最终生成示例(含引用)
1 | { |
原始发表与工程实现
- 代表性原始发表:SPLADE (Formal et al., 2021)。
- 核心解决问题:解决可解释稀疏语义检索。
- 成熟实现工具:splade, Pyserini, Elasticsearch。
详细原理拆解
- 稀疏点积 score=sum_t w_q(t)*w_d(t),可解释哪些词项驱动召回。
- 典型实现可拆为:输入预处理 -> 方法核心计算 -> 候选/证据构建 -> 生成与引用。
- 工程调优重点:质量(准确率/引用率)与成本(时延/token)的联合优化。
1 | flowchart LR |
工程落地扩展示例
伪代码
1 | def splade_retrieve(query, sparse_encoder, inverted_index, top_k: int): |
参数示例
1 | sparse_model: splade-v3 |
常见失败案例
- 失败模式 1:领域词未在词表,稀疏激活为空,召回崩溃。
- 失败模式 2:同义词多,IDF 权重被稀释,需与 dense 混合。
- 失败模式 3:只看点积不看解释,忽略高权噪声词(如泛词「报销」)。
Demo 数据带入计算示例
1 | q 与 d 的稀疏权重在「报销」「上限」「机票」三维上做点积: |