搜索系统 §
- Stage 1: Retrieval (快速召回)
- 方法:使用传统算法(如 BM25)或Bi-encoder(双编码器)。
- Bi-encoder:分别独立地将
query 和所有 documents 编码成向量,并存储在向量数据库中。查询时,只需计算 query 向量与所有 document 向量的相似度(如余弦相似度),这个过程极快。
- 目标:从数百万甚至数十亿的文档库中,快速捞回几百个相关的候选者(“宁可错杀,不可放过”)。
- Stage 2: Reranking (精准重排)
- 方法:使用 Cross-encoder。
- 过程:对第一阶段返回的这几百个候选文档,使用 Cross-encoder 逐一与
query 计算精准的相关性分数。
- 目标:根据 Cross-encoder 的分数对这些候选文档进行重新排序,将最相关的结果排在最前面,然后呈现给用户。
| 特性 | Cross-encoder (交叉编码器) | Bi-encoder (双编码器) |
|---|
| 角色定位 | Reranker (重排序器),专家评审员 | Retriever (召回器),海选面试官 |
| 工作方式 | 将 (Query, Doc) 一起处理 | 将 Query 和 Doc 分开处理 |
| 速度 | 慢 (每次查询都要实时计算) | 快 (文档向量可预计算和索引) |
| 准确度 | 高 (充分的词级别交互) | 中等 (仅通过向量的最终表示比较) |
| 典型架构 | model([CLS] Q [SEP] D [SEP]) -> score | score = cos_sim(model(Q), model(D)) |
| 使用场景 | 第二阶段:重排序 | 第一阶段:大规模召回 |