什么是 稠密检索(Dense Retrieval)?
稠密检索(Dense Retrieval)是一种第一阶段搜索方法,它把查询和文档编码为紧凑数值向量,再按声明的向量相似度或距离函数排序候选。
工作原理
先定义 Embedding 契约
分别记录 Query 与 Document 的预处理、模型 Revision、Tokenizer、任务前缀、Pooling 规则、输出维度、数值类型和是否归一化。只有向量已归一化时,Cosine 与 Dot Product 才会产生相同排序;Euclidean Distance 又是另一套契约。除非已经证明兼容,不要在一个逻辑索引中混用不同 Revision 的向量。迁移应构建并行索引,在切流前比较结果重合度、标注相关性、延迟与下游答案证据。
区分模型召回与 ANN 召回
Encoder 决定相关与不相关内容在向量空间中的位置,索引决定在资源预算下能否找到最近候选。先在代表性子集运行 Exact Search,再以其为参照测量 ANN Recall@K,并搜索 HNSW、IVF、Quantization 或等价参数。元数据与权限过滤必须声明 Pre-filter 或 Post-filter 语义。ANN Recall 再高,也无法修复把相关片段编码到远处的模型。
在生成前独立评测检索
使用查询级相关性标注,报告 Candidate Recall@K、MRR 或 nDCG、p50/p95 延迟、索引内存、更新滞后、无结果率与 Filter Exhaustion,并切分改写、精确 ID、否定、语言、时间、权限和域外查询。原始 [DPR 研究](https://aclanthology.org/2020.emnlp-main.550/)建立了面向开放域问答的实用双编码器路线,[BEIR](https://arxiv.org/abs/2104.08663)随后说明 Zero-shot 泛化会随任务显著变化。任何论文收益都只能在对应语料、标注与检索协议内解释。
主要特点
- 把查询和文档映射到兼容表示空间中的紧凑向量
- 无需精确词项重合即可匹配改写与概念相似性
- 使用精确或近似最近邻搜索生成第一阶段候选
- 把编码器质量与索引近似、过滤和更新行为分开
- 输出模型特定的相似度,而不是校准后的相关概率
- 需要协同管理模型、Tokenizer、预处理与索引 Revision
常见用途
- 为 RAG 与问答系统召回语义相关证据
- 跨改写检索相似客服工单或开发文档
- 使用经过目标语言对评测的模型生成多语言候选
- 为后续重排生成高召回候选集
- 通过 Shadow Index 比较 Embedding 与 ANN Revision 后再迁移
示例
Loading code...常见问题
稠密检索、向量搜索与语义搜索是同一概念吗?
三者有交集但不相同。稠密检索描述用 Dense Representation 排序候选;向量搜索是也可服务非语义向量的执行原语;语义搜索则是用户意图,可以组合稠密、稀疏和重排信号。
稠密检索应该使用余弦相似度还是点积?
应使用模型及训练目标规定的 Metric。只有向量归一化后,Cosine 与 Dot Product 才产生相同排序。改变归一化或 Metric 会改变分数语义,必须重新做兼容性和相关性评测。
Embedding 模型变化后必须重新编码文档吗?
通常必须。模型、Tokenizer、Prefix、Pooling 或维度变化都可能产生不同向量空间。应构建并行索引验证;除非官方明确保证兼容,不要用新 Query Encoder 查询旧文档向量。
为什么余弦相似度很高仍可能返回错误片段?
相似度反映学习到的几何关系,不等于答案正确。领域漂移、分块、否定、数字、标识符和权限缺失都可能产生误导邻居。应使用标注查询与下游证据检查,而不是依赖通用阈值。
Reranker 能恢复稠密检索漏掉的相关文档吗?
不能。Reranker 只能重排收到的候选。应在重排前测量 Candidate Recall@K;如果 Dense 对精确或领域证据存在系统性漏召回,就需要词法或 Hybrid 分支。